You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/06/09 06:23:49 UTC

[causeway] branch spring6 updated: CAUSEWAY-3483: Move Vaadin Viewer to the 'Attic'

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch spring6
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/spring6 by this push:
     new 4dcf676aa7 CAUSEWAY-3483: Move Vaadin Viewer to the 'Attic'
4dcf676aa7 is described below

commit 4dcf676aa72536357d6932762ee1125dd4e4cb97
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 9 08:23:44 2023 +0200

    CAUSEWAY-3483: Move Vaadin Viewer to the 'Attic'
---
 antora/playbooks/site-incubator.yml                |   6 -
 antora/playbooks/site.yml                          |   6 -
 bom/pom.xml                                        |  15 -
 examples/demo/javafx/pom.xml                       | 152 ---------
 .../main/java/demoapp/javafx/DemoAppJavaFx.java    |  73 ----
 .../src/main/java/demoapp/javafx/gift_32.png       | Bin 1069 -> 0 bytes
 .../javafx/src/main/java/demoapp/javafx/icon.png   | Bin 1926 -> 0 bytes
 .../java/demoapp/javafx/object_fallback_icon.png   | Bin 485 -> 0 bytes
 .../javafx/src/main/resources/log4j2-spring.xml    |  60 ----
 .../javafx/integtest/DemoFxBootstrapTest.java      |  33 --
 .../javafx/integtest/DemoFxTestAbstract.java       |  51 ---
 .../integtest/DemoFxTestConfig_usingJdo.java       |  67 ----
 examples/demo/pom.xml                              |  28 --
 examples/demo/thymeflux/pom.xml                    | 112 ------
 .../demoapp/webapp/thymeflux/DemoAppThymeflux.java |  89 -----
 .../thymeflux/src/main/resources/log4j2-spring.xml |  52 ---
 examples/demo/vaadin/.gitignore                    |  13 -
 examples/demo/vaadin/pom.xml                       | 211 ------------
 .../java/demoapp/webapp/vaadin/DemoAppVaadin.java  |  97 ------
 .../vaadin/src/main/resources/log4j2-spring.xml    |  52 ---
 .../adoc/modules/ROOT/partials/component-nav.adoc  |   3 -
 incubator/pom.xml                                  |  33 --
 incubator/viewers/javafx/adoc/antora.yml           |  19 --
 .../viewers/javafx/adoc/modules/javafx/nav.adoc    |   4 -
 .../javafx/adoc/modules/javafx/pages/about.adoc    |   6 -
 .../adoc/modules/javafx/partials/module-nav.adoc   |   3 -
 incubator/viewers/javafx/headless/pom.xml          |  72 ----
 .../javafx/headless/src/main/java/module-info.java |  32 --
 .../javafx/headless/PrimaryStageInitializer.java   |  47 ---
 .../javafx/headless/PrimaryStageReadyEvent.java    |  42 ---
 .../headless/SpringBootJavaFxApplication.java      | 103 ------
 incubator/viewers/javafx/model/pom.xml             |  55 ---
 .../javafx/model/src/main/java/module-info.java    |  41 ---
 .../model/action/ActionUiModelFactoryFx.java       |  30 --
 .../javafx/model/action/ActionUiModelFx.java       |  65 ----
 .../viewer/javafx/model/binding/BindingsFx.java    | 241 -------------
 .../viewer/javafx/model/context/UiContextFx.java   |  65 ----
 .../events/CausewayModuleIncViewerJavaFxModel.java |  41 ---
 .../javafx/model/events/JavaFxViewerConfig.java    |  40 ---
 .../viewer/javafx/model/icon/IconService.java      |  31 --
 .../incubator/viewer/javafx/model/util/_fx.java    | 379 ---------------------
 incubator/viewers/javafx/pom.xml                   | 110 ------
 incubator/viewers/javafx/ui/pom.xml                |  55 ---
 .../javafx/ui/src/main/java/module-info.java       |  66 ----
 .../javafx/ui/CausewayModuleIncViewerJavaFxUi.java |  91 -----
 .../javafx/ui/components/UiComponentFactoryFx.java | 121 -------
 .../javafx/ui/components/UiComponentHandlerFx.java |  51 ---
 .../ui/components/collections/TableViewFx.java     | 203 -----------
 .../javafx/ui/components/dialog/Dialogs.java       | 141 --------
 .../viewer/javafx/ui/components/form/FormPane.java | 135 --------
 .../ui/components/form/field/CustomFieldFx.java    |  88 -----
 .../ui/components/markup/MarkupFieldFactory.java   | 173 ----------
 .../ui/components/number/NumberFieldFactory.java   |  72 ----
 .../javafx/ui/components/object/ObjectViewFx.java  | 266 ---------------
 .../objectref/ObjectReferenceFieldFactory.java     |  77 -----
 .../ui/components/other/FallbackFieldFactory.java  |  45 ---
 .../javafx/ui/components/panel/TitledPanel.java    |  53 ---
 .../components/temporal/TemporalFieldFactory.java  |  78 -----
 .../ui/components/text/TextFieldFactory.java       |  66 ----
 .../disabling/DisablingDecoratorForButton.java     |  49 ---
 .../disabling/DisablingDecoratorForFormField.java  |  50 ---
 .../ui/decorator/icon/IconDecoratorForLabeled.java |  57 ----
 .../decorator/icon/IconDecoratorForMenuItem.java   |  59 ----
 .../ui/decorator/icon/IconServiceDefault.java      |  65 ----
 .../prototyping/PrototypingDecoratorForButton.java |  57 ----
 .../PrototypingDecoratorForFormField.java          |  54 ---
 .../prototyping/PrototypingInfoPopupProvider.java  | 135 --------
 .../viewer/javafx/ui/main/MainViewFx.java          | 136 --------
 .../viewer/javafx/ui/main/MenuBuilderFx.java       |  81 -----
 .../viewer/javafx/ui/main/UiActionHandlerFx.java   | 122 -------
 .../viewer/javafx/ui/main/UiBuilderFx.java         |  98 ------
 .../viewer/javafx/ui/main/UiContextFxDefault.java  | 111 ------
 .../viewers/javafx/ui/src/main/resources/ui.css    |  23 --
 .../viewers/javafx/ui/src/main/resources/ui.fxml   |  78 -----
 incubator/viewers/javafx/viewer/pom.xml            |  46 ---
 .../javafx/viewer/src/main/java/module-info.java   |  41 ---
 .../CausewayModuleIncViewerJavaFxViewer.java       |  49 ---
 incubator/viewers/thymeflux/applib/pom.xml         |  50 ---
 .../applib/src/main/java/module-info.java          |  24 --
 .../CausewayModuleIncViewerThymefluxApplib.java    |  30 --
 incubator/viewers/thymeflux/model/pom.xml          |  80 -----
 .../thymeflux/model/src/main/java/module-info.java |  32 --
 .../CausewayModuleIncViewerThymefluxModel.java     |  38 ---
 .../model/root/ThymefluxRootController.java        |  57 ----
 incubator/viewers/thymeflux/pom.xml                |  87 -----
 incubator/viewers/thymeflux/test/pom.xml           |  62 ----
 .../thymeflux/test/ThymefluxFeaturesApp.java       |  65 ----
 .../ThymefluxConfig_headlessPersistence.java       | 125 -------
 .../test/features/ThymefluxFeaturesController.java |  63 ----
 .../test/src/main/resources/application.yml        | 135 --------
 .../test/src/main/resources/log4j2-spring.xml      |  52 ---
 .../test/src/main/resources/menubars.layout.xml    | 161 ---------
 .../src/main/resources/static/images/favicon.ico   | Bin 32038 -> 0 bytes
 .../test/src/main/resources/static/images/gift.svg |  59 ----
 .../src/main/resources/static/images/gift_256.png  | Bin 6863 -> 0 bytes
 .../src/main/resources/static/images/gift_48.png   | Bin 7020 -> 0 bytes
 .../resources/templates/basic/progressbar.html     |  24 --
 .../src/main/resources/templates/features.html     | 125 -------
 .../src/main/resources/templates/partial/echo.html |  20 --
 .../main/resources/templates/partial/greeting.html |  20 --
 .../thymeflux/test/ThymefluxViewerTests.java       |  88 -----
 incubator/viewers/thymeflux/viewer/pom.xml         |  91 -----
 .../viewer/src/main/java/module-info.java          |  37 --
 .../CausewayModuleIncViewerThymefluxViewer.java    |  52 ---
 .../resources/static/css/causeway-thymeflux.css    |  21 --
 .../resources/templates/nav/topNavSection.html     |  58 ----
 .../templates/prototyping/image-solid.svg          |   1 -
 .../viewer/src/main/resources/templates/root.html  | 153 ---------
 incubator/viewers/vaadin/.gitignore                |  15 -
 incubator/viewers/vaadin/adoc/antora.yml           |  19 --
 .../viewers/vaadin/adoc/modules/vaadin/nav.adoc    |   4 -
 .../vaadin/adoc/modules/vaadin/pages/about.adoc    |   6 -
 .../adoc/modules/vaadin/partials/module-nav.adoc   |   3 -
 incubator/viewers/vaadin/model/pom.xml             | 150 --------
 .../model/CausewayModuleIncViewerVaadinModel.java  |  33 --
 .../model/action/ActionUiModelFactoryVaa.java      |  29 --
 .../vaadin/model/action/ActionUiModelVaa.java      |  57 ----
 .../model/context/MemberInvocationHandler.java     |  30 --
 .../viewer/vaadin/model/context/UiContextVaa.java  |  54 ---
 .../viewer/vaadin/model/decorator/Decorators.java  | 175 ----------
 .../incubator/viewer/vaadin/model/util/Vaa.java    |  87 -----
 incubator/viewers/vaadin/pom.xml                   |  68 ----
 incubator/viewers/vaadin/ui/frontend/index.html    |  23 --
 incubator/viewers/vaadin/ui/pom.xml                | 162 ---------
 .../vaadin/ui/CausewayModuleIncViewerVaadinUi.java |  69 ----
 .../vaadin/ui/auth/AuthSessionStoreUtil.java       |  81 -----
 .../viewer/vaadin/ui/auth/LogoutHandlerVaa.java    |  64 ----
 .../ui/auth/VaadinAuthenticationHandler.java       | 141 --------
 .../viewer/vaadin/ui/binding/BindingsVaa.java      | 373 --------------------
 .../ui/components/UiComponentFactoryVaa.java       |  95 ------
 .../ui/components/UiComponentHandlerVaa.java       |  45 ---
 .../vaadin/ui/components/action/ActionDialog.java  | 222 ------------
 .../vaadin/ui/components/action/ActionForm.java    |  67 ----
 .../vaadin/ui/components/blob/BlobField.java       |  68 ----
 .../ui/components/blob/BlobFieldFactory.java       |  48 ---
 .../vaadin/ui/components/clob/ClobField.java       |  58 ----
 .../ui/components/clob/ClobFieldFactory.java       |  48 ---
 .../ui/components/collection/TableViewVaa.java     | 132 -------
 .../vaadin/ui/components/debug/DebugField.java     |  79 -----
 .../vaadin/ui/components/markup/MarkupField.java   |  60 ----
 .../ui/components/markup/MarkupFieldFactory.java   |  47 ---
 .../vaadin/ui/components/object/ObjectViewVaa.java | 276 ---------------
 .../ui/components/other/FallbackFieldFactory.java  |  95 ------
 .../vaadin/ui/components/temporal/DateField.java   |  57 ----
 .../components/temporal/TemporalFieldFactory.java  | 131 -------
 .../ui/components/text/TextFieldFactory.java       |  52 ---
 .../ui/components/text/uuid/UuidFieldFactory.java  |  60 ----
 .../vaadin/ui/pages/login/VaadinLoginView.java     | 118 -------
 .../viewer/vaadin/ui/pages/main/MainViewVaa.java   | 160 ---------
 .../ui/pages/main/MainView_createHeader.java       | 108 ------
 .../vaadin/ui/pages/main/MenuBuilderVaa.java       |  90 -----
 .../viewer/vaadin/ui/pages/main/TabUtil.java       |  72 ----
 .../vaadin/ui/pages/main/UiActionHandlerVaa.java   |  89 -----
 .../vaadin/ui/pages/main/UiContextVaaDefault.java  | 110 ------
 .../viewer/vaadin/ui/util/LocalResourceUtil.java   |  61 ----
 .../viewer/vaadin/ui/util/PrismResourcesVaa.java   |  41 ---
 .../resources/frontend/css/action-dialog.css       |  83 -----
 .../resources/frontend/css/dialog-overlay.css      |  50 ---
 .../META-INF/resources/frontend/css/menu.css       |  29 --
 .../src/main/resources/static/frontend/index.html  |  23 --
 incubator/viewers/vaadin/ui/vite.config.ts         |   9 -
 incubator/viewers/vaadin/viewer/pom.xml            |  93 -----
 .../CausewayModuleIncViewerVaadinViewer.java       | 134 --------
 .../vaadin/viewer/CausewayServletForVaadin.java    |  88 -----
 .../viewer/src/main/resources/vaadin.properties    |  21 --
 pom.xml                                            |  58 ----
 .../causeway/tooling/cli/test/causeway-tooling.yml |   2 -
 167 files changed, 12203 deletions(-)

diff --git a/antora/playbooks/site-incubator.yml b/antora/playbooks/site-incubator.yml
index 715da887a8..c9cb448b66 100644
--- a/antora/playbooks/site-incubator.yml
+++ b/antora/playbooks/site-incubator.yml
@@ -46,12 +46,6 @@ content:
     - url: .
       start_path: incubator/viewers/graphql/adoc # incubator
       branches: HEAD
-#    - url: .
-#      start_path: incubator/viewers/javafx/adoc # incubator
-#      branches: HEAD
-    - url: .
-      start_path: incubator/viewers/vaadin/adoc # incubator
-      branches: HEAD
 
 # mavendeps
     - url: .
diff --git a/antora/playbooks/site.yml b/antora/playbooks/site.yml
index fcee292ca3..4ce2408de4 100644
--- a/antora/playbooks/site.yml
+++ b/antora/playbooks/site.yml
@@ -170,12 +170,6 @@ content:
     - url: .
       start_path: incubator/viewers/graphql/adoc # incubator
       branches: HEAD
-#    - url: .
-#      start_path: incubator/viewers/javafx/adoc # incubator
-#      branches: HEAD
-    - url: .
-      start_path: incubator/viewers/vaadin/adoc # incubator
-      branches: HEAD
 
 # mavendeps
     - url: .
diff --git a/bom/pom.xml b/bom/pom.xml
index b1d88b0228..8e975bc98c 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -189,8 +189,6 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 
         <togglz.version>4.0.1</togglz.version>
 
-        <vaadin.version>24.0.5</vaadin.version>
-
         <wicket.version>10.0.0-M1-SNAPSHOT</wicket.version>
         <wicket-bootstrap.version>6.0.4</wicket-bootstrap.version> <!-- de.agilecoders.wicket:wicket-bootstrap... -->
         <wicket-webjars.version>3.0.7</wicket-webjars.version>
@@ -1797,19 +1795,6 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 				<version>${jsoup.version}</version>
 			</dependency>
 
-			<dependency>
-				<groupId>com.vaadin</groupId>
-				<artifactId>vaadin-bom</artifactId>
-				<version>${vaadin.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-			<dependency>
-			    <groupId>com.vaadin</groupId>
-			    <artifactId>vaadin-maven-plugin</artifactId>
-			    <version>${vaadin.version}</version>
-			</dependency>
-
 			<dependency>
 				<groupId>org.apache.wicket</groupId>
 				<artifactId>wicket</artifactId>
diff --git a/examples/demo/javafx/pom.xml b/examples/demo/javafx/pom.xml
deleted file mode 100644
index 3a40ff6a7c..0000000000
--- a/examples/demo/javafx/pom.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.examples.apps</groupId>
-		<artifactId>demo-parent</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>demo-javafx</artifactId>
-
-	<name>Demo - JavaFX</name>
-
-	<packaging>jar</packaging>
-
-	<properties>
-		<maven.deploy.skip>true</maven.deploy.skip>
-		<sonar.skip>true</sonar.skip>
-	</properties>
-
-	<build>
-		<resources>
-			<resource>
-				<filtering>false</filtering>
-				<directory>src/main/resources</directory>
-			</resource>
-			<resource>
-				<filtering>false</filtering>
-				<directory>src/main/java</directory>
-				<includes>
-					<include>**</include>
-				</includes>
-				<excludes>
-					<exclude>**/*.java</exclude>
-				</excludes>
-			</resource>
-		</resources>
-	</build>
-
-	<dependencies>
-
-		<!-- DEMO DOMAIN -->
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-domain</artifactId>
-			<type>jar</type>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.causeway.mavendeps</groupId>
-					<artifactId>causeway-mavendeps-webapp</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.causeway.testing</groupId>
-					<artifactId>causeway-testing-h2console-ui</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.persistence</groupId>
-			<artifactId>causeway-persistence-jdo-applib</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-		
-		<!-- SECURITY -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-security</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.security</groupId>
-			<artifactId>causeway-security-bypass</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.security</groupId>
-			<artifactId>causeway-security-shiro</artifactId>
-		</dependency>
-
-		<!-- INCUBATOR: JAVAFX VIEWER -->
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-viewer</artifactId>
-			<!-- incubator version is not managed by app starter bundles -->
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- EXTENSIONS -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-metamodel</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui</artifactId>
-			<type>pom</type>
-			<version>${project.version}</version>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-metamodel</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-ui</artifactId>
-			<type>pom</type>
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- INTEGRATION TESTING -->
-		
-		<dependency>
-			<groupId>org.apache.causeway.testing</groupId>
-			<artifactId>causeway-testing-integtestsupport-applib</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<!-- OTHER DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
\ No newline at end of file
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java b/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java
deleted file mode 100644
index 2fe04a62a9..0000000000
--- a/examples/demo/javafx/src/main/java/demoapp/javafx/DemoAppJavaFx.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.javafx;
-
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.debug._Probe;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.core.runtimeservices.session.InteractionServiceDefault;
-import org.apache.causeway.extensions.secman.jpa.CausewayModuleExtSecmanPersistenceJpa;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.viewer.CausewayModuleIncViewerJavaFxViewer;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-
-import demoapp.dom.DemoModuleJpa;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    DemoModuleJpa.class,
-
-    // INCUBATING
-    CausewayModuleSecurityBypass.class,
-    // Security Manager Extension (secman)
-    CausewayModuleExtSecmanPersistenceJpa.class,
-    CausewayModuleIncViewerJavaFxViewer.class,
-
-})
-public class DemoAppJavaFx {
-
-    @Bean
-    public JavaFxViewerConfig viewerConfig() {
-        return JavaFxViewerConfig.builder()
-                .applicationTitle("Apache Causeway Demo")
-                .applicationIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "icon.png"))
-                .brandingIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "gift_32.png"))
-                .objectFallbackIcon(_fx.imageFromClassPath(DemoAppJavaFx.class, "object_fallback_icon.png"))
-                .build();
-    }
-
-    public static void main(final String[] args) {
-
-        CausewayPresets.logging(InteractionServiceDefault.class, "debug");
-        CausewayPresets.logging(_Probe.class, "debug"); // enable debug entry logging
-
-        CausewayPresets.prototyping(); // use prototyping mode as default, unless explicitly overridden (INCUBATING)
-        System.setProperty("spring.profiles.active", "demo-jpa");
-
-        CausewayModuleIncViewerJavaFxViewer.launch(DemoAppJavaFx.class, args);
-    }
-
-}
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png b/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png
deleted file mode 100644
index 32a3f22796..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/gift_32.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png b/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png
deleted file mode 100644
index 3509e1bf8f..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/icon.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png b/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png
deleted file mode 100644
index 255999f7c4..0000000000
Binary files a/examples/demo/javafx/src/main/java/demoapp/javafx/object_fallback_icon.png and /dev/null differ
diff --git a/examples/demo/javafx/src/main/resources/log4j2-spring.xml b/examples/demo/javafx/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 0c0e64c924..0000000000
--- a/examples/demo/javafx/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java
deleted file mode 100644
index 75f32c1e42..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxBootstrapTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.javafx.integtest;
-
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-class DemoFxBootstrapTest extends DemoFxTestAbstract {
-
-    @Test 
-    void demoServices_shouldBeProvisioned() {
-        assertNotNull(repositoryService);
-        assertNotNull(uiContext);
-    }
-    
-}
diff --git a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
deleted file mode 100644
index cc9c185c1f..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestAbstract.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.javafx.integtest;
-
-import org.junit.jupiter.api.BeforeAll;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.viewer.CausewayModuleIncViewerJavaFxViewer;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-import org.apache.causeway.testing.integtestsupport.applib.CausewayIntegrationTestAbstract;
-
-import demoapp.dom.DemoModuleJdo;
-import jakarta.inject.Inject;
-
-@SpringBootTest(
-        classes = {
-                DemoModuleJdo.class,
-                DemoFxTestConfig_usingJdo.class,
-
-                // INCUBATING
-                CausewayModuleSecurityBypass.class,
-                CausewayModuleIncViewerJavaFxViewer.class,
-        }
-)
-public abstract class DemoFxTestAbstract extends CausewayIntegrationTestAbstract {
-
-    @Inject protected UiContextFx uiContext;
-
-    @BeforeAll
-    static void beforeAll() {
-       //JavafxViewer.launch(DemoAppJavaFx.class, _Constants.emptyStringArray);
-    }
-
-}
diff --git a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java b/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java
deleted file mode 100644
index 0315804257..0000000000
--- a/examples/demo/javafx/src/test/java/demoapp/javafx/integtest/DemoFxTestConfig_usingJdo.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.javafx.integtest;
-
-import javax.sql.DataSource;
-
-import org.datanucleus.store.rdbms.datasource.dbcp2.BasicDataSource;
-import org.springframework.boot.jdbc.DataSourceBuilder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-
-import demoapp.javafx.DemoAppJavaFx;
-import javafx.application.HostServices;
-import lombok.val;
-
-@Configuration
-@PropertySources({
-    @PropertySource(CausewayPresets.DatanucleusAutocreateNoValidate),
-    @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema)
-})
-public class DemoFxTestConfig_usingJdo {
-
-    //XXX why is the H2InMemory_withUniqueSchema preset not working?
-    @Bean(destroyMethod = "close")
-    public DataSource getDataSource() {
-        val dataSourceBuilder = DataSourceBuilder.create().type(BasicDataSource.class);
-        dataSourceBuilder.driverClassName("org.h2.Driver");
-        dataSourceBuilder.url("jdbc:h2:mem:test");
-        dataSourceBuilder.username("sa");
-        dataSourceBuilder.password("");
-        return dataSourceBuilder.build();
-    }
-
-    @Bean
-    public JavaFxViewerConfig viewerConfig() {
-        return new DemoAppJavaFx().viewerConfig();
-    }
-
-    @Bean
-    public HostServices hostServices() {
-        return  null;
-    }
-
-
-
-}
diff --git a/examples/demo/pom.xml b/examples/demo/pom.xml
index a57ab7a679..328331f8cd 100644
--- a/examples/demo/pom.xml
+++ b/examples/demo/pom.xml
@@ -100,7 +100,6 @@
 						<exclude>**/domain/src/test/resources/demoapp/dom/_infra/resources/</exclude>
 						<exclude>**/wicket/src/test/e2e/cypress-scaffolding/integration/examples/*.spec.js</exclude>
 						<exclude>**/wicket/src/test/e2e/cypress-scaffolding/integration/typescript/basic.ts</exclude>
-						<exclude>**/vaadin/node_modules/**</exclude>
 
 						<exclude>**/*.gitkeep</exclude>
 						<exclude>**/*.pdn</exclude>
@@ -259,33 +258,6 @@
 				<module>wicket/jpa-and-graphql</module>
 			</modules>
 		</profile>
-		<profile>
-			<id>modules-example-demo-vaadin</id>
-			<activation>
-				<property>
-					<name>modules-example-demo-vaadin</name>
-				</property>
-			</activation>
-			<modules>
-				<module>domain</module>
-				<module>web</module>
-				<module>wicket/common</module>
-				<module>wicket/jdo</module>
-				<module>vaadin</module>
-			</modules>
-		</profile>
-		<profile>
-			<id>modules-example-demo-javafx</id>
-			<activation>
-				<property>
-					<name>demo-javafx</name>
-				</property>
-			</activation>
-			<modules>
-				<module>domain</module>
-				<module>javafx</module>
-			</modules>
-		</profile>
 
 	</profiles>
 
diff --git a/examples/demo/thymeflux/pom.xml b/examples/demo/thymeflux/pom.xml
deleted file mode 100644
index a627558621..0000000000
--- a/examples/demo/thymeflux/pom.xml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.examples.apps</groupId>
-		<artifactId>demo-parent</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>demo-thymeflux</artifactId>
-
-	<name>Demo - Thymeflux (Thymeleaf + Webflux)</name>
-
-	<packaging>jar</packaging>
-
-	<properties>
-		<maven.deploy.skip>true</maven.deploy.skip>
-		<sonar.skip>true</sonar.skip>
-	</properties>
-
-	<dependencies>
-
-		<!-- DEMO DOMAIN + WEB -->
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-web</artifactId>
-		</dependency>
-
-		<!-- INCUBATOR: THYMEFLUX VIEWER -->
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-thymeflux-viewer</artifactId>
-			<!-- incubator version is not managed by app starter bundles -->
-			<version>3.0.0-SNAPSHOT</version>
-		</dependency>
-
-		<!-- EXTENSIONS THYMEFLUX --> 
-
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui</artifactId>
-			<version>3.0.0-SNAPSHOT</version>
-			<type>pom</type>
-		</dependency>
-
-		<!-- OTHER DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-	</dependencies>
-
-	<profiles>
-
-		<!-- running: mvn spring-boot:run -->
-		<profile>
-			<id>package-as-jar</id>
-			<activation>
-				<property>
-					<name>!skip-package-as-jar</name>
-				</property>
-			</activation>
-			<properties>
-			</properties>
-
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.springframework.boot</groupId>
-						<artifactId>spring-boot-maven-plugin</artifactId>
-						<configuration>
-							<requiresUnpack>
-								<dependency>
-									<groupId>org.asciidoctor</groupId>
-									<artifactId>asciidoctorj</artifactId>
-								</dependency>
-							</requiresUnpack>
-						</configuration>
-						<executions>
-							<execution>
-								<goals>
-									<goal>repackage</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-
-	</profiles>
-
-</project>
diff --git a/examples/demo/thymeflux/src/main/java/demoapp/webapp/thymeflux/DemoAppThymeflux.java b/examples/demo/thymeflux/src/main/java/demoapp/webapp/thymeflux/DemoAppThymeflux.java
deleted file mode 100644
index 5a5d9e836b..0000000000
--- a/examples/demo/thymeflux/src/main/java/demoapp/webapp/thymeflux/DemoAppThymeflux.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.webapp.thymeflux;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.os._OsUtil;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.core.config.util.SpringProfileUtil;
-import org.apache.causeway.extensions.commandlog.applib.CausewayModuleExtCommandLogApplib;
-import org.apache.causeway.extensions.secman.jpa.CausewayModuleExtSecmanPersistenceJpa;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-import org.apache.causeway.viewer.thymeflux.viewer.CausewayModuleIncViewerThymefluxViewer;
-
-import demoapp.dom.DemoModuleJpa;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    DemoModuleJpa.class,
-
-    // INCUBATING
-    CausewayModuleSecurityBypass.class,
-    // Security Manager Extension (secman)
-    CausewayModuleExtSecmanPersistenceJpa.class,
-
-    // Metamodel
-    //TODO CausewayModuleValAsciidocMetaModel.class,
-    //TODO CausewayModuleValMarkdownMetaModel.class,
-    //TODO CausewayModuleValVegaMetaModel.class,
-
-    // Persistence (JDO/DN)
-    //TODO CausewayModuleValAsciidocPersistenceJdoDn.class,
-    //TODO CausewayModuleValMarkdownPersistenceJdoDn.class,
-    //TODO CausewayModuleValVegaPersistenceJdoDn.class,
-
-    // THYMEFLUX INTEGRATION
-    CausewayModuleIncViewerThymefluxViewer.class,
-    // INCUBATING
-    //TODO CausewayModuleValAsciidocUiThymeflux.class, // ascii-doc rendering support
-    //TODO CausewayModuleExtFullCalendarThymeflux.class,
-
-})
-public class DemoAppThymeflux extends SpringBootServletInitializer {
-
-    /**
-     *
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
-     * entry point by searching for classes having a {@code main(...)}
-     */
-    public static void main(final String[] args) {
-
-        // activates when sys-env THERE_CAN_BE_ONLY_ONE=true
-        _OsUtil.thereCanBeOnlyOne();
-
-        CausewayPresets.prototyping();
-        //CausewayPresets.logging(WebRequestCycleForCauseway.class, "debug");
-
-        SpringProfileUtil.removeActiveProfile("demo-jdo"); // just in case
-        SpringProfileUtil.addActiveProfile("demo-jpa");
-
-        CausewayModuleExtCommandLogApplib.honorSystemEnvironment();
-
-        SpringApplication.run(new Class[] { DemoAppThymeflux.class }, args);
-    }
-
-}
diff --git a/examples/demo/thymeflux/src/main/resources/log4j2-spring.xml b/examples/demo/thymeflux/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 64357c4225..0000000000
--- a/examples/demo/thymeflux/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/examples/demo/vaadin/.gitignore b/examples/demo/vaadin/.gitignore
deleted file mode 100644
index 3e76f84e69..0000000000
--- a/examples/demo/vaadin/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Browser drivers for local integration tests
-drivers/
-# Error screenshots generated by TestBench for failed integration tests
-error-screenshots/
-# More Node stuff as introduced with Vaadin
-node/
-package-lock.json
-package.json
-webpack.config.js
-webpack.generated.js
-pnpm*
-
-/frontend/
diff --git a/examples/demo/vaadin/pom.xml b/examples/demo/vaadin/pom.xml
deleted file mode 100644
index 0b55ef7662..0000000000
--- a/examples/demo/vaadin/pom.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.examples.apps</groupId>
-		<artifactId>demo-parent</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../pom.xml</relativePath>
-	</parent>
-
-	<artifactId>demo-vaadin</artifactId>
-
-	<name>Demo - Vaadin</name>
-
-	<packaging>jar</packaging>
-
-	<properties>
-		<maven.deploy.skip>true</maven.deploy.skip>
-		<sonar.skip>true</sonar.skip>
-	</properties>
-
-	<dependencies>
-
-		<!-- DEMO DOMAIN + WEB -->
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-web</artifactId>
-		</dependency>
-
-		<!-- INCUBATOR: VAADIN VIEWER -->
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-			<!-- incubator version is not managed by app starter bundles -->
-			<version>${project.version}</version>
-		</dependency>
-
-		<!-- EXTENSIONS VAA -->
-
-		<!-- EXTENSIONS WKT -->
-
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-asciidoc-ui-wkt</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.valuetypes</groupId>
-			<artifactId>causeway-valuetypes-markdown-ui-wkt</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.causeway.extensions</groupId>
-			<artifactId>causeway-extensions-sse-wicket</artifactId>
-		</dependency>
-
-		<!-- OTHER DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<scope>provided</scope>
-		</dependency>
-
-		<dependency>
-		    <groupId>org.apache.causeway.viewer</groupId>
-		    <artifactId>causeway-viewer-wicket-viewer</artifactId>
-		    <version>3.0.0-SNAPSHOT</version>
-		</dependency>
-	</dependencies>
-
-	<profiles>
-
-		<!-- running: mvn spring-boot:run -->
-		<profile>
-			<id>package-as-jar</id>
-			<activation>
-				<property>
-					<name>!skip-package-as-jar</name>
-				</property>
-			</activation>
-			<properties>
-			</properties>
-
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.springframework.boot</groupId>
-						<artifactId>spring-boot-maven-plugin</artifactId>
-						<configuration>
-							<requiresUnpack>
-								<dependency>
-									<groupId>org.asciidoctor</groupId>
-									<artifactId>asciidoctorj</artifactId>
-								</dependency>
-							</requiresUnpack>
-						</configuration>
-						<executions>
-							<execution>
-								<goals>
-									<goal>repackage</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-		
-		<profile>
-            <!-- Vaadin Production mode is activated using -Pproduction -->
-            <id>production</id>
-            <properties>
-                <vaadin.productionMode>true</vaadin.productionMode>
-            </properties>
-
-            <dependencies>
-                <dependency>
-                    <groupId>com.vaadin</groupId>
-                    <artifactId>flow-server-production-mode</artifactId>
-                </dependency>
-            </dependencies>
-
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.springframework.boot</groupId>
-                        <artifactId>spring-boot-maven-plugin</artifactId>
-                        <configuration>
-                            <jvmArguments>-Dvaadin.productionMode</jvmArguments>
-                        </configuration>
-                    </plugin>
-                    <plugin>
-                        <groupId>com.vaadin</groupId>
-                        <artifactId>vaadin-maven-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <goals>
-                                    <goal>build-frontend</goal>
-                                </goals>
-                                <phase>compile</phase>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-
-		<profile>
-			<id>deploy-to-docker-io</id>
-			<activation>
-				<property>
-					<name>!skip-docker</name>
-				</property>
-			</activation>
-			<properties>
-			</properties>
-			<dependencies>
-			</dependencies>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>com.google.cloud.tools</groupId>
-						<artifactId>jib-maven-plugin</artifactId>
-						<configuration>
-							<from>
-								<image>openjdk:18-jdk-slim-bullseye</image>
-							</from>
-							<container>
-								<jvmFlags>
-									<jvmFlag>-Xmx512m</jvmFlag>
-								</jvmFlags>
-								<mainClass>demoapp.webapp.vaadin.DemoAppVaadin</mainClass>
-								<ports>
-									<port>8080</port>
-								</ports>
-							</container>
-							<to>
-								<image>docker.io/apacheisis/demo-vaadin</image>
-								<tags>
-									<tag>nightly</tag>
-								</tags>
-								<auth>
-									<username>${env.DOCKER_REGISTRY_USERNAME}</username>
-									<password>${env.DOCKER_REGISTRY_PASSWORD}</password>
-								</auth>
-							</to>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-			
-		</profile>
-
-
-	</profiles>
-
-</project>
diff --git a/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java b/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java
deleted file mode 100644
index b3b5c5214a..0000000000
--- a/examples/demo/vaadin/src/main/java/demoapp/webapp/vaadin/DemoAppVaadin.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.webapp.vaadin;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.os._OsUtil;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.core.config.util.SpringProfileUtil;
-import org.apache.causeway.extensions.commandlog.applib.CausewayModuleExtCommandLogApplib;
-import org.apache.causeway.extensions.sse.wicket.CausewayModuleExtSseWicket;
-import org.apache.causeway.incubator.viewer.vaadin.viewer.CausewayModuleIncViewerVaadinViewer;
-import org.apache.causeway.valuetypes.asciidoc.metamodel.CausewayModuleValAsciidocMetaModel;
-import org.apache.causeway.valuetypes.asciidoc.persistence.jdo.dn.CausewayModuleValAsciidocPersistenceJdoDn;
-import org.apache.causeway.valuetypes.asciidoc.ui.wkt.CausewayModuleValAsciidocUiWkt;
-import org.apache.causeway.valuetypes.markdown.metamodel.CausewayModuleValMarkdownMetaModel;
-import org.apache.causeway.valuetypes.markdown.persistence.jdo.dn.CausewayModuleValMarkdownPersistenceJdoDn;
-import org.apache.causeway.valuetypes.vega.metamodel.CausewayModuleValVegaMetaModel;
-import org.apache.causeway.valuetypes.vega.persistence.jdo.dn.CausewayModuleValVegaPersistenceJdoDn;
-import org.apache.causeway.viewer.wicket.viewer.CausewayModuleViewerWicketViewer;
-
-import demoapp.dom.DemoModuleCommon;
-import demoapp.web.DemoAppManifestJdo;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    DemoModuleCommon.class,
-    DemoAppManifestJdo.class,
-
-    // Metamodel
-    CausewayModuleValAsciidocMetaModel.class,
-    CausewayModuleValMarkdownMetaModel.class,
-    CausewayModuleValVegaMetaModel.class,
-    //TODO CausewayModuleExtFullCalendarVaadin.class,
-
-    // INCUBATING
-    CausewayModuleIncViewerVaadinViewer.class, // vaadin viewer
-
-    // Persistence (JDO/DN5)
-    CausewayModuleValAsciidocPersistenceJdoDn.class,
-    CausewayModuleValMarkdownPersistenceJdoDn.class,
-    CausewayModuleValVegaPersistenceJdoDn.class,
-
-
-    // WICKET INTEGRATION ... to allow side by side comparison
-    CausewayModuleViewerWicketViewer.class, // wicket viewer
-    CausewayModuleExtSseWicket.class, // server sent events
-    CausewayModuleValAsciidocUiWkt.class, // ascii-doc rendering support (for Wicket)
-
-})
-public class DemoAppVaadin extends SpringBootServletInitializer {
-
-    /**
-     *
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
-     * entry point by searching for classes having a {@code main(...)}
-     */
-    public static void main(final String[] args) {
-
-        // activates when sys-env THERE_CAN_BE_ONLY_ONE=true
-        _OsUtil.thereCanBeOnlyOne();
-
-        CausewayPresets.prototyping();
-        //CausewayPresets.logging(WebRequestCycleForCauseway.class, "debug");
-
-        SpringProfileUtil.removeActiveProfile("demo-jpa"); // just in case
-        SpringProfileUtil.addActiveProfile("demo-jdo");
-
-        CausewayModuleExtCommandLogApplib.honorSystemEnvironment();
-
-        SpringApplication.run(new Class[] { DemoAppVaadin.class }, args);
-    }
-
-}
diff --git a/examples/demo/vaadin/src/main/resources/log4j2-spring.xml b/examples/demo/vaadin/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 64357c4225..0000000000
--- a/examples/demo/vaadin/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/incubator/adoc/modules/ROOT/partials/component-nav.adoc b/incubator/adoc/modules/ROOT/partials/component-nav.adoc
index ece65f0f6f..e18079d73f 100644
--- a/incubator/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/incubator/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,7 +1,4 @@
 include::incubator:ROOT:partial$module-nav.adoc[]
-//include::incubator:javafx:partial$module-nav.adoc[]
 include::incubator:graphql:partial$module-nav.adoc[GraphQL Viewer]
 include::incubator:kroviz:partial$module-nav.adoc[Kroviz Viewer]
-include::incubator:vaadin:partial$module-nav.adoc[Vaadin Viewer]
 include::incubator:commandreplay:partial$module-nav.adoc[Command Replay]
-
diff --git a/incubator/pom.xml b/incubator/pom.xml
index 9cc3121982..70af900963 100644
--- a/incubator/pom.xml
+++ b/incubator/pom.xml
@@ -163,35 +163,6 @@
 				<version>3.0.0-SNAPSHOT</version>
 			</dependency>
 
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-				<type>pom</type>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-model</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-ui</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-
 			<!-- TESTING -->
 
 			<dependency>
@@ -207,10 +178,6 @@
  		<module>clients/kroviz</module>
  		<module>extensions/core/commandreplay</module>
 		<module>viewers/graphql</module>
-		<module>viewers/javafx</module>
-		<module>viewers/thymeflux</module>
-		<module>viewers/vaadin</module>
-		<module>../valuetypes/asciidoc/ui/vaadin</module>
 	</modules>
 
 </project>
diff --git a/incubator/viewers/javafx/adoc/antora.yml b/incubator/viewers/javafx/adoc/antora.yml
deleted file mode 100644
index bc87cdc73c..0000000000
--- a/incubator/viewers/javafx/adoc/antora.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing,
-#  software distributed under the License is distributed on an
-#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-#  specific language governing permissions and limitations
-#  under the License.
-
-name: incubator
-version: latest
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc b/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc
deleted file mode 100644
index b97852230f..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-include::incubator:ROOT:partial$component-nav.adoc[]
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc b/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc
deleted file mode 100644
index cf0dfa6cfc..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/pages/about.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= JavaFX Viewer (Incubating)
-
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-WARNING: TODO:  v2.0
-
diff --git a/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc b/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc
deleted file mode 100644
index d748553a56..0000000000
--- a/incubator/viewers/javafx/adoc/modules/javafx/partials/module-nav.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-
-* xref:incubator:javafx:about.adoc[JavaFX]
-
diff --git a/incubator/viewers/javafx/headless/pom.xml b/incubator/viewers/javafx/headless/pom.xml
deleted file mode 100644
index c5e854588b..0000000000
--- a/incubator/viewers/javafx/headless/pom.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-headless</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (Headless)</name>
-	<description>Basic starting block providing a JavaFx Application 
-		with Spring support and a PrimaryStageReadyEvent.</description>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.headless</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/headless</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-base</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-controls</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-swing</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-fxml</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-web</artifactId>
-		</dependency>
-
-
-		<!-- TEST DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/javafx/headless/src/main/java/module-info.java b/incubator/viewers/javafx/headless/src/main/java/module-info.java
deleted file mode 100644
index 8871fd3458..0000000000
--- a/incubator/viewers/javafx/headless/src/main/java/module-info.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * Do NOT release incubator projects, unstable module name!
- */
-module org.apache.causeway.incubator.viewer.javafx.headless {
-    exports org.apache.causeway.incubator.viewer.javafx.headless;
-
-    requires transitive javafx.base;
-    requires transitive javafx.graphics;
-    requires transitive org.apache.causeway.commons;
-    requires spring.beans;
-    requires spring.boot;
-    requires spring.context;
-    requires spring.core;
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageInitializer.java b/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageInitializer.java
deleted file mode 100644
index 87b5a77df9..0000000000
--- a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageInitializer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.headless;
-
-import org.springframework.context.ApplicationListener;
-
-import javafx.scene.Scene;
-import javafx.stage.Stage;
-import lombok.val;
-
-/**
- *
- * @since 3.0
- */
-@FunctionalInterface
-public interface PrimaryStageInitializer
-extends ApplicationListener<PrimaryStageReadyEvent> {
-
-    @Override
-    public default void onApplicationEvent(final PrimaryStageReadyEvent event) {
-        val primaryStage = event.getStage();
-        onPrimaryStageReady(primaryStage);
-        primaryStage.show();
-    }
-
-    /**
-     * Implementing classes are expected to populate a {@link Scene} and set it on the primary {@link Stage}.
-     */
-    void onPrimaryStageReady(Stage primaryStage);
-
-}
diff --git a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageReadyEvent.java b/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageReadyEvent.java
deleted file mode 100644
index d64230d470..0000000000
--- a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/PrimaryStageReadyEvent.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.headless;
-
-import org.springframework.context.ApplicationEvent;
-
-import javafx.stage.Stage;
-
-/**
- * Fired once the JavaFx application has initialized,
- * and the primary {@link Stage} has become ready (to be populated).
- *
- * @since 3.0
- */
-public class PrimaryStageReadyEvent extends ApplicationEvent {
-
-    private static final long serialVersionUID = 1L;
-
-    public PrimaryStageReadyEvent(final Object source) {
-        super(source);
-    }
-
-    public Stage getStage() {
-        return (Stage) getSource();
-    }
-}
diff --git a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/SpringBootJavaFxApplication.java b/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/SpringBootJavaFxApplication.java
deleted file mode 100644
index 61b65dfdb9..0000000000
--- a/incubator/viewers/javafx/headless/src/main/java/org/apache/causeway/incubator/viewer/javafx/headless/SpringBootJavaFxApplication.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.headless;
-
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.GenericApplicationContext;
-
-import org.apache.causeway.commons.internal._Constants;
-
-import javafx.application.Application;
-import javafx.application.HostServices;
-import javafx.application.Platform;
-import javafx.stage.Stage;
-
-/**
- * JavaFx {@link Application},
- * that also initializes a Spring {@link GenericApplicationContext} in the background.
- * <p>
- * Example usage:
- * <pre>
- * // Bootstrap the application.
- * &#64;SpringBootApplication
- * &#64;Import({
- *     StageInitializer.class
- * })
- * public class JavaFxSampleApp {
- *   public static void main(final String[] args) {
- *     SpringBootJavaFxApplication.launchSpringBootApplication(JavaFxSampleApp.class, args);
- *   }
- * }
- *
- * public class StageInitializer implements PrimaryStageInitializer {
- *   public void onPrimaryStageReady(final Stage primaryStage) {
- *     primaryStage.setScene(new Scene(new Label("Hello World!"), 250, 150));
- *   }
- * }
- * </pre>
- *
- * @since 3.0
- */
-public class SpringBootJavaFxApplication extends Application {
-
-    private ConfigurableApplicationContext springContext;
-
-    // helps during initialization
-    private static Class<?>[] sources;
-
-    @Override
-    public void init() {
-
-        final ApplicationContextInitializer<GenericApplicationContext> initializer =
-                ac->{
-                    ac.registerBean(Application.class, ()->SpringBootJavaFxApplication.this);
-                    ac.registerBean(Parameters.class, this::getParameters);
-                    ac.registerBean(HostServices.class, this::getHostServices);
-                };
-
-                this.springContext = new SpringApplicationBuilder()
-                        .sources(sources)
-                        .initializers(initializer)
-                        .run(getParameters().getRaw().toArray(_Constants.emptyStringArray));
-    }
-
-    @Override
-    public void start(final Stage primaryStage) throws Exception {
-        this.springContext.publishEvent(new PrimaryStageReadyEvent(primaryStage));
-    }
-
-    @Override
-    public void stop() throws Exception {
-        this.springContext.close();
-        Platform.exit();
-    }
-
-    /**
-     *
-     * @param appClass the class that is annotated with {@literal @SpringBootApplication}
-     * @param args program arguments
-     */
-    public static final void launchSpringBootApplication(final Class<?> appClass, final String... args) {
-        SpringBootJavaFxApplication.sources = new Class<?>[]{appClass};
-        Application.launch(SpringBootJavaFxApplication.class, args);
-    }
-
-}
diff --git a/incubator/viewers/javafx/model/pom.xml b/incubator/viewers/javafx/model/pom.xml
deleted file mode 100644
index c91c56e92a..0000000000
--- a/incubator/viewers/javafx/model/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-model</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (Model)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.model</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/model</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-model</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-headless</artifactId>
-		</dependency>
-
-
-		<!-- TEST DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/javafx/model/src/main/java/module-info.java b/incubator/viewers/javafx/model/src/main/java/module-info.java
deleted file mode 100644
index ce48bba9ba..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/module-info.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * Do NOT release incubator projects, unstable module name!
- */
-module org.apache.causeway.incubator.viewer.javafx.model {
-    exports org.apache.causeway.incubator.viewer.javafx.model.binding;
-    exports org.apache.causeway.incubator.viewer.javafx.model.action;
-    exports org.apache.causeway.incubator.viewer.javafx.model.context;
-    exports org.apache.causeway.incubator.viewer.javafx.model.icon;
-    exports org.apache.causeway.incubator.viewer.javafx.model.util;
-    exports org.apache.causeway.incubator.viewer.javafx.model.events;
-
-    requires static lombok;
-    requires javafx.base;
-    requires javafx.controls;
-    requires javafx.graphics;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires org.apache.causeway.core.config;
-    requires org.apache.causeway.core.metamodel;
-    requires org.apache.causeway.viewer.commons.model;
-    requires spring.context;
-    requires spring.core;
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
deleted file mode 100644
index d956ead15f..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFactoryFx.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-
-public class ActionUiModelFactoryFx {
-
-    public ActionUiModelFx newActionUiModel(UiContextFx uiContext, ManagedAction managedAction) {
-        return ActionUiModelFx.of(uiContext, managedAction);
-    }
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java
deleted file mode 100644
index 493c542b94..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/action/ActionUiModelFx.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.model.action.UiAction;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.control.MenuItem;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName = "of")
-public class ActionUiModelFx
-implements UiAction<MenuItem, Node> {
-
-    private final UiContextFx uiContext;
-
-    @Getter
-    private final ManagedAction managedAction;
-
-    @Override
-    public ObjectAction getAction() {
-        return managedAction.getMetaModel();
-    }
-
-    @Override
-    public MenuItem createMenuUiComponent() {
-        val menuItem = new MenuItem(getManagedAction().getFriendlyName());
-
-        return uiContext.getIconDecoratorForMenuItem()
-                .decorate(menuItem, getFontAwesomeUiModel());
-    }
-
-    @Override
-    public Node createRegularUiComponent() {
-
-        val uiLabel = new Label(getManagedAction().getFriendlyName());
-
-        return uiContext.getIconDecoratorForLabeled()
-                .decorate(uiLabel, getFontAwesomeUiModel());
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java
deleted file mode 100644
index 34be6ff192..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/binding/BindingsFx.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.binding;
-
-import java.lang.ref.WeakReference;
-import java.util.Objects;
-
-import org.apache.causeway.commons.binding.Bindable;
-import org.apache.causeway.commons.binding.ChangeListener;
-import org.apache.causeway.commons.binding.Observable;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.viewer.commons.model.binding.BindingConverter;
-
-import javafx.beans.property.Property;
-import javafx.beans.property.StringProperty;
-import javafx.beans.value.ObservableValue;
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class BindingsFx {
-
-    public static <T> void bind(
-            final @NonNull Property<T> leftProperty,
-            final @NonNull Observable<T> rightObservable) {
-
-        leftProperty.setValue(rightObservable.getValue());
-        rightObservable.addListener((e,o,n)->{
-            leftProperty.setValue(n);
-        });
-    }
-
-    public static <L, R> void bind(
-            final @NonNull Property<L> leftProperty,
-            final @NonNull Observable<R> rightObservable,
-            final @NonNull BindingConverter<L, R> converter) {
-
-        leftProperty.setValue(converter.toLeft(rightObservable.getValue()));
-        rightObservable.addListener((e,o,n)->{
-            leftProperty.setValue(converter.toLeft(n));
-        });
-    }
-
-    public static <L, R> void bindBidirectional(
-            final @NonNull Property<L> leftProperty,
-            final @NonNull Bindable<R> rightProperty,
-            final @NonNull BindingConverter<L, R> converter) {
-        val binding = new InternalBidirBinding<L, R>(leftProperty, rightProperty, converter);
-        leftProperty.setValue(converter.toLeft(rightProperty.getValue()));
-        leftProperty.addListener(binding);
-        rightProperty.addListener(binding);
-    }
-
-    public static void bindParsableBidirectional(
-            final @NonNull Property<String> leftProperty,
-            final @NonNull Bindable<String> rightProperty) {
-        bindBidirectional(leftProperty, rightProperty, BindingConverter.identity(String.class));
-    }
-
-    // -- VALIDATION
-
-    public static void bindValidationFeeback(
-            final @NonNull StringProperty textProperty,
-            final @NonNull Property<Boolean> visibilityProperty,
-            final @NonNull Observable<String> textObservable) {
-
-        bind(textProperty, textObservable);
-        visibilityProperty.bind(textProperty.isNotEmpty());
-    }
-
-    // -- INTERNAL
-
-    private static class InternalBidirBinding<L, R>
-    implements
-        javafx.beans.value.ChangeListener<L>,
-        ChangeListener<R>{
-
-        private final WeakReference<Property<L>> leftRef;
-        private final WeakReference<Bindable<R>> rightRef;
-        private final BindingConverter<L, R> converter;
-        private boolean updating = false;
-        private final int cachedHash;
-
-        private Property<L> getLeft() {
-            return leftRef.get();
-        }
-
-        private Bindable<R> getRight() {
-            return rightRef.get();
-        }
-
-
-        public InternalBidirBinding(
-                final @NonNull Property<L> left,
-                final @NonNull Bindable<R> right,
-                final @NonNull BindingConverter<L, R> converter) {
-
-            this.leftRef = new WeakReference<>(left);
-            this.rightRef = new WeakReference<>(right);
-            this.converter = converter;
-            cachedHash = Objects.hash(left, right, converter);
-        }
-
-        @Override
-        public void changed(final ObservableValue<? extends L> leftObservable, final L oldValue, final L newValue) {
-            changed(oldValue, newValue, null, null);
-        }
-
-        @Override
-        public void changed(
-                final Observable<? extends R> rightObservable,
-                final R oldValue,
-                final R newValue) {
-            changed(null, null, oldValue, newValue);
-        }
-
-        @Override
-        public boolean equals(final Object obj) {
-            if (this == obj) {
-                return true;
-            }
-
-            final Object left = getLeft();
-            final Object right = getRight();
-            if ((left == null) || (right == null)) {
-                return false;
-            }
-
-            if (obj instanceof InternalBidirBinding) {
-                final InternalBidirBinding<?, ?> otherBinding = (InternalBidirBinding<?, ?>) obj;
-                final Object otherLeft = otherBinding.getLeft();
-                final Object otherRight = otherBinding.getRight();
-                if ((otherLeft == null) || (otherRight == null)) {
-                    return false;
-                }
-
-                if (left == otherLeft && right == otherRight) {
-                    return true;
-                }
-                if (left == otherRight && right == otherLeft) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        public int hashCode() {
-            return cachedHash;
-        }
-
-        // -- HELPER
-
-        /**
-         * @param oldPojo
-         * @param newPojo
-         * @param oldValue
-         * @param newValue
-         * @apiNote not pretty, but to not having to duplicate this logic:
-         * either uses both pojos and ignores both managed objects (propagate changes left to right)
-         * or vice versa.
-         */
-        private void changed(final L oldPojo, final L newPojo, final R oldValue, final R newValue) {
-            if (updating) {
-                return;
-            }
-            val left = getLeft();
-            val right = getRight();
-            if(!isStillBound(left, right)) {
-                return;
-            }
-
-            try {
-                updating = true;
-                if(newValue!=null) { // direction
-                    left.setValue(converter.toLeft(newValue)); // propagate changes right to left
-                } else {
-                    right.setValue(converter.toRight(newPojo)); // propagate changes left to right
-                }
-            } catch (RuntimeException e) {
-                try {
-                    if(newValue!=null) { // direction
-                        left.setValue(converter.toLeft(oldValue)); // propagate changes right to left
-                    } else {
-                        right.setValue(converter.toRight(oldPojo)); // propagate changes left to right
-                    }
-                } catch (Exception e2) {
-                    e2.addSuppressed(e);
-                    left.removeListener(this);
-                    right.removeListener(this);
-                    throw _Exceptions.unrecoverable(e2,
-                            "Bidirectional binding failed with an attempt to restore the "
-                            + "Observable to the previous value. "
-                            + "Removing the bidirectional binding from bindables %s and %s",
-                            ""+left,
-                            ""+right);
-                }
-                throw _Exceptions.unrecoverable(e,
-                        "Bidirectional binding failed, setting to the previous value");
-            } finally {
-                updating = false;
-            }
-        }
-
-        private boolean isStillBound(
-                final Property<L> left,
-                final Bindable<R> right) {
-
-            if ((left == null) || (right == null)) {
-                if (left != null) {
-                    left.removeListener(this);
-                }
-                if (right != null) {
-                    right.removeListener(this);
-                }
-                return false;
-            }
-            return true;
-        }
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java
deleted file mode 100644
index 14fbea98c3..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/context/UiContextFx.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.context;
-
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.MenuItem;
-
-public interface UiContextFx {
-
-    JavaFxViewerConfig getJavaFxViewerConfig();
-
-    InteractionService getInteractionService();
-    ActionUiModelFactoryFx getActionUiModelFactory();
-
-    void setNewPageHandler(Consumer<Node> onNewPage);
-    void setPageFactory(Function<ManagedObject, Node> pageFactory);
-
-    void route(ManagedObject object);
-    void route(Supplier<ManagedObject> objectSupplier);
-
-    // -- DECORATORS
-
-    IconDecorator<Labeled, Labeled> getIconDecoratorForLabeled();
-    IconDecorator<MenuItem, MenuItem> getIconDecoratorForMenuItem();
-
-    DisablingDecorator<Button> getDisablingDecoratorForButton();
-    DisablingDecorator<Node> getDisablingDecoratorForFormField();
-
-    PrototypingDecorator<Button, Node> getPrototypingDecoratorForButton();
-    PrototypingDecorator<Node, Node> getPrototypingDecoratorForFormField();
-
-
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java
deleted file mode 100644
index 6f8cfca3ba..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/CausewayModuleIncViewerJavaFxModel.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.events;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-/**
- *
- * @since 2.0
- */
-@Configuration
-@Import({
-        // Modules
-
-        // @Components's
-
-        // @Service's
-
-        // @Mixin's
-})
-
-public class CausewayModuleIncViewerJavaFxModel {
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java
deleted file mode 100644
index 453c536ac5..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/events/JavaFxViewerConfig.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.events;
-
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-
-import javafx.scene.image.Image;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter @Builder
-public class JavaFxViewerConfig {
-
-    private String applicationTitle;
-    private Image applicationIcon;
-    private Image brandingIcon;
-    private Image objectFallbackIcon;
-
-    @Builder.Default
-    private Resource uiLayout = new ClassPathResource("/ui.fxml");
-
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java
deleted file mode 100644
index bbb2310e0e..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/icon/IconService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.icon;
-
-import java.util.Optional;
-
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-
-import javafx.scene.image.Image;
-
-public interface IconService {
-
-    Optional<Image> fontAwesome(FontAwesomeDecorationModel fontAwesomeDecorationModel);
-
-}
diff --git a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java b/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java
deleted file mode 100644
index ae25bdf407..0000000000
--- a/incubator/viewers/javafx/model/src/main/java/org/apache/causeway/incubator/viewer/javafx/model/util/_fx.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.model.util;
-
-import java.util.function.Predicate;
-
-import org.springframework.lang.Nullable;
-
-import javafx.beans.property.ReadOnlyObjectWrapper;
-import javafx.beans.property.ReadOnlyStringWrapper;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener.Change;
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.geometry.Insets;
-import javafx.scene.Node;
-import javafx.scene.control.Accordion;
-import javafx.scene.control.Button;
-import javafx.scene.control.ContentDisplay;
-import javafx.scene.control.Label;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.Menu;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.Tab;
-import javafx.scene.control.TabPane;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.control.TitledPane;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import javafx.scene.layout.Background;
-import javafx.scene.layout.BackgroundFill;
-import javafx.scene.layout.Border;
-import javafx.scene.layout.BorderStroke;
-import javafx.scene.layout.BorderStrokeStyle;
-import javafx.scene.layout.BorderWidths;
-import javafx.scene.layout.CornerRadii;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.Region;
-import javafx.scene.layout.VBox;
-import javafx.scene.paint.Color;
-import javafx.scene.text.Font;
-import javafx.scene.text.FontWeight;
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class _fx {
-
-    // -- OBSERVABLES
-
-    public static ObservableValue<String> newStringReadonly(String value) {
-        return new ReadOnlyStringWrapper(value);
-    }
-
-    public static <T> ObservableValue<T> newObjectReadonly(T value) {
-        return new ReadOnlyObjectWrapper<T>(value);
-    }
-
-    // -- COMPONENT FACTORIES
-
-    public static <T extends Node> T add(Pane container, T component) {
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Label newLabel(Pane container, String label) {
-        val component = new Label(label);
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Label newValidationFeedback(Pane container) {
-        val component = new Label();
-        container.getChildren().add(component);
-        visibilityLayoutFix(component);
-        component.setStyle("-fx-color: red");
-        component.visibleProperty().addListener((e, o, visible)->{
-            if(visible) {
-                borderDashed(container, Color.RED);
-            } else {
-                container.setBorder(null);
-            }
-        });
-        return component;
-    }
-
-    public static Button newButton(Pane container, String label, EventHandler<ActionEvent> eventHandler) {
-        val component = new Button(label);
-        container.getChildren().add(component);
-        component.setOnAction(eventHandler);
-        return component;
-    }
-
-    public static HBox newHBox(Pane container) {
-        val component = new HBox();
-        container.getChildren().add(component);
-        _fx.padding(component, 4, 8);
-        _fx.borderDashed(component, Color.BLUE); // debug
-        return component;
-    }
-
-    public static VBox newVBox(Pane container) {
-        val component = new VBox();
-        container.getChildren().add(component);
-        _fx.padding(component, 4, 8);
-        _fx.borderDashed(component, Color.GREEN); // debug
-        return component;
-    }
-
-    public static VBox newVBox(TitledPane container) {
-        val component = new VBox();
-        container.setContent(component);
-        return component;
-    }
-
-    public static FlowPane newFlowPane(@Nullable Pane container) {
-        val component = new FlowPane();
-        if(container!=null) {
-            container.getChildren().add(component);
-        }
-        _fx.padding(component, 4, 8);
-        _fx.hideUntilPopulated(component);
-        return component;
-    }
-
-    public static GridPane newGrid(Pane container) {
-        val component = new GridPane();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static GridPane newGrid(TitledPane container) {
-        val component = new GridPane();
-        container.setContent(component);
-        return component;
-    }
-
-    public static <T extends Node> T addGridCell(GridPane container, T cellNode, int column, int row) {
-        container.add(cellNode, column, row);
-        return cellNode;
-    }
-
-    public static TabPane newTabGroup(Pane container) {
-        val component = new TabPane();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Tab newTab(TabPane container, String label) {
-        val component = new Tab(label);
-        container.getTabs().add(component);
-        return component;
-    }
-
-    public static Accordion newAccordion(Pane container) {
-        val component = new Accordion();
-        container.getChildren().add(component);
-        return component;
-    }
-
-    public static Menu newMenu(MenuBar container, String label) {
-        val component = new Menu(label);
-        container.getMenus().add(component);
-        return component;
-    }
-
-    public static MenuItem newMenuItem(Menu container, String label) {
-        val component = new MenuItem(label);
-        container.getItems().add(component);
-        return component;
-    }
-
-    public static TitledPane newTitledPane(Accordion container, String label) {
-        val component = new TitledPane();
-        container.getPanes().add(component);
-        component.setText(label);
-        component.setAnimated(true);
-        return component;
-    }
-
-
-    /**
-     * @param <S> The type of the TableView generic type (i.e. S == TableView&lt;S&gt;)
-     * @param <T> The type of the content in all cells in this TableColumn.
-     * @param tableView
-     * @param columnLabel
-     * @param columnType
-     * @return a new column as added to the {@code tableView}
-     */
-    public static <S, T> TableColumn<S, T> newColumn(TableView<S> tableView, String columnLabel, Class<T> columnType) {
-        val column = new TableColumn<S, T>(columnLabel);
-        tableView.getColumns().add(column);
-        return column;
-    }
-
-    // -- VISIBILITY
-
-    /**
-     * Do not consider node for layout calculations, when not visible
-     * @param node
-     */
-    public static Node visibilityLayoutFix(Node node) {
-        node.managedProperty().bind(node.visibleProperty());
-        return node;
-    }
-
-    // -- ICONS
-
-    public static Image imageFromClassPath(@NonNull Class<?> cls, String resourceName) {
-        return new Image(cls.getResourceAsStream(resourceName));
-    }
-
-    public static ImageView iconForImage(Image image, int width, int height) {
-        val icon = new ImageView(image);
-        icon.setFitWidth(width);
-        icon.setFitHeight(height);
-        return icon;
-    }
-
-    public static Button bottonForImage(Image image, int width, int height) {
-        val icon = new ImageView(image);
-        icon.setPreserveRatio(true);
-        icon.setFitWidth(width-2);
-        icon.setFitHeight(height-2);
-
-        val btn = new Button();
-        btn.setGraphic(icon);
-        btn.setMaxSize(width, height);
-        btn.setMinSize(width, height);
-        btn.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
-
-        return btn;
-    }
-
-    // -- LAYOUTS
-
-    public static void padding(Region region, int hPadding, int vPadding) {
-        region.setPadding(new Insets(vPadding, hPadding, vPadding, hPadding));
-    }
-
-    public static void toolbarLayoutPropertyAssociated(FlowPane component) {
-        component.setPadding(new Insets(0, 12, 0, 12));
-        component.setHgap(10);
-        component.setVgap(10);
-    }
-
-    public static void toolbarLayout(FlowPane component) {
-        component.setPadding(new Insets(15, 12, 15, 12));
-        component.setHgap(10);
-        component.setVgap(10);
-
-        _fx.borderDashed(component, Color.RED); // debug
-        _fx.backround(component, Color.FLORALWHITE);
-    }
-
-    public static void vcausewaytDepthFirst(Node component, Predicate<Node> onNode) {
-        val doContinue = onNode.test(component);
-        if(doContinue && (component instanceof Pane)) {
-            ((Pane) component).getChildrenUnmodifiable()
-            .forEach(child->vcausewaytDepthFirst(child, onNode));
-        }
-    }
-
-//XXX Superseded by visibilityLayoutFix(Node node)
-//    private static boolean isEmptyOrHidden(Node component) {
-//        if(component instanceof Pane) {
-//            val children = ((Pane) component).getChildrenUnmodifiable();
-//            if(children.isEmpty()) {
-//                return true; // empty
-//            }
-//            //return true only if all children are empty or hidden
-//            val atLeastOneIsNonEmptyOrVisible = children.stream()
-//                    .anyMatch(child->!isEmptyOrHidden(child));
-//            return !atLeastOneIsNonEmptyOrVisible;
-//        }
-//        return !component.isVisible();
-//    }
-
-
-    public static void hideUntilPopulated(Pane component) {
-        component.setVisible(false);
-        component.getChildren().addListener((Change<? extends Node> change) -> {
-            if(change.next() && change.wasAdded()) {
-
-//                change.getAddedSubList().stream()
-//                .filter(_Predicates.instanceOf(Pane.class))
-//                .map(Pane.class::cast)
-//                .forEach(newPane->{
-//                    _Probe.errOut("newPane %s", ""+newPane);
-//                });
-
-
-                component.setVisible(true);
-            }
-        });
-
-//        component.setOnMouseClicked(e->{
-//
-//            _Probe.errOut("event %s", ""+e);
-//
-//            vcausewaytDepthFirst(component, node->{
-//                _Probe.errOut("node %s", ""+node);
-//                return true;
-//            });
-//
-//        });
-
-    }
-
-
-    // -- STYLES
-
-    public static <T extends Labeled> T h1(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.BOLD, 20));
-        return component;
-    }
-
-    public static <T extends Labeled> T h2(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.BOLD, 18));
-        return component;
-    }
-
-    public static <T extends Labeled> T h3(T component) {
-        component.setFont(Font.font("Verdana", FontWeight.NORMAL, 17));
-        return component;
-    }
-
-    public static <T extends Region> T backround(T region, Color color) {
-        region.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY)));
-        return region;
-    }
-
-    public static <T extends Region> T borderDashed(T region, Color color) {
-        region.setBorder(new Border(new BorderStroke(
-                color,
-                BorderStrokeStyle.DASHED,
-                new CornerRadii(3),
-                new BorderWidths(1))));
-        return region;
-    }
-
-    // -- HACKS
-
-    /**
-     * {@code menu.setOnAction(action)} does nothing if the menu has no menu items
-     */
-    public static void setMenuOnAction(Menu menu, EventHandler<ActionEvent> action) {
-
-        _fx.newMenuItem(menu, "dummy");
-        menu.addEventHandler(Menu.ON_SHOWN, event -> menu.hide());
-        menu.addEventHandler(Menu.ON_SHOWING, event -> menu.fire());
-
-        menu.setOnAction(action);
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/pom.xml b/incubator/viewers/javafx/pom.xml
deleted file mode 100644
index 2a1ce102b5..0000000000
--- a/incubator/viewers/javafx/pom.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator</groupId>
-		<artifactId>causeway-incubator</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-	<groupId>org.apache.causeway.incubator.viewer</groupId>
-	<artifactId>causeway-viewer-javafx</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX</name>
-	<description>
-		Initial sketches
-	</description>
-
-	<properties>
-		<maven.compiler.release>17</maven.compiler.release>
-		<javafx.version>17.0.2</javafx.version> 
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx</git-plugin.propertiesDir>
-	</properties>
-
-	<packaging>pom</packaging>
-
-	<dependencyManagement>
-		<dependencies>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-headless</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-model</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-ui</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-javafx-viewer</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<!-- JAVA-FX -->
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-base</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-controls</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-swing</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-fxml</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.openjfx</groupId>
-				<artifactId>javafx-web</artifactId>
-				<version>${javafx.version}</version>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<modules>
-		<module>headless</module>
-		<module>model</module>
-		<module>viewer</module>
-		<module>ui</module>
-	</modules>
-
-</project>
diff --git a/incubator/viewers/javafx/ui/pom.xml b/incubator/viewers/javafx/ui/pom.xml
deleted file mode 100644
index 2757557020..0000000000
--- a/incubator/viewers/javafx/ui/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-ui</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (UI Components)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.ui</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/ui</git-plugin.propertiesDir>
-	</properties>
-
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-
-		<!-- JavaFX -->
-
-
-		<dependency>
-		    <groupId>org.apache.causeway.incubator.viewer</groupId>
-		    <artifactId>causeway-viewer-javafx-headless</artifactId>
-		    <version>3.0.0-SNAPSHOT</version>
-		</dependency>
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/javafx/ui/src/main/java/module-info.java b/incubator/viewers/javafx/ui/src/main/java/module-info.java
deleted file mode 100644
index 1b5d0f6773..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/module-info.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * Do NOT release incubator projects, unstable module name!
- */
-module org.apache.causeway.incubator.viewer.javafx.ui {
-    exports org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.markup;
-    exports org.apache.causeway.incubator.viewer.javafx.ui;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.main;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.collections;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.number;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.other;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.dialog;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.object;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.panel;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.form;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.form.field;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.text;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.temporal;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.components.objectref;
-    exports org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-    requires jakarta.annotation;
-    requires jakarta.inject;
-    requires javafx.base;
-    requires javafx.controls;
-    requires javafx.fxml;
-    requires javafx.graphics;
-    requires javafx.web;
-
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires org.apache.causeway.core.config;
-    requires org.apache.causeway.core.interaction;
-    requires org.apache.causeway.core.metamodel;
-    requires org.apache.causeway.incubator.viewer.javafx.model;
-    requires org.apache.causeway.security.api;
-    requires org.apache.causeway.viewer.commons.applib;
-    requires org.apache.causeway.viewer.commons.model;
-    requires org.apache.logging.log4j;
-    requires spring.beans;
-    requires spring.context;
-    requires spring.core;
-
-    requires static lombok;
-    requires org.apache.causeway.incubator.viewer.javafx.headless;
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java
deleted file mode 100644
index 30a0e73e58..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/CausewayModuleIncViewerJavaFxUi.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.javafx.model.events.CausewayModuleIncViewerJavaFxModel;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.markup.MarkupFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.number.NumberFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.objectref.ObjectReferenceFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.other.FallbackFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.temporal.TemporalFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.text.TextFieldFactory;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForButton;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForFormField;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForLabeled;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForMenuItem;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon.IconServiceDefault;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForButton;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForFormField;
-import org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingInfoPopupProvider;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.MainViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiActionHandlerFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiBuilderFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.main.UiContextFxDefault;
-import org.apache.causeway.viewer.commons.applib.CausewayModuleViewerCommonsApplib;
-
-/**
- *
- * @since 2.0
- */
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleViewerCommonsApplib.class,
-        CausewayModuleIncViewerJavaFxModel.class,
-
-        // @Components's
-        UiBuilderFx.class,
-        MainViewFx.class,
-
-        // Component Factories
-        TextFieldFactory.class,
-        MarkupFieldFactory.class,
-        ObjectReferenceFieldFactory.class,
-        NumberFieldFactory.class,
-        TemporalFieldFactory.class,
-        FallbackFieldFactory.class,
-
-        // Decorators
-        PrototypingDecoratorForButton.class,
-        PrototypingDecoratorForFormField.class,
-        PrototypingInfoPopupProvider.class,
-
-        DisablingDecoratorForButton.class,
-        DisablingDecoratorForFormField.class,
-
-        IconDecoratorForLabeled.class,
-        IconDecoratorForMenuItem.class,
-        IconServiceDefault.class,
-
-        // @Service's
-        UiComponentFactoryFx.class,
-        UiActionHandlerFx.class,
-
-        UiContextFxDefault.class,
-
-        // @Mixin's
-})
-
-public class CausewayModuleIncViewerJavaFxUi {
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
deleted file mode 100644
index ed6dcd34fc..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentFactoryFx.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.annotation.LabelPosition;
-import org.apache.causeway.commons.handler.ChainOfResponsibility;
-import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedMember;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator.PrototypingDecorationModel;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import lombok.Getter;
-import lombok.val;
-
-@Service
-public class UiComponentFactoryFx implements UiComponentFactory<Node, Node> {
-
-    private final boolean isPrototyping;
-    private final UiContextFx uiContext;
-    private final ChainOfResponsibility<ComponentRequest, Node> chainOfHandlers;
-
-    /** handlers in order of precedence (debug info)*/
-    @Getter
-    private final List<Class<?>> registeredHandlers;
-
-    @Inject
-    private UiComponentFactoryFx(
-            final CausewaySystemEnvironment causewaySystemEnvironment,
-            final UiContextFx uiContext,
-            final List<UiComponentHandlerFx> handlers) {
-
-        this.isPrototyping = causewaySystemEnvironment.isPrototyping();
-        this.uiContext = uiContext;
-        this.chainOfHandlers = ChainOfResponsibility.named("Component Mapper", handlers);
-        this.registeredHandlers = handlers.stream()
-                .map(Handler::getClass)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public Node componentFor(final ComponentRequest request) {
-
-        val formField = chainOfHandlers.handle(request);
-        val managedMember = (ManagedMember) request.getManagedFeature();
-
-        request.getDisablingUiModelIfAny().ifPresent(disablingUiModel->{
-            uiContext.getDisablingDecoratorForFormField()
-            .decorate(formField, disablingUiModel);
-        });
-
-        return isPrototyping
-                ? uiContext.getPrototypingDecoratorForFormField()
-                        .decorate(formField, PrototypingDecorationModel.of(managedMember))
-                : formField;
-    }
-
-    @Override
-    public Node buttonFor(final ButtonRequest request) {
-
-        val managedAction = request.getManagedAction();
-        val disablingUiModelIfAny = request.getDisablingUiModelIfAny();
-        val actionEventHandler = request.getActionEventHandler();
-
-        val uiButton = new Button(managedAction.getFriendlyName());
-        uiButton.setOnAction(event->actionEventHandler.accept(managedAction));
-
-        disablingUiModelIfAny.ifPresent(disablingUiModel->{
-            uiContext.getDisablingDecoratorForButton()
-            .decorate(uiButton, disablingUiModel);
-        });
-
-        return isPrototyping
-                ? uiContext.getPrototypingDecoratorForButton()
-                        .decorate(uiButton, PrototypingDecorationModel.of(managedAction))
-                : uiButton;
-    }
-
-    @Override
-    public Node parameterFor(final ComponentRequest request) {
-        val formField = chainOfHandlers.handle(request);
-        return formField;
-    }
-
-    @Override
-    public LabelAndPosition<Node> labelFor(final ComponentRequest request) {
-        val labelPosition = Facets.labelAt(request.getManagedFeature().getMetaModel())
-                .orElse(LabelPosition.LEFT);
-        val uiLabel = new Label(request.getFriendlyName());
-        return LabelAndPosition.of(labelPosition, uiLabel);
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
deleted file mode 100644
index 3d99096991..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/UiComponentHandlerFx.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components;
-
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-
-import javafx.scene.Node;
-
-public interface UiComponentHandlerFx
-extends UiComponentFactory.Handler<Node> {
-
-//    /**
-//     * Converts given {@code bindingConverter} to {@link StringConverter} from JavaFX Universe
-//     * @param <T>
-//     * @param bindingConverter
-//     */
-//    default <T> StringConverter<T> toJavaFxStringConverter(
-//            final @NonNull BindingConverterForManagedObject<T> bindingConverter) {
-//
-//        return new StringConverter<T>() {
-//
-//            @Override
-//            public String toString(T value) {
-//                return bindingConverter.toString(value);
-//            }
-//
-//            @Override
-//            public T fromString(String stringifiedValue) {
-//                return bindingConverter.fromString(stringifiedValue);
-//            }
-//
-//        };
-//    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
deleted file mode 100644
index e0bde8d11e..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/collections/TableViewFx.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.collections;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.layout.grid.Grid;
-import org.apache.causeway.applib.services.bookmark.Oid;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._NullSafe;
-import org.apache.causeway.commons.internal.collections._Multimaps;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedCollection;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.VBox;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@Log4j2
-public class TableViewFx extends VBox {
-
-    private static final String NULL_LITERAL = "<NULL>";
-
-    public static TableViewFx empty() {
-        return new TableViewFx();
-    }
-
-    /**
-     * Constructs a (page-able) {@link Grid} from given {@code collection}
-     * @param collection - of (wrapped) domain objects
-     * @param where
-     */
-    public static TableViewFx fromCollection(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ManagedObject collection,
-            final @NonNull Where where) {
-
-        val objects = Facets.collectionStream(collection)
-                .collect(Can.toCan());
-
-        return ManagedObjects.commonSpecification(objects)
-                .map(elementSpec->new TableViewFx(uiContext, elementSpec, objects, where))
-                .orElseGet(TableViewFx::empty);
-    }
-
-    /**
-     * Constructs a (page-able) {@link Grid} from given {@code managedCollection}
-     * @param uiContext
-     * @param managedCollection
-     * @param where
-     */
-    public static TableViewFx forManagedCollection(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ManagedCollection managedCollection,
-            final @NonNull Where where) {
-
-
-        val elementSpec = managedCollection.getElementType();
-        val elements = managedCollection.streamElements()
-                .collect(Can.toCan());
-        return elements.isEmpty()
-                ? empty()
-                : new TableViewFx(uiContext, elementSpec, elements, where);
-    }
-
-    private Can<OneToOneAssociation> columnProperties(final ObjectSpecification elementSpec, final Where where) {
-
-        //TODO honor column order (as per layout)
-        return elementSpec.streamProperties(MixedIn.INCLUDED)
-                .filter(ObjectAssociation.Predicates.staticallyVisible(where))
-                .collect(Can.toCan());
-    }
-
-    /**
-     *
-     * @param elementSpec - as is common to all given {@code objects} aka elements
-     * @param objects - (wrapped) domain objects to be rendered by this table
-     * @param where
-     */
-    private TableViewFx(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull ObjectSpecification elementSpec,
-            final @Nullable Can<ManagedObject> objects,
-            final @NonNull Where where) {
-
-        val objectGrid = new TableView<ManagedObject>();
-        super.getChildren().add(objectGrid);
-
-        if (_NullSafe.isEmpty(objects)) {
-            objectGrid.setPlaceholder(new Label("No rows to display"));
-            return;
-        }
-
-        val columnProperties = columnProperties(elementSpec, where);
-
-        // rather prepare all table cells into a multi-map eagerly,
-        // than having to spawn new transactions/interactions for each table cell when rendered lazily
-        val table = _Multimaps.<Oid, String, String>newMapMultimap();
-
-        _NullSafe.stream(objects)
-        .forEach(object->{
-
-            val id = object.getBookmark().orElse(null);
-            if(id==null) {
-                return;
-            }
-
-            columnProperties.forEach(property->{
-                table.putElement(id, property.getId(), stringifyPropertyValue(property, object));
-            });
-
-        });
-
-        // object link as first column
-        val firstColumn = _fx.newColumn(objectGrid, "", Button.class);
-
-        firstColumn.setCellValueFactory(cellDataFeatures -> {
-            val objectIcon = uiContext.getJavaFxViewerConfig().getObjectFallbackIcon();
-            val uiObjectRefLink = _fx.bottonForImage(objectIcon, 24, 24);
-            uiObjectRefLink.setOnAction(e->{
-                uiContext.route(cellDataFeatures::getValue);
-            });
-            return _fx.newObjectReadonly(uiObjectRefLink);
-        });
-
-        // property columns
-        columnProperties.forEach(property->{
-            val column = _fx.newColumn(objectGrid, property.getCanonicalFriendlyName(), String.class);
-            column.setCellValueFactory(cellDataFeatures -> {
-                log.debug("about to get property value for property {}", property.getId());
-                val targetObject = cellDataFeatures.getValue();
-
-                val cellValue = targetObject.getBookmark()
-                        .map(id->table.getElement(id, property.getId()))
-                        .orElseGet(()->String.format("table cell not found for object '%s' (property-id: '%s')",
-                                ""+targetObject,
-                                property.getId()));
-
-                //TODO add column description as is provided via property.getColumnDescription()
-
-                return _fx.newStringReadonly(cellValue);
-            });
-        });
-
-        // populate the model
-
-        objects.forEach(objectGrid.getItems()::add);
-
-        //objectGrid.recalculateColumnWidths();
-        //objectGrid.setColumnReorderingAllowed(true);
-
-    }
-
-    private String stringifyPropertyValue(
-            final ObjectAssociation property,
-            final ManagedObject targetObject) {
-
-        try {
-            val propertyValue = property.get(targetObject);
-            return propertyValue == null
-                    ? NULL_LITERAL
-                    : propertyValue.getTitle();
-        } catch (Exception e) {
-            return Optional.ofNullable(e.getMessage()).orElse(e.getClass().getName());
-        }
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java
deleted file mode 100644
index 53e4bd0cac..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/dialog/Dialogs.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.dialog;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import javafx.scene.Node;
-import javafx.scene.control.Alert;
-import javafx.scene.control.Alert.AlertType;
-import javafx.scene.control.ButtonType;
-import javafx.scene.control.Label;
-import javafx.scene.control.TextArea;
-import javafx.scene.layout.GridPane;
-import javafx.scene.layout.Priority;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class Dialogs {
-
-    public static void message(String title, String headerText, String contentText){
-        val alert = new Alert(AlertType.INFORMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.showAndWait();
-    }
-
-    public static void message(String title, String headerText, String contentText, Node contentNode){
-        val alert = new Alert(AlertType.INFORMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.getDialogPane().setExpandableContent(contentNode);
-        alert.getDialogPane().setExpanded(true);
-
-        alert.showAndWait();
-    }
-
-    public static void warning(String title, String headerText, String contentText){
-        val alert = new Alert(AlertType.WARNING);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        alert.showAndWait();
-    }
-
-    public static void error(String title, String headerText, String contentText, Exception ex){
-        val alert = new Alert(AlertType.ERROR);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        // Create expandable Exception.
-        val sw = new StringWriter();
-        val pw = new PrintWriter(sw);
-        ex.printStackTrace(pw);
-        val exceptionText = sw.toString();
-
-        val label = new Label("The exception stacktrace was:");
-
-        val textArea = new TextArea(exceptionText);
-        textArea.setEditable(false);
-        textArea.setWrapText(true);
-
-        textArea.setMaxWidth(Double.MAX_VALUE);
-        textArea.setMaxHeight(Double.MAX_VALUE);
-        GridPane.setVgrow(textArea, Priority.ALWAYS);
-        GridPane.setHgrow(textArea, Priority.ALWAYS);
-
-        GridPane expContent = new GridPane();
-        expContent.setMaxWidth(Double.MAX_VALUE);
-        expContent.add(label, 0, 0);
-        expContent.add(textArea, 0, 1);
-
-        // Set expandable Exception into the dialog pane.
-        alert.getDialogPane().setExpandableContent(expContent);
-
-        alert.showAndWait();
-    }
-
-    /**
-     *
-     * @param title
-     * @param headerText
-     * @param contentText
-     * @param confirmLabel eg. Yes
-     * @param denyLabel eg. No
-     * @return whether the dialog's question was confirmed
-     */
-    public static boolean confirm(
-            String title,
-            String headerText,
-            String contentText,
-            String confirmLabel,
-            String denyLabel){
-
-        val alert = new Alert(AlertType.CONFIRMATION);
-        alert.setTitle(title);
-        alert.setHeaderText(headerText);
-        alert.setContentText(contentText);
-
-        val buttonTypeConfirm = new ButtonType(confirmLabel);
-        val buttonTypeDeny = new ButtonType(denyLabel);
-
-        alert.getButtonTypes().setAll(buttonTypeConfirm, buttonTypeDeny);
-
-        ButtonType result = alert.showAndWait()
-                .orElse(null);
-        if (result == buttonTypeConfirm){
-            // ... user chose OK
-            return true;
-        } else {
-            // ... user chose CANCEL or closed the dialog
-            return false;
-        }
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java
deleted file mode 100644
index 3ce649d703..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/FormPane.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.form;
-
-import java.util.List;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.annotation.LabelPosition;
-import org.apache.causeway.commons.internal.collections._Lists;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.geometry.Insets;
-import javafx.geometry.Pos;
-import javafx.scene.Node;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.GridPane;
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-public class FormPane extends GridPane {
-
-    @RequiredArgsConstructor(staticName = "of")
-    private static final class FieldAssembly {
-        @Getter private final @NonNull FormPane parent;
-        @Getter private final @NonNull LabelPosition labelPosition;
-        @Getter private final @NonNull Node fieldComponent;
-        private FlowPane associatedActionBar;
-        public FlowPane getAssociatedActionBar() {
-            if(associatedActionBar==null) {
-                associatedActionBar = new FlowPane();
-                _fx.toolbarLayoutPropertyAssociated(associatedActionBar);
-                switch(labelPosition) {
-                case NONE:
-                case TOP:
-                case RIGHT:
-                    getParent().addRow(associatedActionBar);
-                    break;
-                case LEFT:
-                case DEFAULT:
-                default:
-                    getParent().addRow(null, associatedActionBar);
-                    break;
-                }
-            }
-            return associatedActionBar;
-        }
-    }
-
-    private final List<FieldAssembly> fields = _Lists.newArrayList();
-    private int rowCount = 0;
-
-    public FormPane() {
-        super();
-        val grid = grid();
-        grid.setAlignment(Pos.CENTER);
-        grid.setHgap(10);
-        grid.setVgap(10);
-        grid.setPadding(new Insets(25, 25, 25, 25));
-    }
-
-    public FormPane addField(LabelPosition labelPosition, Node uiFormLabel, Node uiFormField) {
-
-        fields.add(FieldAssembly.of(this, labelPosition, uiFormField));
-
-        switch(labelPosition) {
-        case NONE:
-            addRow(uiFormField);
-            break;
-        case TOP:
-            addRow(uiFormLabel);
-            addRow(uiFormField);
-            break;
-        case RIGHT:
-            addRow(uiFormField, uiFormLabel);
-            break;
-        case LEFT:
-        case DEFAULT:
-        default:
-            addRow(uiFormLabel, uiFormField);
-            break;
-        }
-        return this;
-    }
-
-    public FormPane addActionLink(Node uiButton) {
-        val actionBarAssociatedWithField = _Lists.lastElementIfAny(fields).getAssociatedActionBar();
-        _fx.add(actionBarAssociatedWithField, uiButton);
-        return this;
-    }
-
-
-    // -- HELPER
-
-    private GridPane grid() {
-        return this;
-    }
-
-    private void addRow(@NonNull Node spanningNode) {
-        grid().add(spanningNode, 0, rowCount, 2, 1);
-        ++rowCount;
-    }
-
-    private void addRow(@Nullable Node left, @NonNull Node right) {
-        if(left!=null) {
-            grid().add(left, 0, rowCount);
-        }
-        grid().add(right, 1, rowCount);
-        ++rowCount;
-    }
-
-
-
-
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java
deleted file mode 100644
index 2d8da30b15..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/form/field/CustomFieldFx.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.form.field;
-
-import java.util.Objects;
-
-import javafx.beans.property.ObjectProperty;
-import javafx.beans.property.SimpleObjectProperty;
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.layout.Pane;
-
-public abstract class CustomFieldFx<T> extends Pane {
-
-    protected final Label label = new Label();
-
-    private final ObjectProperty<T> value = new SimpleObjectProperty<T>();
-
-    public void setLabel(String label) {
-        this.label.setText(label);
-        getChildren().add(this.label);
-    }
-
-
-//    /**
-//     * Sets the value of this object. If the new value is not equal to
-//     * {@code getValue()}, fires a value change event. May throw
-//     * {@code IllegalArgumentException} if the value is not acceptable.
-//     * <p>
-//     * <i>Implementation note:</i> the implementing class should document
-//     * whether null values are accepted or not, and override
-//     * {@link #getEmptyValue()} if the empty value is not {@code null}.
-//     *
-//     * @param newValue
-//     *            the new value
-//     * @throws IllegalArgumentException
-//     *             if the value is invalid
-//     */
-    public void setValue(T newValue) {
-        if(Objects.equals(value.getValue(), newValue)) {
-            return; // ignore
-        }
-        value.setValue(newValue);
-        setPresentationValue(newValue);
-    }
-
-    protected <N extends Node> N add(N node) {
-        getChildren().add(node);
-        return node;
-    }
-
-    /**
-     * This method should return the value of the field, based on value of the internal fields.
-     *
-     * @return new value of the field.
-     */
-    protected abstract T generateModelValue();
-
-
-    /**
-     * This method should be implemented to set the value of the fields contained
-     * in this custom field according to the value of the parameter.
-     * It can also be use to show the value to the user in some way,
-     * like placing it in an element contained on the field.
-     *
-     * @param value - the new presentation value.
-     */
-    protected abstract void setPresentationValue(T value);
-
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
deleted file mode 100644
index 53ac6c99ed..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/markup/MarkupFieldFactory.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.markup;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.application.HostServices;
-import javafx.scene.Node;
-import javafx.scene.layout.Region;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class MarkupFieldFactory implements UiComponentHandlerFx {
-
-    private final HostServices hostServices;
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        //return request.getFeatureTypeSpec().hasValueSemantics(HtmlRenderer.class);
-        //TODO
-        return false;
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-//        val pojo = request.getFeatureValue(Object.class);
-//
-//        val markupHtml = request.getFeatureTypeSpec().streamValueSemantics(HtmlRenderer.class)
-//        .map(htmlRenderer->htmlRenderer.titlePresentation(null, pojo))
-//        .filter(_NullSafe::isPresent)
-//        .findFirst()
-//        .orElse("");
-//
-//        return new WebViewFitContent(hostServices::showDocument, markupHtml);
-        return null;
-    }
-
-    // -- HELPER
-
-    /**
-     * Unfortunately we have no simple means of auto-fitting a WebView, so we need a wrapper,
-     * that executes some JavaScript on the rendered content, do determine the preferred height.
-     * <p>
-     * @see <a href="https://stackoverflow.com/questions/25838965/size-javafx-webview-to-the-minimum-size-needed-by-the-document-body">autofitting (stackoverflow)</a>
-     * @see <a href="https://stackoverflow.com/questions/15555510/javafx-stop-opening-url-in-webview-open-in-browser-instead">href handling (stackoverflow)</a>
-     *
-     * @since Jun 29, 2020
-     */
-    @Log4j2
-    private static final class WebViewFitContent extends Region {
-
-        /*
-
-        private final Consumer<String> hrefHandler;
-        private final WebView webview = new WebView();
-        private final WebEngine webEngine = webview.getEngine();
-
-        public WebViewFitContent(final Consumer<String> hrefHandler, final String content) {
-
-            this.hrefHandler = hrefHandler;
-
-            webview.setPrefHeight(5);
-
-            widthProperty().addListener((e, o, newWidth) -> {
-                    webview.setPrefWidth(newWidth.doubleValue());
-                    Platform.runLater(this::adjustHeight);
-            });
-
-            webview.getEngine().getLoadWorker().stateProperty().addListener((e, o, newState) -> {
-                if (newState == State.SUCCEEDED) {
-                    Platform.runLater(this::adjustHeight);
-                    Platform.runLater(this::redirectLinksToExternalBrowser);
-                }
-            });
-
-            webview.getChildrenUnmodifiable().addListener((final ListChangeListener.Change<? extends Node> change) -> {
-                val scrolls = webview.lookupAll(".scroll-bar");
-                for (val scroll : scrolls) {
-                    scroll.setVisible(false);
-                }
-            });
-
-            setContent(content);
-            getChildren().add(webview);
-        }
-
-        @Override
-        protected void layoutChildren() {
-            layoutInArea(webview, 0, 0, getWidth(), getHeight(), 0, HPos.CENTER, VPos.CENTER);
-        }
-
-        public void setContent(final String content) {
-            Platform.runLater(()->webEngine.loadContent(getHtml(content), "text/html"));
-            //Platform.runLater(this::adjustHeight);
-        }
-
-        private void redirectLinksToExternalBrowser() {
-            val document = webview.getEngine().getDocument();
-            if(document==null) {
-                return;
-            }
-            val nodeList = document.getElementsByTagName("a");
-            for (int i = 0; i < nodeList.getLength(); i++) {
-                val node = (EventTarget) nodeList.item(i);
-                node.addEventListener("click", evt -> {
-                    val target = evt.getCurrentTarget();
-                    val anchorElement = (HTMLAnchorElement) target;
-                    val href = anchorElement.getHref();
-                    // handle opening href URL
-                    //log.info("about to handle href {}", href); // rather not log this, might be data!
-                    hrefHandler.accept(href);
-                    evt.preventDefault();
-                }, false);
-            }
-        }
-
-
-        private void adjustHeight() {
-            getContentHeight().ifPresent(contentHeight->webview.setPrefHeight(contentHeight + 20));
-        }
-
-        private OptionalInt getContentHeight() {
-            try {
-                Object result = webEngine.executeScript(
-                        "var myDiv = document.getElementById('mydiv');" +
-                                "if (myDiv != null) myDiv.offsetHeight");
-                if (result instanceof Integer) {
-                    final int height = ((Integer) result).intValue();
-                    return OptionalInt.of(height);
-                }
-            } catch (JSException e) {
-                log.error("failed to execute JavaScript to determine WebView's height", e);
-            }
-            return OptionalInt.empty();
-        }
-
-
-
-        private String getHtml(final String content) {
-            return "<html><body>" +
-                    "<div id=\"mydiv\">" + content + "</div>" +
-                    "</body></html>";
-        }
-        */
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
deleted file mode 100644
index b11b8de496..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/number/NumberFieldFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.number;
-
-import jakarta.inject.Inject;
-
-import org.springframework.util.ClassUtils;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.TextField;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-//@Log4j2
-public class NumberFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        val type = request.getFeatureTypeSpec().getCorrespondingClass();
-        return Number.class.isAssignableFrom(
-                ClassUtils.resolvePrimitiveIfNecessary(type));
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new TextField());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindParsableBidirectional(
-                uiField.textProperty(),
-                managedValue.getValueAsParsableText());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
deleted file mode 100644
index 640befc793..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.object;
-
-import java.util.function.Consumer;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.layout.component.ActionLayoutData;
-import org.apache.causeway.applib.layout.component.CollectionLayoutData;
-import org.apache.causeway.applib.layout.component.DomainObjectLayoutData;
-import org.apache.causeway.applib.layout.component.FieldSet;
-import org.apache.causeway.applib.layout.component.PropertyLayoutData;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSClearFix;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSCol;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSRow;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTab;
-import org.apache.causeway.applib.layout.grid.bootstrap.BSTabGroup;
-import org.apache.causeway.commons.internal.assertions._Assert;
-import org.apache.causeway.core.metamodel.interactions.managed.ActionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.CollectionInteraction;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.PropertyInteraction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.core.metamodel.object.MmTitleUtils;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.collections.TableViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.form.FormPane;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.panel.TitledPanel;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator.DisablingDecorationModel;
-import org.apache.causeway.viewer.commons.model.layout.UiGridLayout;
-
-import javafx.scene.control.TabPane;
-import javafx.scene.layout.Pane;
-import javafx.scene.layout.VBox;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-public class ObjectViewFx extends VBox {
-
-    public static ObjectViewFx fromObject(
-            final @NonNull UiContextFx uiContext,
-            final @NonNull UiComponentFactoryFx uiComponentFactory,
-            final @NonNull Consumer<ManagedAction> actionEventHandler,
-            final @NonNull ManagedObject managedObject) {
-        return new ObjectViewFx(uiContext, uiComponentFactory, actionEventHandler, managedObject);
-    }
-
-    /**
-     * Constructs given domain object's view, with all its visible members and actions.
-     * @param managedObject - domain object
-     */
-    protected ObjectViewFx(
-            final UiContextFx uiContext,
-            final UiComponentFactoryFx uiComponentFactory,
-            final Consumer<ManagedAction> actionEventHandler,
-            final ManagedObject managedObject) {
-
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(managedObject)) {
-            log.warn("invalid managedObject, skipping");
-            return;
-        }
-
-        log.info("binding object interaction to owner {}", managedObject.getSpecification().getFeatureIdentifier());
-        _Assert.assertTrue(uiContext.getInteractionService().isInInteraction(), "requires an active interaction");
-
-        val objectTitle = MmTitleUtils.titleOf(managedObject);
-
-        val uiGridLayout = UiGridLayout.bind(managedObject);
-
-        val gridVisitor = new UiGridLayout.Visitor<Pane, TabPane>(this) {
-
-            @Override
-            protected void onObjectTitle(final Pane container, final DomainObjectLayoutData domainObjectData) {
-                val label = _fx.h2(_fx.newLabel(container, objectTitle));
-                label.maxWidthProperty().bind(
-                        container.widthProperty());
-            }
-
-            @Override
-            protected Pane newRow(final Pane container, final BSRow bsRow) {
-                val uiRow = _fx.newFlowPane(container);
-                return uiRow;
-            }
-
-            @Override
-            protected Pane newCol(final Pane container, final BSCol bscol) {
-
-                val uiCol = _fx.newVBox(container);
-
-                // note: also account for insets and padding, assuming that 98% seems reasonable
-                double realtiveWidthWithRespectToContainer = bscol.getSpan()*0.98/12;
-
-                uiCol.prefWidthProperty().bind(
-                        container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-
-                uiCol.maxWidthProperty().bind(
-                        container.widthProperty().multiply(realtiveWidthWithRespectToContainer));
-
-                uiCol.setFillWidth(true);
-
-                return uiCol;
-            }
-
-            @Override
-            protected Pane newActionPanel(final Pane container) {
-                val uiActionPanel = _fx.newFlowPane(container);
-                _fx.toolbarLayout(uiActionPanel);
-
-                return uiActionPanel;
-            }
-
-            @Override
-            protected TabPane newTabGroup(final Pane container, final BSTabGroup tabGroupData) {
-                val uiTabGroup = _fx.newTabGroup(container);
-                return uiTabGroup;
-            }
-
-            @Override
-            protected Pane newTab(final TabPane container, final BSTab tabData) {
-                val uiTab = _fx.newTab(container, tabData.getName());
-                val uiTabContentPane = new VBox();
-                uiTab.setContent(uiTabContentPane);
-                return uiTabContentPane;
-            }
-
-            @Override
-            protected Pane newFieldSet(final Pane container, final FieldSet fieldSetData) {
-
-                val titledPanel = _fx.add(container, new TitledPanel(fieldSetData.getName()));
-
-                // handle associated actions
-                for(val actionData : fieldSetData.getActions()) {
-                    onAction(titledPanel.getUiActionBar(), actionData);
-                }
-
-                val uiFieldSet = _fx.add(titledPanel, new FormPane());
-                return uiFieldSet;
-            }
-
-
-            @Override
-            protected void onClearfix(final Pane container, final BSClearFix clearFixData) {
-                // TODO Auto-generated method stub
-            }
-
-            @Override
-            protected void onAction(final Pane container, final ActionLayoutData actionData) {
-
-                val owner = managedObject;
-                val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedAction()
-                .ifPresent(managedAction -> {
-
-                    interaction.checkUsability();
-
-                    val uiButton = uiComponentFactory.buttonFor(
-                                    UiComponentFactory.ButtonRequest.of(
-                                        managedAction,
-                                        DisablingDecorationModel.of(interaction),
-                                        actionEventHandler));
-
-                    if(container instanceof FormPane) {
-                        ((FormPane)container).addActionLink(uiButton);
-                    } else {
-                        _fx.add(container, uiButton);
-                    }
-
-
-                });
-            }
-
-            @Override
-            protected void onProperty(final Pane container, final PropertyLayoutData propertyData) {
-
-                val owner = managedObject;
-
-                val formPane = (FormPane) container;
-
-                val interaction = PropertyInteraction.start(owner, propertyData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility()
-                .getManagedProperty()
-                .ifPresent(managedProperty -> {
-
-                    interaction.checkUsability();
-
-                    val propNeg = managedProperty.startNegotiation();
-
-                    val request = UiComponentFactory.ComponentRequest.of(
-                            propNeg,
-                            managedProperty,
-                            DisablingDecorationModel.of(interaction));
-
-                    val uiPropertyField = uiComponentFactory.componentFor(request);
-                    val labelAndPostion = uiComponentFactory.labelFor(request);
-
-                    formPane.addField(
-                            labelAndPostion.getLabelPosition(),
-                            labelAndPostion.getUiLabel(),
-                            uiPropertyField);
-
-                    // handle associated actions
-                    for(val actionData : propertyData.getActions()) {
-                        onAction(container, actionData);
-                    }
-
-                });
-            }
-
-            @Override
-            protected void onCollection(final Pane container, final CollectionLayoutData collectionData) {
-
-                val owner = managedObject;
-
-                CollectionInteraction.start(owner, collectionData.getId(), Where.OBJECT_FORMS)
-                .checkVisibility()
-                .getManagedCollection()
-                .ifPresent(managedCollection -> {
-
-                    val titledPanel = _fx.add(container, new TitledPanel(managedCollection.getFriendlyName()));
-
-                    // handle associated actions
-                    for(val actionData : collectionData.getActions()) {
-                        onAction(titledPanel.getUiActionBar(), actionData);
-                    }
-
-                    _fx.add(titledPanel,
-                            TableViewFx.forManagedCollection(
-                                    uiContext,
-                                    managedCollection,
-                                    Where.PARENTED_TABLES));
-
-                });
-
-            }
-
-        };
-
-        uiGridLayout.visit(gridVisitor);
-        //setWidthFull();
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java
deleted file mode 100644
index b210d8fa2c..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/objectref/ObjectReferenceFieldFactory.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.objectref;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedParameter;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class ObjectReferenceFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.getFeatureTypeSpec().isEntityOrViewModelOrAbstract()
-                || request.getFeatureType().isEnum();
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        //TODO 1) move all the logic that is in the request to the underlying ManagedProperty
-        // 2) pass the ManagedProperty over with the request object
-        // 3) design for an API to bind a ManagedProperty to a FormField, also make sure this works
-        // with Vaadin's FormLayout/Field API
-//        val textValue = request.getFeatureValue(String.class)
-//                .orElse("");
-
-        val uiComponent = new Label(request.getManagedFeature().getIdentifier().toString());
-
-        if(request.getManagedFeature() instanceof ManagedParameter) {
-
-            val managedParameter = (ManagedParameter)request.getManagedFeature();
-
-//            uiComponent.textProperty().
-//
-//            managedParameter.validate(proposedValue)
-
-            //TODO bind to parameter model
-
-        } else if(request.getManagedFeature() instanceof ManagedProperty) {
-
-            val managedProperty = (ManagedProperty)request.getManagedFeature();
-            //TODO bind to property model
-        }
-
-        return uiComponent;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
deleted file mode 100644
index d253785b36..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/other/FallbackFieldFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.other;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.LAST)
-public class FallbackFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(ComponentRequest request) {
-        return true; // the last handler in the chain
-    }
-
-    @Override
-    public Node handle(ComponentRequest request) {
-
-        val spec = request.getFeatureTypeSpec();
-        return new Label(spec.getCorrespondingClass().getSimpleName() + " type not handled");
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
deleted file mode 100644
index 59effaad18..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/panel/TitledPanel.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.panel;
-
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-
-import javafx.scene.control.Label;
-import javafx.scene.layout.FlowPane;
-import javafx.scene.layout.VBox;
-import lombok.Getter;
-
-public class TitledPanel extends VBox {
-
-    @Getter private final Label uiLabel;
-    private FlowPane uiActionBar;
-
-    public TitledPanel(String label) {
-        super();
-        if(!_Strings.isEmpty(label)) {
-            uiLabel = _fx.newLabel(getUiActionBar(), label);
-            _fx.h3(uiLabel);
-        } else {
-            uiLabel = null;
-        }
-        super.setFillWidth(true);
-    }
-
-    public FlowPane getUiActionBar() {
-        if(uiActionBar==null) {
-            uiActionBar = _fx.newFlowPane(this);
-            _fx.toolbarLayout(uiActionBar);
-        }
-        return uiActionBar;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
deleted file mode 100644
index 34a95a7ef9..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/temporal/TemporalFieldFactory.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.temporal;
-
-import java.time.LocalDate;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.OffsetCharacteristic;
-import org.apache.causeway.applib.value.semantics.TemporalValueSemantics.TemporalCharacteristic;
-import org.apache.causeway.core.metamodel.util.Facets;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.binding.BindingConverterForManagedObject;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.DatePicker;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class TemporalFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return Facets.valueStreamSemantics(request.getFeatureTypeSpec(), TemporalValueSemantics.class)
-                .anyMatch(valueSemantics->
-                        valueSemantics.getTemporalCharacteristic()==TemporalCharacteristic.DATE_ONLY
-                        && valueSemantics.getOffsetCharacteristic()==OffsetCharacteristic.LOCAL);
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new DatePicker());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindBidirectional(
-                uiField.valueProperty(),
-                managedValue.getValue(),
-                BindingConverterForManagedObject
-                    .<LocalDate>of(request.getFeatureTypeSpec()).reverse());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
deleted file mode 100644
index dc82789e87..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/components/text/TextFieldFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.components.text;
-
-import jakarta.inject.Inject;
-
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.incubator.viewer.javafx.model.binding.BindingsFx;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentHandlerFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.scene.Node;
-import javafx.scene.control.TextField;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@org.springframework.stereotype.Component
-@jakarta.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class TextFieldFactory implements UiComponentHandlerFx {
-
-    @Override
-    public boolean isHandling(final ComponentRequest request) {
-        return request.hasFacetForValueType(String.class);
-    }
-
-    @Override
-    public Node handle(final ComponentRequest request) {
-
-        val uiComponent = new VBox();
-        val uiField = _fx.add(uiComponent, new TextField());
-        val uiValidationFeedback = _fx.newValidationFeedback(uiComponent);
-
-        val managedValue = request.getManagedValue();
-        BindingsFx.bindParsableBidirectional(
-                uiField.textProperty(),
-                managedValue.getValueAsParsableText());
-        uiField.editableProperty().set(true);
-
-        BindingsFx.bindValidationFeeback(
-                uiValidationFeedback.textProperty(),
-                uiValidationFeedback.visibleProperty(),
-                managedValue.getValidationMessage());
-
-        return uiComponent;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.java
deleted file mode 100644
index fee93c1b86..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForButton.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-
-import javafx.scene.control.Button;
-import javafx.scene.control.Tooltip;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class DisablingDecoratorForButton implements DisablingDecorator<Button> {
-
-    @Override
-    public void decorate(final Button uiButton, final DisablingDecorationModel disableUiModel) {
-
-        val reason = disableUiModel.getReason();
-
-        uiButton.setTooltip(new Tooltip(reason));
-        uiButton.disableProperty().set(true);
-        uiButton.setOnAction(null);
-
-        //uiComponent.getStyleClass().add("button-disabled");
-
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java
deleted file mode 100644
index e2ef235ee0..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/disabling/DisablingDecoratorForFormField.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.disabling;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-
-import javafx.scene.Node;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class DisablingDecoratorForFormField implements DisablingDecorator<Node> {
-
-    @Override
-    public void decorate(final Node formField, final DisablingDecorationModel disableUiModel) {
-
-        val reason = disableUiModel.getReason();
-
-            //formField.setDisabledReason(); //TODO lookup vaadin api as rolemodel
-            //formField.getStyleClass().add("button-disabled");
-            //uiButton.setTooltip(new Tooltip(reason));
-            //uiButton.disableProperty().set(true);
-
-
-
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java
deleted file mode 100644
index d4602d7017..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForLabeled.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Optional;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-
-import javafx.scene.control.Labeled;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class IconDecoratorForLabeled implements IconDecorator<Labeled, Labeled> {
-
-    private final IconService iconService;
-
-    @Override
-    public Labeled decorate(final Labeled uiComponent, final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-        fontAwesomeDecorationModel.ifPresent(fa->{
-            var icon = iconService.fontAwesome(fa);
-            icon
-            .map(this::iconForImage)
-            .ifPresent(uiComponent::setGraphic);
-        });
-        return uiComponent;
-    }
-
-    private ImageView iconForImage(final Image image) {
-        return _fx.iconForImage(image, 16, 16);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java
deleted file mode 100644
index f241d03208..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconDecoratorForMenuItem.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Optional;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-
-import javafx.scene.control.MenuItem;
-import javafx.scene.image.Image;
-import javafx.scene.image.ImageView;
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class IconDecoratorForMenuItem implements IconDecorator<MenuItem, MenuItem> {
-
-    private final IconService iconService;
-
-    @Override
-    public MenuItem decorate(final MenuItem menuItem, final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-        // TODO honor icon position
-
-        fontAwesomeDecorationModel.ifPresent(fa->{
-            var icon = iconService.fontAwesome(fa);
-            icon
-            .map(this::iconForImage)
-            .ifPresent(menuItem::setGraphic);
-        });
-        return menuItem;
-    }
-
-    private ImageView iconForImage(final Image image) {
-        return _fx.iconForImage(image, 16, 16);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java
deleted file mode 100644
index b68bc3cfc3..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/icon/IconServiceDefault.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.icon;
-
-import java.util.Map;
-import java.util.Optional;
-
-import jakarta.annotation.PostConstruct;
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.incubator.viewer.javafx.model.icon.IconService;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-
-import javafx.scene.image.Image;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Getter
-@Log4j2
-public class IconServiceDefault implements IconService {
-
-    private final Map<String, Image> faIconCache = _Maps.newHashMap();
-
-    @PostConstruct
-    public void init() {
-        log.info("about to initialize");
-       // TODO preload fa icon cache
-       // fontawesome SVGs can be downloaded
-       // for SVG to Image conversion see
-       // see https://stackoverflow.com/questions/26948700/convert-svg-to-javafx-image
-       // see also https://www.jensd.de/wordpress/?p=132
-    }
-
-    public Optional<Image> fontAwesome(final String faCssClassName) {
-        return Optional.ofNullable(faIconCache.get(faCssClassName));
-    }
-
-    @Override
-    public Optional<Image> fontAwesome(final FontAwesomeDecorationModel fontAwesomeDecorationModel) {
-        return Optional.ofNullable(faIconCache.get(fontAwesomeDecorationModel.getCssClassesSpaceSeparated()));
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java
deleted file mode 100644
index 949f7287a7..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForButton.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Label;
-import javafx.scene.control.Tooltip;
-import javafx.scene.layout.HBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingDecoratorForButton implements PrototypingDecorator<Button, Node> {
-
-    private final PrototypingInfoPopupProvider prototypingInfoService;
-
-    @Override
-    public Node decorate(final Button uiButton, final PrototypingDecorationModel prototypingDecorationModel) {
-        val span = new HBox();
-        val prototypingLabel = _fx.add(span, new Label("ⓘ"));
-        _fx.add(span, uiButton);
-        prototypingLabel.setTooltip(new Tooltip("Inspect Metamodel"));
-        prototypingLabel.setOnMouseClicked(e->
-            prototypingInfoService.showPrototypingPopup(prototypingDecorationModel));
-
-        uiButton.getStyleClass().add("button-prototyping");
-
-        return span;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java
deleted file mode 100644
index 2789eafeba..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingDecoratorForFormField.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Label;
-import javafx.scene.control.Tooltip;
-import javafx.scene.layout.HBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingDecoratorForFormField implements PrototypingDecorator<Node, Node> {
-
-    private final PrototypingInfoPopupProvider prototypingInfoService;
-
-    @Override
-    public Node decorate(final Node formField, final PrototypingDecorationModel prototypingDecorationModel) {
-
-        val container = new HBox();
-        val infoLabel = _fx.add(container, new Label("ⓘ"));
-        _fx.add(container, formField);
-
-        infoLabel.setTooltip(new Tooltip("Inspect Metamodel"));
-        infoLabel.setOnMouseClicked(e->prototypingInfoService.showPrototypingPopup(prototypingDecorationModel));
-
-        return container;
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
deleted file mode 100644
index 0ca1023486..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/decorator/prototyping/PrototypingInfoPopupProvider.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.decorator.prototyping;
-
-import java.util.stream.Collectors;
-
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.commons.internal.collections._Maps;
-import org.apache.causeway.commons.internal.collections._Sets;
-import org.apache.causeway.core.metamodel.facetapi.Facet;
-import org.apache.causeway.core.metamodel.facetapi.FacetAbstract;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.dialog.Dialogs;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator.PrototypingDecorationModel;
-
-import javafx.beans.property.SimpleStringProperty;
-import javafx.scene.Node;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.Value;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class PrototypingInfoPopupProvider {
-
-    private final Provider<UiComponentFactoryFx> uiComponentFactory;
-
-    public void showPrototypingPopup(final PrototypingDecorationModel prototypingDecorationModel) {
-        val infoNode = getPrototypingInfoUiComponent(prototypingDecorationModel);
-        val headerText = prototypingDecorationModel.getFeatureFriendlyIdentifier();
-        val contentText = prototypingDecorationModel.getFeatureType().toString();
-        Dialogs.message("Inspect Metamodel", headerText, contentText, infoNode);
-    }
-
-    // -- HELPER
-
-    @Value(staticConstructor = "of")
-    private static class Info implements Comparable<Info> {
-        private final String key;
-        private final String value;
-        @Override
-        public int compareTo(final Info other) {
-            return this.getKey().compareTo(other.getKey());
-        }
-    }
-
-    private Node getPrototypingInfoUiComponent(final PrototypingDecorationModel prototypingDecorationModel) {
-
-        val infos = _Sets.<Info>newTreeSet();
-
-        val handlerInfo = uiComponentFactory.get().getRegisteredHandlers()
-                .stream()
-                .map(Class::getSimpleName)
-                .map(handlerName->" • " + handlerName)
-                .collect(Collectors.joining("\n"));
-
-        infos.add(Info.of("Handlers", handlerInfo));
-
-        prototypingDecorationModel.streamFeatureFacets()
-        .forEach(facet ->
-            infos.add(Info.of(
-                    facet.facetType().getSimpleName(),
-                    summarize(facet))));
-
-        val detailPane = new VBox();
-        TableView<Info> tableView = _fx.add(detailPane, new TableView<Info>());
-
-        TableColumn<Info, String> column1 = new TableColumn<>("Key");
-        column1.setCellValueFactory(c->new SimpleStringProperty(c.getValue().getKey()));
-
-        TableColumn<Info, String> column2 = new TableColumn<>("Value");
-        column2.setCellValueFactory(c->new SimpleStringProperty(c.getValue().getValue()));
-
-        tableView.getColumns().add(column1);
-        tableView.getColumns().add(column2);
-
-        infos.forEach(tableView.getItems()::add);
-
-        tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
-
-        //TODO this is a candidate to be moved to _fx, to also account for max screen sizes
-        val scrollPane = new ScrollPane(detailPane);
-        scrollPane.fitToWidthProperty().set(true);
-        scrollPane.fitToHeightProperty().set(true);
-        scrollPane.hbarPolicyProperty().setValue(ScrollPane.ScrollBarPolicy.AS_NEEDED);
-        scrollPane.vbarPolicyProperty().setValue(ScrollPane.ScrollBarPolicy.AS_NEEDED);
-        scrollPane.setPrefHeight(800);
-        scrollPane.setMaxHeight(800);
-        scrollPane.setPrefWidth(1200);
-
-        tableView.prefHeightProperty().bind(scrollPane.heightProperty());
-
-        return scrollPane;
-    }
-
-    private String summarize(final Facet facet) {
-        val sb = new StringBuilder();
-        sb.append(facet.getClass().getSimpleName());
-        if(facet instanceof FacetAbstract) {
-            val attributeMap = _Maps.<String, Object>newTreeMap();
-            ((FacetAbstract)facet).visitAttributes(attributeMap::put);
-            attributeMap.forEach((k, v)->{
-                sb.append("\n • ").append(k).append(": ").append(v);
-            });
-        }
-        return sb.toString();
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java
deleted file mode 100644
index 0d984f407c..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MainViewFx.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.main;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.incubator.viewer.javafx.model.util._fx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.collections.TableViewFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.object.ObjectViewFx;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiService;
-
-import javafx.fxml.FXML;
-import javafx.scene.Node;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.ScrollPane;
-import javafx.scene.control.ScrollPane.ScrollBarPolicy;
-import javafx.scene.control.TextArea;
-import javafx.scene.image.ImageView;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.VBox;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class MainViewFx {
-
-    private final JavaFxViewerConfig viewerConfig;
-    private final MetaModelContext metaModelContext;
-    private final HeaderUiService headerUiModelProvider;
-    private final InteractionService interactionService;
-    private final UiContextFx uiContext;
-    private final UiActionHandlerFx uiActionHandler;
-    private final UiComponentFactoryFx uiComponentFactory;
-
-    @FXML private MenuBar menuBarLeft;
-    @FXML private MenuBar menuBarRight;
-    @FXML private ScrollPane contentView;
-    @FXML private HBox topPane;
-    @FXML private VBox contentPane;
-    @FXML private TextArea sampleTextArea;
-
-    @FXML
-    public void initialize() {
-        log.info("about to initialize");
-
-        uiContext.setNewPageHandler(this::replaceContent);
-        uiContext.setPageFactory(this::uiComponentForActionResult);
-
-        contentView.setFitToWidth(true);
-        contentView.setFitToHeight(true);
-        contentView.setHbarPolicy(ScrollBarPolicy.NEVER);
-        contentView.setVbarPolicy(ScrollBarPolicy.ALWAYS);
-        contentPane.setFillWidth(true);
-        //_fx.borderDashed(contentPane, Color.CRIMSON); //debug
-        interactionService.runAnonymous(this::buildMenu);
-
-        renderHomepage();
-    }
-
-    private void buildMenu() {
-        val header = headerUiModelProvider.getHeader();
-
-        // adding a top level menu 'Home' decorated with a branding-icon ...
-
-        val brandingIcon = new ImageView(viewerConfig.getBrandingIcon());
-        brandingIcon.setPreserveRatio(true);
-
-        val menu = _fx.newMenu(menuBarLeft, "Home");
-        menu.setGraphic(brandingIcon);
-        brandingIcon.fitHeightProperty().set(16);
-        _fx.setMenuOnAction(menu, e->renderHomepage());
-
-        // let the MenuBuilderFx populate the menu-bars ...
-
-        val leftMenuBuilder = MenuBuilderFx.of(uiContext, menuBarLeft, uiActionHandler::handleActionLinkClicked);
-        val rightMenuBuilder = MenuBuilderFx.of(uiContext, menuBarRight, uiActionHandler::handleActionLinkClicked);
-
-        header.navbar().primary().visitMenuItems(leftMenuBuilder);
-        header.navbar().secondary().visitMenuItems(rightMenuBuilder);
-        header.navbar().tertiary().visitMenuItems(rightMenuBuilder);
-    }
-
-    private void replaceContent(final Node node) {
-        contentPane.getChildren().clear();
-        contentPane.getChildren().add(node);
-    }
-
-    private void renderHomepage() {
-        log.info("about to render homepage");
-        uiContext.route(metaModelContext::getHomePageAdapter);
-    }
-
-    private Node uiComponentForActionResult(final ManagedObject actionResult) {
-        if (ManagedObjects.isSpecified(actionResult)
-                && actionResult.getSpecification().isPlural()) {
-            return TableViewFx.fromCollection(uiContext, actionResult, Where.STANDALONE_TABLES);
-        } else {
-            return ObjectViewFx.fromObject(
-                    uiContext,
-                    uiComponentFactory,
-                    uiActionHandler::handleActionLinkClicked,
-                    actionResult);
-        }
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
deleted file mode 100644
index 0e7053c44e..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/MenuBuilderFx.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.function.Consumer;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.viewer.commons.applib.services.menu.MenuVisitor;
-import org.apache.causeway.viewer.commons.applib.services.menu.model.MenuAction;
-import org.apache.causeway.viewer.commons.applib.services.menu.model.MenuDropdown;
-
-import javafx.scene.control.Menu;
-import javafx.scene.control.MenuBar;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.SeparatorMenuItem;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@RequiredArgsConstructor(staticName = "of")
-@Log4j2
-public class MenuBuilderFx implements MenuVisitor {
-
-    private final UiContextFx uiContext;
-    private final MenuBar menuBar;
-    private final Consumer<ManagedAction> menuActionEventHandler;
-
-    private Menu currentTopLevelMenu = null;
-
-    @Override
-    public void onTopLevel(final MenuDropdown menuDto) {
-        log.debug("top level menu {}", menuDto.name());
-
-        menuBar.getMenus()
-        .add(currentTopLevelMenu = new Menu(menuDto.name()));
-    }
-
-    @Override
-    public void onMenuAction(final MenuAction menuDto) {
-        val managedAction = menuDto.managedAction();
-
-        log.debug("sub menu {}", menuDto.name());
-
-        val actionUiModel = uiContext.getActionUiModelFactory().newActionUiModel(uiContext, managedAction);
-        val menuItem = actionUiModel.createMenuUiComponent();
-        menuItem.setOnAction(e->menuActionEventHandler.accept(managedAction));
-        currentTopLevelMenu.getItems().add(menuItem);
-    }
-
-    @Override
-    public void onSectionSpacer() {
-        log.debug("menu spacer");
-        currentTopLevelMenu.getItems().add(new SeparatorMenuItem());
-    }
-
-    @Override
-    public void onSectionLabel(final String named) {
-        log.debug("section label  {}", named);
-        val menuItem = new MenuItem(named);
-        currentTopLevelMenu.getItems().add(menuItem);
-        menuItem.setDisable(true);
-    }
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
deleted file mode 100644
index 727a18d959..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiActionHandlerFx.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.main;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.ui.components.UiComponentFactoryFx;
-import org.apache.causeway.viewer.commons.model.components.UiComponentFactory.ComponentRequest;
-
-import javafx.geometry.Insets;
-import javafx.scene.control.ButtonType;
-import javafx.scene.control.Dialog;
-import javafx.scene.layout.GridPane;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiActionHandlerFx {
-
-    private final UiContextFx uiContext;
-    private final InteractionService interactionService;
-    private final UiComponentFactoryFx uiComponentFactory;
-
-    public void handleActionLinkClicked(final ManagedAction managedAction) {
-
-        log.info("about to build an action prompt for {}", managedAction.getIdentifier());
-
-        final int paramCount = managedAction.getAction().getParameterCount();
-
-        if(paramCount==0) {
-            invoke(managedAction, Can.empty());
-        } else {
-            // get an ActionPrompt, then on invocation show the result in the content view
-
-            val pendingArgs = managedAction.startParameterNegotiation();
-
-            Dialog<ParameterNegotiationModel> dialog = new Dialog<>();
-            dialog.setTitle("<Title>");
-            dialog.setHeaderText("<HeaderText>");
-
-            dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
-            val grid = new GridPane();
-            grid.setHgap(10);
-            grid.setVgap(10);
-            grid.setPadding(new Insets(20, 150, 10, 10));
-            dialog.getDialogPane().setContent(grid);
-
-            pendingArgs.getParamModels().forEach(paramModel->{
-
-                val paramNr = paramModel.getParamNr(); // zero based
-
-                val request = ComponentRequest.of(paramModel);
-
-                val labelAndPosition = uiComponentFactory.labelFor(request);
-                val uiField = uiComponentFactory.parameterFor(request);
-
-                grid.add(labelAndPosition.getUiLabel(), 0, paramNr);
-                grid.add(uiField, 1, paramNr);
-
-            });
-
-            dialog.setResultConverter(dialogButton -> {
-                if (dialogButton == ButtonType.OK) {
-                    return pendingArgs;
-                }
-                return null;
-            });
-
-            dialog.showAndWait().ifPresent(params->{
-                log.info("param negotiation done");
-                invoke(managedAction, params.getParamValues()); //TODO handle vetoes
-            });
-
-        }
-
-    }
-
-    private void invoke(
-            final ManagedAction managedAction,
-            final Can<ManagedObject> params) {
-
-        interactionService.runAnonymous(()->{
-
-            //Thread.sleep(1000); // simulate long running
-
-            val actionResultOrVeto = managedAction.invoke(params);
-
-            actionResultOrVeto.getSuccess()
-            .ifPresent(actionResult->uiContext.route(actionResult));
-
-        });
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java
deleted file mode 100644
index badbc1c5b3..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiBuilderFx.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.Optional;
-
-import jakarta.inject.Inject;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.services.iactn.Interaction;
-import org.apache.causeway.commons.internal.debug._Probe;
-import org.apache.causeway.core.interaction.scope.TransactionBoundaryAware;
-import org.apache.causeway.incubator.viewer.javafx.headless.PrimaryStageInitializer;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.stage.Stage;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiBuilderFx implements PrimaryStageInitializer, TransactionBoundaryAware {
-
-    private final ApplicationContext springContext;
-    private final JavaFxViewerConfig viewerConfig;
-
-    @SneakyThrows
-    @Override
-    public void onPrimaryStageReady(final Stage primaryStage) {
-        log.info("JavaFX primary stage is ready");
-        val layoutUrl = this.viewerConfig.getUiLayout().getURL();
-        val fxmlLoader = new FXMLLoader(layoutUrl);
-        fxmlLoader.setControllerFactory(springContext::getBean);
-        val uiRoot = (Parent)fxmlLoader.load();
-        val scene = new Scene(uiRoot);
-        scene.getStylesheets().add("/ui.css");
-
-        primaryStage.setScene(scene);
-        setupTitle(primaryStage);
-        setupIcon(primaryStage);
-    }
-
-    @Override
-    public void beforeEnteringTransactionalBoundary(final Interaction interaction) {
-        //TODO this would be the place to indicate to the user, that a long running task has started
-        //scene.getRoot().cursorProperty().set(Cursor.WAIT);
-        _Probe.errOut("Transaction HAS_STARTED conversationId=%s", interaction.getInteractionId());
-    }
-
-    @Override
-    public void afterLeavingTransactionalBoundary(final Interaction interaction) {
-        //TODO this would be the place to indicate to the user, that a long running task has ended
-        //scene.getRoot().cursorProperty().set(Cursor.DEFAULT);
-        _Probe.errOut("Transaction IS_ENDING interactionId=%s", interaction.getInteractionId());
-    }
-
-    // -- HELPER
-
-    private void setupTitle(final Stage stage) {
-        val title = Optional.ofNullable(viewerConfig.getApplicationTitle())
-                .orElse("Unknonw Title");
-        stage.setTitle(title);
-    }
-
-    private void setupIcon(final Stage stage) {
-        val icon = viewerConfig.getApplicationIcon();
-        if(icon==null) {
-            return;
-        }
-        stage.getIcons().add(icon);
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
deleted file mode 100644
index a064037bc3..0000000000
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/causeway/incubator/viewer/javafx/ui/main/UiContextFxDefault.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.ui.main;
-
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import jakarta.inject.Inject;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.incubator.viewer.javafx.model.action.ActionUiModelFactoryFx;
-import org.apache.causeway.incubator.viewer.javafx.model.context.UiContextFx;
-import org.apache.causeway.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
-import org.apache.causeway.viewer.commons.model.decorators.DisablingDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.PrototypingDecorator;
-
-import javafx.scene.Node;
-import javafx.scene.control.Button;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.MenuItem;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-@Log4j2
-public class UiContextFxDefault implements UiContextFx {
-
-    @Getter(onMethod_ = {@Override})
-    private final JavaFxViewerConfig javaFxViewerConfig;
-    @Getter(onMethod_ = {@Override})
-    private final InteractionService interactionService;
-    @Getter(onMethod_ = {@Override})
-    private final ActionUiModelFactoryFx actionUiModelFactory = new ActionUiModelFactoryFx();
-
-    @Setter(onMethod_ = {@Override})
-    private Consumer<Node> newPageHandler;
-
-    @Setter(onMethod_ = {@Override})
-    private Function<ManagedObject, Node> pageFactory;
-
-    @Override
-    public void route(final ManagedObject object) {
-        log.info("about to render object {}", object);
-        newPage(pageFor(object));
-    }
-
-    @Override
-    public void route(final Supplier<ManagedObject> objectSupplier) {
-        interactionService.runAnonymous(()->{
-            var object = objectSupplier.get();
-            route(object);
-        });
-    }
-
-    // -- DECORATORS
-
-    @Getter(onMethod_ = {@Override})
-    private final IconDecorator<Labeled, Labeled> iconDecoratorForLabeled;
-    @Getter(onMethod_ = {@Override})
-    private final IconDecorator<MenuItem, MenuItem> iconDecoratorForMenuItem;
-
-    @Getter(onMethod_ = {@Override})
-    private final DisablingDecorator<Button> disablingDecoratorForButton;
-    @Getter(onMethod_ = {@Override})
-    private final DisablingDecorator<Node> disablingDecoratorForFormField;
-
-    @Getter(onMethod_ = {@Override})
-    private final PrototypingDecorator<Button, Node> prototypingDecoratorForButton;
-    @Getter(onMethod_ = {@Override})
-    private final PrototypingDecorator<Node, Node> prototypingDecoratorForFormField;
-
-    // -- HELPER
-
-    private void newPage(final Node content) {
-        if(newPageHandler!=null && content!=null) {
-            newPageHandler.accept(content);
-        }
-    }
-
-    private Node pageFor(final ManagedObject object) {
-        return pageFactory!=null
-                ? pageFactory.apply(object)
-                : null;
-    }
-
-
-}
diff --git a/incubator/viewers/javafx/ui/src/main/resources/ui.css b/incubator/viewers/javafx/ui/src/main/resources/ui.css
deleted file mode 100644
index 08ed35faa6..0000000000
--- a/incubator/viewers/javafx/ui/src/main/resources/ui.css
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-.button-prototyping {
-	-fx-font-style: italic; 
-/*     -fx-background-color: #CCFF99; */
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml b/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
deleted file mode 100644
index 2d7bd46069..0000000000
--- a/incubator/viewers/javafx/ui/src/main/resources/ui.fxml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<?import javafx.geometry.Insets?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.MenuBar?>
-<?import javafx.scene.control.ScrollPane?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.Pane?>
-<?import javafx.scene.layout.Region?>
-<?import javafx.scene.layout.VBox?>
-<?import javafx.scene.paint.Color?>
-<?import javafx.scene.text.Font?>
-
-<VBox prefHeight="800.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.apache.causeway.incubator.viewer.javafx.ui.main.MainViewFx">
-  <children>
-    <HBox fx:id="topPane" VBox.vgrow="NEVER">
-      <children>
-    		<MenuBar fx:id="menuBarLeft" />
-            <Region fx:id="topLevelMenuSpacer" styleClass="menu-bar" HBox.hgrow="SOMETIMES" />
-    		<MenuBar fx:id="menuBarRight" />
-   	  </children>
-    </HBox>
-  <ScrollPane fx:id="contentView" fitToHeight="true" fitToWidth="true" hbarPolicy="NEVER" prefHeight="-1.0" prefWidth="-1.0" vbarPolicy="ALWAYS" VBox.vgrow="ALWAYS">
-         <content>
-            <VBox fx:id="contentPane" prefHeight="200.0" prefWidth="100.0" style="-fx-background-color: #f8f9fa;">
-               <children>
-                  <Label alignment="CENTER" style="&#10;" text="Initializing ..." textAlignment="CENTER" wrapText="false">
-                     <font>
-                        <Font size="18.0" fx:id="x11" />
-                     </font>
-                     <textFill>
-                        <Color blue="0.624" green="0.624" red="0.624" fx:id="x21" />
-                     </textFill>
-                     <VBox.margin>
-                        <Insets left="16.0" top="10.0" />
-                     </VBox.margin>
-                  </Label>
-               </children>
-            </VBox>
-         </content>
-  </ScrollPane>
-    <HBox id="HBox" alignment="CENTER_LEFT" spacing="5.0" VBox.vgrow="NEVER">
-      <children>
-        <Label maxHeight="1.7976931348623157E308" maxWidth="-1.0" text="Left status" HBox.hgrow="ALWAYS">
-          <font>
-            <Font size="11.0" fx:id="x3" />
-          </font>
-          <textFill>
-            <Color blue="0.625" green="0.625" red="0.625" fx:id="x4" />
-          </textFill>
-        </Label>
-        <Pane prefHeight="-1.0" prefWidth="-1.0" HBox.hgrow="ALWAYS" />
-        <Label font="$x3" maxWidth="-1.0" text="Right status" textFill="$x4" HBox.hgrow="NEVER" />
-      </children>
-      <padding>
-        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
-      </padding>
-    </HBox>
-  </children>
-</VBox>
diff --git a/incubator/viewers/javafx/viewer/pom.xml b/incubator/viewers/javafx/viewer/pom.xml
deleted file mode 100644
index d87ca79a58..0000000000
--- a/incubator/viewers/javafx/viewer/pom.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-javafx</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-javafx-viewer</artifactId>
-	<name>Apache Causeway Inc - Viewer JavaFX (Viewer)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.javafx.viewer</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/javafx/model/viewer</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-		
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-javafx-ui</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-services</artifactId>
-		</dependency>
-	</dependencies>
-
-
-</project>
diff --git a/incubator/viewers/javafx/viewer/src/main/java/module-info.java b/incubator/viewers/javafx/viewer/src/main/java/module-info.java
deleted file mode 100644
index 560516cc82..0000000000
--- a/incubator/viewers/javafx/viewer/src/main/java/module-info.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * Do NOT release incubator projects, unstable module name!
- */
-module org.apache.causeway.incubator.viewer.javafx.viewer {
-
-    exports org.apache.causeway.incubator.viewer.javafx.viewer;
-
-    requires transitive javafx.base;
-    requires transitive javafx.graphics;
-
-    requires transitive org.apache.causeway.commons;
-    requires transitive org.apache.causeway.core.config;
-    requires transitive org.apache.causeway.incubator.viewer.javafx.headless;
-    requires transitive org.apache.causeway.incubator.viewer.javafx.model;
-    requires transitive org.apache.causeway.incubator.viewer.javafx.ui;
-    requires transitive org.apache.causeway.viewer.commons.services;
-    requires transitive spring.beans;
-    requires transitive spring.boot;
-    requires transitive spring.context;
-    requires transitive spring.core;
-
-    requires static lombok;
-}
\ No newline at end of file
diff --git a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java b/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java
deleted file mode 100644
index a0f726f01f..0000000000
--- a/incubator/viewers/javafx/viewer/src/main/java/org/apache/causeway/incubator/viewer/javafx/viewer/CausewayModuleIncViewerJavaFxViewer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.javafx.viewer;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.javafx.headless.SpringBootJavaFxApplication;
-import org.apache.causeway.incubator.viewer.javafx.ui.CausewayModuleIncViewerJavaFxUi;
-import org.apache.causeway.viewer.commons.services.CausewayModuleViewerCommonsServices;
-
-/**
- *
- * @since 3.0
- */
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleIncViewerJavaFxUi.class,
-        CausewayModuleViewerCommonsServices.class,
-})
-public class CausewayModuleIncViewerJavaFxViewer {
-
-    /**
-     *
-     * @param appClass the class that is annotated with {@literal @SpringBootApplication}
-     * @param args program arguments
-     */
-    public static final void launch(final Class<?> appClass, final String... args) {
-        SpringBootJavaFxApplication.launchSpringBootApplication(appClass, args);
-    }
-
-}
diff --git a/incubator/viewers/thymeflux/applib/pom.xml b/incubator/viewers/thymeflux/applib/pom.xml
deleted file mode 100644
index a255084f18..0000000000
--- a/incubator/viewers/thymeflux/applib/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-thymeflux</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-thymeflux-applib</artifactId>
-	<name>Apache Causeway Inc - Viewer Thymeflux (Applib)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.thymeflux.applib</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/thymeflux/applib</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-applib</artifactId>
-		</dependency>
-
-
-		<!-- TEST DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/thymeflux/applib/src/main/java/module-info.java b/incubator/viewers/thymeflux/applib/src/main/java/module-info.java
deleted file mode 100644
index 425ac7ef08..0000000000
--- a/incubator/viewers/thymeflux/applib/src/main/java/module-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-module org.apache.causeway.incubator.viewer.thymeflux.applib {
-    exports org.apache.causeway.viewer.thymeflux.applib;
-
-    requires static lombok;
-    requires spring.context;
-}
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/applib/src/main/java/org/apache/causeway/viewer/thymeflux/applib/CausewayModuleIncViewerThymefluxApplib.java b/incubator/viewers/thymeflux/applib/src/main/java/org/apache/causeway/viewer/thymeflux/applib/CausewayModuleIncViewerThymefluxApplib.java
deleted file mode 100644
index 3d65ca074b..0000000000
--- a/incubator/viewers/thymeflux/applib/src/main/java/org/apache/causeway/viewer/thymeflux/applib/CausewayModuleIncViewerThymefluxApplib.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.applib;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-@Configuration
-@Import({
-        // Modules
-})
-public class CausewayModuleIncViewerThymefluxApplib {
-}
-
diff --git a/incubator/viewers/thymeflux/model/pom.xml b/incubator/viewers/thymeflux/model/pom.xml
deleted file mode 100644
index 66c9bcceee..0000000000
--- a/incubator/viewers/thymeflux/model/pom.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-thymeflux</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-thymeflux-model</artifactId>
-	<name>Apache Causeway Inc - Viewer Thymeflux (Model)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.thymeflux.model</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/thymeflux/model</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-		    <groupId>org.apache.causeway.viewer</groupId>
-		    <artifactId>causeway-viewer-commons-applib</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-thymeflux-applib</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-thymeleaf</artifactId>
-			<exclusions>
-			    <exclusion>
-			        <groupId>org.springframework.boot</groupId>
-			        <artifactId>spring-boot-starter-logging</artifactId>
-			    </exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-webflux</artifactId>
-		</dependency>
-		<dependency>
-			<!-- TODO if not required with model, move to viewer-->
-			<groupId>org.springframework.session</groupId>
-			<artifactId>spring-session-core</artifactId>
-		</dependency>
-			
-
-		<!-- TEST DEPENDENCIES -->
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/thymeflux/model/src/main/java/module-info.java b/incubator/viewers/thymeflux/model/src/main/java/module-info.java
deleted file mode 100644
index cf2378f6cd..0000000000
--- a/incubator/viewers/thymeflux/model/src/main/java/module-info.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-module org.apache.causeway.incubator.viewer.thymeflux.model {
-    exports org.apache.causeway.viewer.thymeflux.model;
-
-    requires static lombok;
-    requires org.apache.causeway.core.config;
-    requires org.apache.causeway.incubator.viewer.thymeflux.applib;
-    requires spring.context;
-    requires spring.web;
-    requires org.apache.causeway.viewer.commons.applib;
-    requires spring.beans;
-    requires thymeleaf.spring6;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.core.metamodel;
-}
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/CausewayModuleIncViewerThymefluxModel.java b/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/CausewayModuleIncViewerThymefluxModel.java
deleted file mode 100644
index 8cf310e7e5..0000000000
--- a/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/CausewayModuleIncViewerThymefluxModel.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.model;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.viewer.thymeflux.applib.CausewayModuleIncViewerThymefluxApplib;
-import org.apache.causeway.viewer.thymeflux.model.root.ThymefluxRootController;
-
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleIncViewerThymefluxApplib.class,
-
-        // Components
-        ThymefluxRootController.class
-
-})
-public class CausewayModuleIncViewerThymefluxModel {
-}
-
diff --git a/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/root/ThymefluxRootController.java b/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/root/ThymefluxRootController.java
deleted file mode 100644
index 2cb59f7b91..0000000000
--- a/incubator/viewers/thymeflux/model/src/main/java/org/apache/causeway/viewer/thymeflux/model/root/ThymefluxRootController.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.model.root;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionContext;
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.applib.services.user.UserMemento;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiService;
-
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Controller
-@RequiredArgsConstructor(onConstructor_ = {@Autowired})
-public class ThymefluxRootController {
-
-    private final InteractionService interactionService;
-    private final HeaderUiService headerUiModelProvider;
-
-    @RequestMapping("/tflux")
-    public String root(final Model model) {
-
-        val svenMockup = UserMemento.ofNameAndRoleNames("sven", "causeway-ext-secman-admin", "demo");
-        val interactionContextMockup = InteractionContext.ofUserWithSystemDefaults(svenMockup);
-
-        interactionService.run(interactionContextMockup, ()->{
-
-            var headerUiModel = headerUiModelProvider.getHeader();
-            model.addAttribute("headerUiModel", headerUiModel);
-        });
-
-        //TODO on error use error template instead
-        return "root";
-    }
-
-}
diff --git a/incubator/viewers/thymeflux/pom.xml b/incubator/viewers/thymeflux/pom.xml
deleted file mode 100644
index d060dea930..0000000000
--- a/incubator/viewers/thymeflux/pom.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-
-		<!--
-		the other incubator viewers use this as their parent.
-		However, this then means that it's difficult to setup a mvn profile that will just build the thymeflux
-		viewer without the other incubating viewers.
-
-		As the causeway-incubator module doesn't do much for us, we'll just skip and use the causeway-core as our module
-		(that'll be the ultimate parent one day anyway).
-
-		<groupId>org.apache.causeway.incubator</groupId>
-		<artifactId>causeway-incubator</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-		-->
-
-		<groupId>org.apache.causeway.core</groupId>
-		<artifactId>causeway-core</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../../../core/pom.xml</relativePath>
-	</parent>
-
-	<groupId>org.apache.causeway.incubator.viewer</groupId>
-	<artifactId>causeway-viewer-thymeflux</artifactId>
-	<name>Apache Causeway Inc - Viewer Thymeflux</name>
-
-	<packaging>pom</packaging>
-
-	<properties>
-		
-	</properties>
-
-	<dependencyManagement>
-		<dependencies>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-thymeflux-applib</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-thymeflux-model</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-thymeflux-viewer</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter-websocket</artifactId>
-				<version>${spring-boot.version}</version>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<modules>
-		<module>applib</module>
-		<module>model</module>
-		<module>viewer</module>
-		<module>test</module>
-	</modules>
-
-</project>
diff --git a/incubator/viewers/thymeflux/test/pom.xml b/incubator/viewers/thymeflux/test/pom.xml
deleted file mode 100644
index d6dd1f51e8..0000000000
--- a/incubator/viewers/thymeflux/test/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-thymeflux</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-thymeflux-test</artifactId>
-	<name>Apache Causeway Inc - Viewer Thymeflux (Test)</name>
-
-	<properties>
-        <maven.install.skip>true</maven.install.skip>
-        <maven.deploy.skip>true</maven.deploy.skip>
-    </properties>
-
-	<build>
-		<testResources>
-			<testResource>
-				<directory>src/test/java</directory>
-				<filtering>false</filtering>
-			</testResource>
-		</testResources>
-	</build>
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.examples.apps</groupId>
-			<artifactId>demo-testing-jpa</artifactId>
-			<version>${project.version}</version>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-thymeflux-viewer</artifactId>
-		</dependency>
-		
-		<dependency>
-		    <groupId>io.github.wimdeblauwe</groupId>
-		    <artifactId>htmx-spring-boot-thymeleaf</artifactId>
-		    <version>2.0.0</version>
-		</dependency>
-		
-	</dependencies>
-
-
-</project>
diff --git a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxFeaturesApp.java b/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxFeaturesApp.java
deleted file mode 100644
index 07ccbc9fe1..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxFeaturesApp.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.test;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.commons.internal.os._OsUtil;
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-import org.apache.causeway.viewer.thymeflux.test.config.ThymefluxConfig_headlessPersistence;
-import org.apache.causeway.viewer.thymeflux.test.features.ThymefluxFeaturesController;
-import org.apache.causeway.viewer.thymeflux.viewer.CausewayModuleIncViewerThymefluxViewer;
-
-/**
- * Bootstrap the application.
- */
-@SpringBootApplication
-@Import({
-    CausewayModuleSecurityBypass.class,
-    ThymefluxConfig_headlessPersistence.class,
-
-    // THYMEFLUX INTEGRATION
-    CausewayModuleIncViewerThymefluxViewer.class,
-    // FEATURES
-    ThymefluxFeaturesController.class
-})
-public class ThymefluxFeaturesApp extends SpringBootServletInitializer {
-
-    /**
-     *
-     * @param args
-     * @implNote this is to support the <em>Spring Boot Maven Plugin</em>, which auto-detects an
-     * entry point by searching for classes having a {@code main(...)}
-     */
-    public static void main(final String[] args) {
-
-        // activates when sys-env THERE_CAN_BE_ONLY_ONE=true
-        _OsUtil.thereCanBeOnlyOne();
-
-        CausewayPresets.prototyping();
-        //CausewayPresets.logging(WebRequestCycleForCauseway.class, "debug");
-
-        SpringApplication.run(new Class[] { ThymefluxFeaturesApp.class }, args);
-    }
-
-}
diff --git a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/config/ThymefluxConfig_headlessPersistence.java b/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/config/ThymefluxConfig_headlessPersistence.java
deleted file mode 100644
index 4e4899e52a..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/config/ThymefluxConfig_headlessPersistence.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.test.config;
-
-import java.util.Map;
-
-import jakarta.persistence.Cache;
-import jakarta.persistence.EntityGraph;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.PersistenceUnitUtil;
-import jakarta.persistence.Query;
-import jakarta.persistence.SynchronizationType;
-import jakarta.persistence.criteria.CriteriaBuilder;
-import jakarta.persistence.metamodel.Metamodel;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class ThymefluxConfig_headlessPersistence {
-
-    @Bean
-    EntityManagerFactory entityManagerFactory() {
-        return new EntityManagerFactory() {
-            @Override
-            public <T> T unwrap(final Class<T> cls) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public boolean isOpen() {
-                // TODO Auto-generated method stub
-                return false;
-            }
-
-            @Override
-            public Map<String, Object> getProperties() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public PersistenceUnitUtil getPersistenceUnitUtil() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public Metamodel getMetamodel() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public CriteriaBuilder getCriteriaBuilder() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public Cache getCache() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public EntityManager createEntityManager(final SynchronizationType synchronizationType, final Map map) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public EntityManager createEntityManager(final SynchronizationType synchronizationType) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public EntityManager createEntityManager(final Map map) {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public EntityManager createEntityManager() {
-                // TODO Auto-generated method stub
-                return null;
-            }
-
-            @Override
-            public void close() {
-                // TODO Auto-generated method stub
-            }
-
-            @Override
-            public void addNamedQuery(final String name, final Query query) {
-                // TODO Auto-generated method stub
-            }
-
-            @Override
-            public <T> void addNamedEntityGraph(final String graphName, final EntityGraph<T> entityGraph) {
-                // TODO Auto-generated method stub
-            }
-        };
-    }
-
-}
diff --git a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/features/ThymefluxFeaturesController.java b/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/features/ThymefluxFeaturesController.java
deleted file mode 100644
index 6707fd327a..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/java/org/apache/causeway/viewer/thymeflux/test/features/ThymefluxFeaturesController.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.test.features;
-
-import java.time.LocalTime;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import lombok.RequiredArgsConstructor;
-
-@Controller
-@RequiredArgsConstructor(onConstructor_ = {@Autowired})
-public class ThymefluxFeaturesController {
-
-    @GetMapping("/tflux-features")
-    public String features(final Model model) {
-
-        model.addAttribute("progress", 15);
-
-        return "features";
-    }
-
-
-    @PostMapping("/tflux-features/htmx/greeting")
-    public String htmxGreeting(final Model model){
-
-        model.addAttribute("greeting", "gotcha, it is " + LocalTime.now());
-
-        return "partial/greeting";
-    }
-
-    @PostMapping("/tflux-features/htmx/echo")
-    public String htmxEcho(
-            final @RequestBody String search,
-            final Model model){
-
-        model.addAttribute("echo", search);
-
-        return "partial/echo";
-    }
-
-}
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/application.yml b/incubator/viewers/thymeflux/test/src/main/resources/application.yml
deleted file mode 100644
index 1afed3a6d7..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/application.yml
+++ /dev/null
@@ -1,135 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing,
-#  software distributed under the License is distributed on an
-#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-#  specific language governing permissions and limitations
-#  under the License.
-#
-# See also config/application.properties
-#
-causeway:
-
-  applib:
-    annotation:
-      action:
-        execution-publishing: none
-        command-publishing: none
-      action-layout:
-        css-class-fa:
-          patterns:
-            new.*:fa-plus,
-            add.*:fa-plus-square,
-            create.*:fa-plus,
-            update.*:fa-edit,
-            delete.*:fa-trash,
-            find.*:fa-search,
-            list.*:fa-list,
-            all.*:fa-list,
-            export.*:fa-file-export,
-            import.*:fa-file-import
-        css-class:
-          patterns:
-            delete.*:btn-danger
-      domain-object:
-        editing: false
-        entity-change-publishing: none
-      property:
-        command: all
-        command-publishing: none
-        execution-publishing: none
-      property-layout:
-        label-position: LEFT
-      parameter-layout:
-        label-position: LEFT
-
-  core:
-    meta-model:
-      validator:
-        allow-deprecated: false
-        no-params-only: true
-        explicit-logical-type-names: true
-        service-actions-only: true
-        mixins-only: true
-      introspector:
-        parallelize: false
-        mode: full
-        policy: ANNOTATION_REQUIRED
-    runtime-services:
-      translation:
-        po:
-          mode: disabled
-
-  value-types:
-    kroki:
-      # don't use this in production, as you might not want to share sensitive data over the public wire
-      # instead use a private docker instance like eg. yuzutech/kroki
-      backend-url: https://kroki.io
-
-  viewer:
-    common:
-      application:
-        menubars-layout-file: menubars.layout.xml
-        favicon-url: images/gift.svg
-        brand-logo-header: images/gift_48.png
-        brand-logo-signin: images/gift_256.png
-        name: Apache Causeway - Thymeflux Viewer Features App
-        # https://stackoverflow.com/a/38983935/56880
-        # in addition using special config with the project's maven-resources-plugin
-        version: ${project.version}
-        about: This application demonstrates many aspects of the Apache Causeway programming model, as well as some of the most significant domain services and extensions such as the WrapperFactory, security, commands and publishing.
-      credit:
-        - url:  https://causeway.apache.org
-          image: images/gift_48.png
-          name: Apache Causeway
-          
-  # schema auto creation etc. ...
-  persistence:
-    schema:
-       autoCreateSchemas: causewayExtSecman,causewayExtCommandLog,causewayExtExecutionLog,causewayExtExecutionOutbox,causewayExtSessionLog,causewayExtAuditTrail,demo
-
-  extensions:
-    secman:
-      seed:
-        admin:
-          user-name: "sven"
-          password: "pass"
-          role-name: "causeway-ext-secman-admin"
-          namespace-permissions:
-            sticky: "causeway"
-            additional: "demo"
-        regular-user:
-          role-name: "causeway-ext-secman-user"
-      permissionsEvaluationPolicy: ALLOW_BEATS_VETO
-
-  testing:
-    fixtures:
-      fixture-scripts-specification:
-        context-class: demoapp.dom._infra.fixtures.DemoFixtureScript
-        multiple-execution-strategy: execute_once_by_value
-        non-persisted-objects-strategy: ignore
-        recreate: demoapp.dom._infra.fixtures.DemoFixtureScript
-        run-script-default: demoapp.dom._infra.fixtures.DemoFixtureScript          
-
-server:
-  http2:
-    enabled: true
-  max-http-header-size: 16KB
-  servlet:
-    session:
-      timeout: 20m
-
-management:
-  endpoint:
-    health:
-      enabled: true
-
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/log4j2-spring.xml b/incubator/viewers/thymeflux/test/src/main/resources/log4j2-spring.xml
deleted file mode 100644
index 64357c4225..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/log4j2-spring.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<Configuration status="WARN">
-	<Properties>
-		<Property name="PID">????</Property>
-		<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
-		<Property name="LOG_LEVEL_PATTERN">%5p</Property>
-		<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property>
-		<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-		<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
-	</Properties>
-	<Appenders>
-		<Console name="Console" target="SYSTEM_OUT" follow="true">
-			<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
-		</Console>
-	</Appenders>
-	<Loggers>
-	
-		<!-- silence Wicket -->
-		<Logger name="org.apache.wicket.page.PartialPageUpdate" level="error" />
-	
-		<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
-		<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
-		<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
-		<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
-		<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
-		<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
-		<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
-		<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
-		
-		<logger name="org.apache.directory" level="warn"/>
-		<logger name="org.apache.directory.api.ldap.model.entry.Value" level="off"/>
-		
-		<logger name="DataNucleus.Persistence" level="info"/>
-		<logger name="DataNucleus.Transaction" level="info"/>
-		<logger name="DataNucleus.Datastore.Schema" level="info"/>
-		<logger name="DataNucleus.Datastore.Native" level="info"/>
-		
-		<Root level="info">
-			<AppenderRef ref="Console" />
-		</Root>
-	</Loggers>
-</Configuration>
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/menubars.layout.xml b/incubator/viewers/thymeflux/test/src/main/resources/menubars.layout.xml
deleted file mode 100644
index 1a8fd9fadb..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/menubars.layout.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-
-<!--
-For latest we use: https://raw.githubusercontent.com/apache/causeway/master/antora/supplemental-ui/applib/layout/menubars/bootstrap3/menubars.xsd
-      rather than: https://causeway.apache.org/applib/layout/menubars/bootstrap3/menubars.xsd
- -->
-<mb3:menuBars
-        xsi:schemaLocation="https://causeway.apache.org/applib/layout/menubars/bootstrap3 https://raw.githubusercontent.com/apache/causeway/master/antora/supplemental-ui/applib/layout/menubars/bootstrap3/menubars.xsd https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd"
-        xmlns:cpt="https://causeway.apache.org/applib/layout/component"
-        xmlns:mb3="https://causeway.apache.org/applib/layout/menubars/bootstrap3"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-    <mb3:primary>
-
-        <mb3:menu>
-            <mb3:named>Basic Types</mb3:named>
-            <mb3:section>
-                <mb3:named>Primitives</mb3:named>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="shorts"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="ints"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="longs"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="bytes"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="floats"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="doubles"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="chars"/>
-                <mb3:serviceAction objectType="demo.PrimitiveTypesMenu" id="booleans"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Wrappers</mb3:named>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="bytes"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="shorts"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="integers"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="longs"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="floats"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="doubles"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="characters"/>
-                <mb3:serviceAction objectType="demo.JavaLangWrapperTypesMenu" id="booleans"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Common</mb3:named>
-                <mb3:serviceAction objectType="demo.JavaLangTypesMenu" id="enums"/>
-                <mb3:serviceAction objectType="demo.JavaLangTypesMenu" id="strings"/>
-                <mb3:serviceAction objectType="demo.JavaLangTypesMenu" id="voids"/>
-            </mb3:section>
-        </mb3:menu>
-
-        <mb3:menu unreferencedActions="true">
-            <mb3:named>Other</mb3:named>
-        </mb3:menu>
-    </mb3:primary>
-	<mb3:secondary>
-        <mb3:menu>
-            <mb3:named>Prototyping</mb3:named>
-            <mb3:section>
-                <mb3:named>Fixtures</mb3:named>
-                <mb3:serviceAction objectType="causeway.testing.fixtures.FixtureScripts" id="runFixtureScript"/>
-                <mb3:serviceAction objectType="causeway.testing.fixtures.FixtureScripts" id="recreateObjectsAndReturnFirst"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Layouts</mb3:named>
-                <mb3:serviceAction objectType="causeway.applib.LayoutServiceMenu" id="downloadLayouts"/>
-                <mb3:serviceAction objectType="causeway.applib.LayoutServiceMenu" id="downloadMenuBarsLayout"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Meta Model and Features</mb3:named>
-                <mb3:serviceAction objectType="causeway.applib.MetaModelServiceMenu" id="downloadMetaModel"/>
-                <mb3:serviceAction objectType="causeway.applib.MetaModelServiceMenu" id="downloadMetaModelDiff"/>
-                <mb3:serviceAction objectType="causeway.feat.ApplicationFeatureMenu" id="allNamespaces"/>
-                <mb3:serviceAction objectType="causeway.feat.ApplicationFeatureMenu" id="allTypes"/>
-                <mb3:serviceAction objectType="causeway.feat.ApplicationFeatureMenu" id="allActions"/>
-                <mb3:serviceAction objectType="causeway.feat.ApplicationFeatureMenu" id="allProperties"/>
-                <mb3:serviceAction objectType="causeway.feat.ApplicationFeatureMenu" id="allCollections"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Persistence</mb3:named>
-                <mb3:serviceAction objectType="causeway.persistence.jdo.JdoMetamodelMenu" id="downloadMetamodels"/>
-                <mb3:serviceAction objectType="causeway.ext.h2Console.H2ManagerMenu" id="openH2Console"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>REST API</mb3:named>
-                <mb3:serviceAction objectType="causeway.viewer.roRendering.SwaggerServiceMenu" id="openSwaggerUi"/>
-                <mb3:serviceAction objectType="causeway.viewer.roRendering.SwaggerServiceMenu" id="openRestApi"/>
-                <mb3:serviceAction objectType="causeway.viewer.roRendering.SwaggerServiceMenu" id="downloadSwaggerSchemaDefinition"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>i18n</mb3:named>
-                <mb3:serviceAction objectType="causeway.applib.TranslationServicePoMenu" id="downloadTranslations"/>
-                <mb3:serviceAction objectType="causeway.applib.TranslationServicePoMenu" id="resetTranslationCache"/>
-                <mb3:serviceAction objectType="causeway.applib.TranslationServicePoMenu" id="switchToReadingTranslations"/>
-                <mb3:serviceAction objectType="causeway.applib.TranslationServicePoMenu" id="switchToWritingTranslations"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Manual Testing</mb3:named>
-                <mb3:serviceAction objectType="causeway.applib.SitemapServiceMenu" id="downloadSitemap">
-                    <cpt:named>Download Site-Map Template (Adoc)</cpt:named>
-                </mb3:serviceAction>
-            </mb3:section>
-        </mb3:menu>
-
-        <mb3:menu>
-            <mb3:named>Security</mb3:named>
-            <mb3:section>
-                <mb3:named>Users</mb3:named>
-            	<mb3:serviceAction objectType="causeway.ext.secman.ApplicationUserMenu" id="userManager"/>
-            	<mb3:serviceAction objectType="causeway.ext.secman.ApplicationUserMenu" id="findUsers"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Roles</mb3:named>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationRoleMenu" id="roleManager"/>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationRoleMenu" id="findRoles"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Permissions</mb3:named>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationPermissionMenu" id="allPermissions"/>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationPermissionMenu" id="findOrphanedPermissions"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Tenancies</mb3:named>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationTenancyMenu" id="tenancyManager"/>
-                <mb3:serviceAction objectType="causeway.ext.secman.ApplicationTenancyMenu" id="findTenancies"/>
-            </mb3:section>
-        </mb3:menu>
-
-    </mb3:secondary>
-    <mb3:tertiary>
-        <mb3:menu>
-            <mb3:named/>
-            <mb3:section>
-                <mb3:named>Documentation</mb3:named>
-                <mb3:serviceAction objectType="causeway.ext.docgen.DocumentationMenu" id="help"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Configuration</mb3:named>
-                <mb3:serviceAction objectType="causeway.conf.ConfigurationMenu" id="configuration"/>
-	        </mb3:section>
-            <mb3:section>
-                <mb3:named>Impersonate</mb3:named>
-                <mb3:serviceAction objectType="causeway.sudo.ImpersonateMenu" id="impersonate"/>
-                <mb3:serviceAction objectType="causeway.sudo.ImpersonateMenu" id="impersonateWithRoles"/>
-                <mb3:serviceAction objectType="causeway.applib.ImpersonateStopMenu" id="stopImpersonating"/>
-            </mb3:section>
-            <mb3:section>
-                <mb3:named>Security</mb3:named>
-                <mb3:serviceAction objectType="causeway.applib.UserMenu" id="me"/>  <!-- this is hidden by secman -->
-                <mb3:serviceAction objectType="causeway.ext.secman.MeService" id="me"/>
-	            <mb3:serviceAction objectType="causeway.security.LogoutMenu" id="logout"/>
-	        </mb3:section>
-
-        </mb3:menu>
-    </mb3:tertiary>
-</mb3:menuBars>
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/static/images/favicon.ico b/incubator/viewers/thymeflux/test/src/main/resources/static/images/favicon.ico
deleted file mode 100644
index 4d27b0f5cd..0000000000
Binary files a/incubator/viewers/thymeflux/test/src/main/resources/static/images/favicon.ico and /dev/null differ
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift.svg b/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift.svg
deleted file mode 100644
index 25a35ed2c4..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift.svg
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<path style="fill:#4F3F82;" d="M361,195c0,76.8-55.8,105.3-96.599,132.599H263.5c0,0.3-0.3,0.601-0.3,0.601
-	c-2.401,1.199-4.799,1.8-7.2,1.8c-2.701,0-5.099-0.901-7.5-2.401h-0.901C207.4,300.599,151,272.1,151,195c0-8.401,6.599-15,15-15
-	s15,6.599,15,15c0,32.399,16.199,62.699,43.2,80.7l16.8,11.4V165c0-8.401,6.599-15,15-15s15,6.599,15,15v122.1l16.8-11.4
-	c27.001-18.001,43.2-48.301,43.2-80.7c0-8.401,6.599-15,15-15S361,186.599,361,195z"/>
-<path style="fill:#3B2C68;" d="M361,195c0,76.8-55.8,105.3-96.599,132.599H263.5c0,0.3-0.3,0.601-0.3,0.601
-	c-2.401,1.199-4.799,1.8-7.2,1.8V150c8.401,0,15,6.599,15,15v122.1l16.8-11.4c27.001-18.001,43.2-48.301,43.2-80.7
-	c0-8.401,6.599-15,15-15S361,186.599,361,195z"/>
-<path style="fill:#FC1A40;" d="M346,360H166c-8.401,0-15,6.599-15,15v122c0,8.399,6.599,15,15,15h180c8.401,0,15-6.601,15-15V375
-	C361,366.599,354.401,360,346,360z"/>
-<path style="fill:#C60034;" d="M361,375v122c0,8.399-6.599,15-15,15h-90V360h90C354.401,360,361,366.599,361,375z"/>
-<path style="fill:#FF3E75;" d="M376,300H136c-8.401,0-15,6.599-15,15v60c0,8.399,6.599,15,15,15h240c8.401,0,15-6.601,15-15v-60
-	C391,306.599,384.401,300,376,300z"/>
-<path style="fill:#FC1A40;" d="M391,315v60c0,8.399-6.599,15-15,15H256v-90h120C384.401,300,391,306.599,391,315z"/>
-<path style="fill:#FCBF29;" d="M301,300h-90c0,65.204,0,136.894,0,212h90C301,469.966,301,342.439,301,300z"/>
-<path style="fill:#FE9923;" d="M301,300h-45c0,65.204,0,136.894,0,212h45C301,469.966,301,342.439,301,300z"/>
-<path style="fill:#FEDB41;" d="M301,300h-90c0,27.681,0,58.115,0,90h90C301,372.155,301,318.017,301,300z"/>
-<path style="fill:#FCBF29;" d="M301,300h-45c0,27.681,0,58.115,0,90h45C301,372.155,301,318.017,301,300z"/>
-<path style="fill:#FF5FA8;" d="M166,210c-41.353,0-75-40.371-75-90s33.647-90,75-90c16.553,0,32.227,6.284,45.322,18.193
-	c4.703,4.26,26.237,100.077,23.555,107.578C223.026,188.716,196,210,166,210z"/>
-<path style="fill:#FEDB41;" d="M256,0c-41.4,0-75,40.499-75,90c0,49.499,33.6,90,75,90s75-40.501,75-90C331,40.499,297.4,0,256,0z"
-	/>
-<path style="fill:#FF3E75;" d="M346,210c-30,0-57.026-21.284-68.877-54.229c-0.938-2.622-1.128-5.464-0.542-8.203
-	c1.62-7.591,18.367-94.186,24.097-99.375C313.773,36.284,329.447,30,346,30c41.353,0,75,40.371,75,90S387.353,210,346,210z"/>
-<path style="fill:#FCBF29;" d="M331,90c0,49.499-33.6,90-75,90V0C297.4,0,331,40.499,331,90z"/>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_256.png b/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_256.png
deleted file mode 100644
index da26272974..0000000000
Binary files a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_256.png and /dev/null differ
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_48.png b/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_48.png
deleted file mode 100644
index 86154c40ba..0000000000
Binary files a/incubator/viewers/thymeflux/test/src/main/resources/static/images/gift_48.png and /dev/null differ
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/templates/basic/progressbar.html b/incubator/viewers/thymeflux/test/src/main/resources/templates/basic/progressbar.html
deleted file mode 100644
index 3a296303f0..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/templates/basic/progressbar.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!-- Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. -->
-</head>
-<body>
-	<div th:fragment="progress(percent)" class="progress">
-		<div class="progress-bar" role="progressbar" 
-			  	th:style="'width:' + ${percent} + '%'">[[${percent}]]%</div>
-	</div>	
-</body>
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/templates/features.html b/incubator/viewers/thymeflux/test/src/main/resources/templates/features.html
deleted file mode 100644
index 9978cacd63..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/templates/features.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE html>
-<!-- Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. -->
-<html lang="en" 
-	xmlns:th="http://www.thymeleaf.org"  
-	xmlns:hx="http://www.w3.org/1999/xhtml">
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <link rel="icon" type="image/x-icon" href="/images/favicon.ico">
-    <link th:rel="stylesheet" th:href="@{/webjars/bootstrap/5.2.3/css/bootstrap.min.css}" />
-    <link th:rel="stylesheet" th:href="@{/css/causeway-thymeflux.css}">
-    <!-- <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script> -->
-    <script th:src="@{/webjars/popper.js/2.9.3/umd/popper.min.js}" defer></script>
-    <script th:src="@{/webjars/bootstrap/5.2.3/js/bootstrap.bundle.min.js}" defer></script>
-    <script th:src="@{/webjars/htmx.org/1.8.6/dist/htmx.min.js}" defer></script>
-</head>
-<body>
-
-<div class="container">
-
-	<div id="title">
-		<h1>Apache Causeway - Thymeflux Features</h1>
-	</div>
-
-	<h2>HTMX - On Click</h3>
-	<p>
-		<label class="hx-greeting">Hello World!</label>
-		
-		<button type="button" class="btn btn-primary" 
-		th:hx-post="@{/tflux-features/htmx/greeting}"
-        hx-trigger="click"
-        hx-target=".hx-greeting"
-        hx-swap="innerHTML">Change greeting</button>
-	</p>
-	
-	<h2>HTMX - Text Input Echo</h3>
-	<p>
-		
-		<input class="form-control" type="search" name="search" placeholder="Search ..."
-			th:hx-post="@{/tflux-features/htmx/echo}"
-        	hx-trigger="keyup changed delay:400ms, search"
-        	hx-target=".hx-echo"
-        	hx-swap="innerHTML"
-        	hx-indicator=".htmx-indicator">
-        	
-       	<div class="htmx-indicator spinner-border" role="status">
-  			<span class="visually-hidden">Loading...</span>
-		</div>
-		
-		<label class="hx-echo">Hello World!</label>
-	</p>
-
-	<h2>Object Quick List</h3>
-	<p>
-		<ul class="list-group">
-		  <li class="list-group-item active" aria-current="true">An active item</li>
-		  <li class="list-group-item">A second item</li>
-		  <li class="list-group-item">A third item</li>
-		  <li class="list-group-item">A fourth item</li>
-		  <li class="list-group-item">And a fifth one</li>
-		</ul>
-	</p>
-	
-
-	<h2>Single Select</h3>
-    <p>
-		<select class="form-select">
-		  <option selected>None</option>
-		  <option value="1">One</option>
-		  <option value="2">Two</option>
-		  <option value="3">Three</option>
-		</select>
-	</p>
-	
-	<h2>Multi Select</h3>
-    <p>
-	    <div class="card" style="width: 18rem;">
-		  <div class="card-header">
-		    <input class="form-control" type="search" name="search" placeholder="Search ...">
-		  </div>
-		  <ul class="list-group list-group-flush">
-		      <li class="list-group-item">
-			    <input class="form-check-input me-1" type="checkbox" value="" id="firstCheckbox">
-			    <label class="form-check-label" for="firstCheckbox">First checkbox</label>
-			  </li>
-			  <li class="list-group-item">
-			    <input class="form-check-input me-1" type="checkbox" value="" id="secondCheckbox">
-			    <label class="form-check-label" for="secondCheckbox">Second checkbox</label>
-			  </li>
-			  <li class="list-group-item">
-			    <input class="form-check-input me-1" type="checkbox" value="" id="thirdCheckbox">
-			    <label class="form-check-label" for="thirdCheckbox">Third checkbox</label>
-			  </li>
-		  </ul>
-		</div>
-	</p>
-	
-	<h2>Progress Bar</h3>
-    <p>
-		<th:block>
-			<div th:replace="basic/progressbar :: progress(${progress})"></div>
-		</th:block>
-	</p>
-	
-
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/echo.html b/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/echo.html
deleted file mode 100644
index a4ce05ad59..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/echo.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<!-- Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. -->
-<body>
-	<th:block>[[${echo}]]</th:block>	
-</body>
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/greeting.html b/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/greeting.html
deleted file mode 100644
index c4fa9e79dd..0000000000
--- a/incubator/viewers/thymeflux/test/src/main/resources/templates/partial/greeting.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<!-- Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. -->
-<body>
-	<th:block>[[${greeting}]]</th:block>	
-</body>
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/test/src/test/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxViewerTests.java b/incubator/viewers/thymeflux/test/src/test/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxViewerTests.java
deleted file mode 100644
index 4faf069719..0000000000
--- a/incubator/viewers/thymeflux/test/src/test/java/org/apache/causeway/viewer/thymeflux/test/ThymefluxViewerTests.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.test;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.ui.Model;
-import org.springframework.validation.support.BindingAwareModelMap;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-import org.apache.causeway.applib.annotation.DomainServiceLayout.MenuBar;
-import org.apache.causeway.commons.io.YamlUtils;
-import org.apache.causeway.viewer.commons.applib.services.header.HeaderUiModel;
-import org.apache.causeway.viewer.thymeflux.model.root.ThymefluxRootController;
-import org.apache.causeway.viewer.thymeflux.viewer.CausewayModuleIncViewerThymefluxViewer;
-
-import demoapp.testing.jpa.DemoDomainJpa_forTesting;
-
-@SpringBootTest(
-        classes = {
-                DemoDomainJpa_forTesting.class,
-                CausewayModuleIncViewerThymefluxViewer.class
-        },
-        //webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
-        properties = {
-                //"spring.jpa.show-sql=true",
-                //"logging.level.org.springframework.orm.jpa=DEBUG"
-        })
-@ActiveProfiles(profiles = "demo-jpa")
-@AutoConfigureWebTestClient
-class ThymefluxViewerTests {
-
-    //@Autowired private WebTestClient client;
-    @Autowired private ThymefluxRootController rootController;
-
-    @Test
-    void rootController() {
-        final Model model = new BindingAwareModelMap();
-        rootController.root(model);
-
-        var headerUiModel = (HeaderUiModel)model.getAttribute("headerUiModel");
-        assertNotNull(headerUiModel);
-
-        var navbar = headerUiModel.navbar();
-
-        assertEquals(MenuBar.PRIMARY,   navbar.primary().menuBarSelect());
-        assertEquals(MenuBar.SECONDARY, navbar.secondary().menuBarSelect());
-        assertEquals(MenuBar.TERTIARY,  navbar.tertiary().menuBarSelect());
-
-        System.err.printf("== navbar: %n%s====%n", YamlUtils.toStringUtf8(navbar.primary()));
-    }
-
-
-//    @Test
-//    void responseOkOnRoot() {
-////        Mockito
-////            .when(repository.getIsDataReady(ArgumentMatchers.any()))
-////            .thenReturn(Mono.just(true));
-//
-//        client.get()
-//            .uri("/tflux/")
-//            //.accept(MediaType.APPLICATION_JSON_UTF8)
-//            .exchange()
-//            .expectStatus().isOk();
-//    }
-}
-
diff --git a/incubator/viewers/thymeflux/viewer/pom.xml b/incubator/viewers/thymeflux/viewer/pom.xml
deleted file mode 100644
index 7a1df6c475..0000000000
--- a/incubator/viewers/thymeflux/viewer/pom.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-thymeflux</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-thymeflux-viewer</artifactId>
-	<name>Apache Causeway Inc - Viewer Thymeflux (Viewer)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.thymeflux.viewer</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/thymeflux/viewer</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-thymeflux-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-webapp</artifactId>
-		</dependency>
-		
-		<dependency>
-		    <groupId>org.apache.causeway.viewer</groupId>
-		    <artifactId>causeway-viewer-commons-services</artifactId>
-		</dependency>
-		
-		<dependency>
-		    <groupId>org.webjars</groupId>
-		    <artifactId>bootstrap</artifactId>
-		    <version>5.2.3</version>
-		</dependency>
-		
-<!--		<dependency>-->
-<!--		    <groupId>org.webjars.bower</groupId>-->
-<!--		    <artifactId>popper.js</artifactId>-->
-<!--		    <version>2.11.2</version>-->
-<!--		</dependency>-->
-		
-		<dependency>
-		    <groupId>org.webjars</groupId>
-		    <artifactId>popper.js</artifactId>
-		    <version>2.9.3</version>
-		</dependency>
-		
-		<dependency>
-		    <groupId>org.webjars.npm</groupId>
-		    <artifactId>htmx.org</artifactId>
-		    <version>1.9.0</version>
-		</dependency>
-
-
-
-		<!-- TODO remove if already provided by 'model'' artifact-->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-websocket</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>org.springframework.boot</groupId>
-					<artifactId>spring-boot-starter-logging</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		
-	</dependencies>
-
-
-</project>
diff --git a/incubator/viewers/thymeflux/viewer/src/main/java/module-info.java b/incubator/viewers/thymeflux/viewer/src/main/java/module-info.java
deleted file mode 100644
index f6ff79889a..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/java/module-info.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-module org.apache.causeway.incubator.viewer.thymeflux.viewer {
-    exports org.apache.causeway.viewer.thymeflux.viewer;
-
-    requires static lombok;
-    requires org.apache.causeway.applib;
-    requires org.apache.causeway.commons;
-    requires org.apache.causeway.core.config;
-    requires org.apache.causeway.core.metamodel;
-    requires org.reactivestreams;
-    requires reactor.core;
-    requires spring.beans;
-    requires spring.boot;
-    requires spring.boot.autoconfigure;
-    requires spring.context;
-    requires spring.core;
-    requires spring.tx;
-    requires org.apache.causeway.incubator.viewer.thymeflux.model;
-    requires org.apache.causeway.viewer.commons.services;
-}
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/viewer/src/main/java/org/apache/causeway/viewer/thymeflux/viewer/CausewayModuleIncViewerThymefluxViewer.java b/incubator/viewers/thymeflux/viewer/src/main/java/org/apache/causeway/viewer/thymeflux/viewer/CausewayModuleIncViewerThymefluxViewer.java
deleted file mode 100644
index bf8eee02e9..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/java/org/apache/causeway/viewer/thymeflux/viewer/CausewayModuleIncViewerThymefluxViewer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.thymeflux.viewer;
-
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.viewer.commons.services.CausewayModuleViewerCommonsServices;
-import org.apache.causeway.viewer.thymeflux.model.CausewayModuleIncViewerThymefluxModel;
-
-@Configuration
-@Import({
-        // @Service's
-        CausewayModuleViewerCommonsServices.class,
-
-        // Modules
-        CausewayModuleIncViewerThymefluxModel.class,
-
-        // autoconfigurations
-        //GraphQlAutoConfiguration.class,
-        //GraphQlWebMvcAutoConfiguration.class
-})
-@EnableConfigurationProperties({
-        //GraphQlProperties.class, GraphQlCorsProperties.class
-})
-//@ComponentScan
-public class CausewayModuleIncViewerThymefluxViewer {
-
-//    @Bean
-//    @ConditionalOnMissingBean
-//    public BatchLoaderRegistry batchLoaderRegistry() {
-//        return new DefaultBatchLoaderRegistry();
-//    }
-}
-
diff --git a/incubator/viewers/thymeflux/viewer/src/main/resources/static/css/causeway-thymeflux.css b/incubator/viewers/thymeflux/viewer/src/main/resources/static/css/causeway-thymeflux.css
deleted file mode 100644
index 51a34d3b84..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/resources/static/css/causeway-thymeflux.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
-*/
-#title{
-    margin:40px 0;
-}
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/nav/topNavSection.html b/incubator/viewers/thymeflux/viewer/src/main/resources/templates/nav/topNavSection.html
deleted file mode 100644
index 5885b82b0d..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/nav/topNavSection.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html>
-<!--/* Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. */-->
-<html lang="en" 
-	xmlns:th="http://www.thymeleaf.org"  
-	xmlns:hx="http://www.w3.org/1999/xhtml">
-	
-<!-- NAMED MENU DROPDOWN -->
-
-<th:block th:fragment="topNavSection(topNavSection)">
-
-<li th:each="topLevelEntry : ${topNavSection.topLevelEntries()}"
-	class="nav-item dropdown">
-	<a class="nav-link dropdown-toggle"
-		href="#" role="button" data-bs-toggle="dropdown"><span>[[${topLevelEntry.name()}]]</span>
-	</a>
-	<ul class="dropdown-menu">
-
-		<!-- MENU ENTRIES -->
-		<th:block th:each="menuEntry : ${topLevelEntry.subEntries()}">
-
-			<th:block th:if="${menuEntry.asSpacer().isPresent()}"
-				th:with="menuSpacer = ${menuEntry.asSpacer().get()}">
-
-				<th:block th:if="${menuSpacer.isEmpty()}">
-					<li><hr class="dropdown-divider"></li>
-				</th:block>
-
-				<th:block th:unless="${menuSpacer.isEmpty()}">
-					<li class="list-section-label"><span class="sectionLabel">[[${menuSpacer.label()}]]</span>
-					</li>
-				</th:block>
-
-			</th:block>
-			<li><a th:if="${menuEntry.asAction().isPresent()}"
-				th:with="menuAction = ${menuEntry.asAction().get()}"
-				class="dropdown-item" href="#"> [[${menuAction.name()}]] </a></li>
-
-		</th:block>
-
-	</ul>
-</li>
-
-</th:block>
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/prototyping/image-solid.svg b/incubator/viewers/thymeflux/viewer/src/main/resources/templates/prototyping/image-solid.svg
deleted file mode 100644
index 1b5822d5c0..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/prototyping/image-solid.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2 [...]
\ No newline at end of file
diff --git a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/root.html b/incubator/viewers/thymeflux/viewer/src/main/resources/templates/root.html
deleted file mode 100644
index 974a4d2ab1..0000000000
--- a/incubator/viewers/thymeflux/viewer/src/main/resources/templates/root.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!DOCTYPE html>
-<!--/* Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License. */-->
-<html lang="en" 
-	xmlns:th="http://www.thymeleaf.org"  
-	xmlns:hx="http://www.w3.org/1999/xhtml">
-	
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
-	<!--/* PROTOTYPING --> 
-  	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous"/>
-    <link href="../static/css/causeway-thymeflux.css" rel="stylesheet" />
-	<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous" defer></script>
-	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.min.js" integrity="sha384-cuYeSxntonz0PPNlHhBs68uyIAVpIIOZZ5JqeqvYYIcEL727kskC66kF92t6Xl2V" crossorigin="anonymous" defer></script>
-	<!--*/-->
-	
-	<!--/*/
-    <link rel="icon" type="image/x-icon" href="/images/favicon.ico">
-    <link th:rel="stylesheet" th:href="@{/webjars/bootstrap/5.2.3/css/bootstrap.min.css}" />
-    <link th:rel="stylesheet" th:href="@{/css/causeway-thymeflux.css}">
-    <script th:src="@{/webjars/popper.js/2.9.3/umd/popper.min.js}" defer></script>
-    <script th:src="@{/webjars/bootstrap/5.2.3/js/bootstrap.bundle.min.js}" defer></script>
-    <script th:src="@{/webjars/htmx.org/1.8.6/dist/htmx.min.js}" defer></script>
-	/*/-->
-    
-</head>
-
-
-<body>
-
-<nav class="navbar navbar-expand-md sticky-top bg-light">
-  <div class="container-fluid">
-
-	<!-- BRANDING -->
-
-    <a th:with="branding = ${headerUiModel.branding()}"
-    	class="navbar-brand"  
-    	href="#">
-    	<img class="navbar-brand-logo" alt="Brand"
-			 src="prototyping/image-solid.svg" height="48px"/>
-    	[[${branding.name.orElse("")}]]
-    </a>
-    
-    <!-- NAVBAR COLLAPSE TOGGLER -->
-    
-    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent">
-      <span class="navbar-toggler-icon"></span>
-    </button>
-    
-    <!-- NAVBAR -->
-    
-    <div class="collapse navbar-collapse mr-auto" id="navbarSupportedContent">
-    
-      <!--  PRIMARY SECTION -->
-	  
-	  <ul th:insert="nav/topNavSection :: topNavSection(${headerUiModel.navbar().primary()})" 
-             class="navbar-nav me-auto mb-2 mb-lg-0">
-	  </ul>
-	  
-	  <!--  SECONDARY AND TERTIARY SECTION -->
-	  
-	  <ul th:insert="nav/topNavSection :: topNavSection(${headerUiModel.navbar().secondary()})" 
-             class="navbar-nav">
-	  </ul>
-	  <ul th:insert="nav/topNavSection :: topNavSection(${headerUiModel.navbar().tertiary()})" 
-             class="navbar-nav">
-	  </ul>
-	  
-	</div>
-
-</nav>
-
-<div class="container">
-
-    <div class="row">
-        <div id="title">
-            <h1>Spring WebFlux + Thymeleaf</h1>
-        </div>
-        
-        <table class="table table-striped">
-            <thead>
-            <tr>
-                <th width="25%">Model</th>
-                <th>Data</th>
-            </tr>
-            </thead>
-            <tbody>
-            
-            <tr class="result">
-                <td>Branding Name</td>
-                <td>[[${headerUiModel.branding.name}]]</td>
-            </tr>
-            <tr class="result">
-                <td>Branding Logo</td>
-                <td>[[${headerUiModel.branding.logoHref}]]</td>
-            </tr>
-            
-            <th:block th:with="topNavSection=${headerUiModel.navbar().primary()}">
-            <tr class="result" th:each="topLevelEntry : ${topNavSection.topLevelEntries()}">
-                <td>[[${topLevelEntry.name}]]</td>
-                <td>[[${topLevelEntry.subEntries}]]</td>
-            </tr>
-            </th:block>
-            
-            <th:block th:with="topNavSection=${headerUiModel.navbar().secondary()}">
-            <tr class="result" th:each="topLevelEntry : ${topNavSection.topLevelEntries()}">
-                <td>[[${topLevelEntry.name}]]</td>
-                <td>[[${topLevelEntry.subEntries}]]</td>
-            </tr>
-            </th:block>
-            
-            <th:block th:with="topNavSection=${headerUiModel.navbar().tertiary()}">
-            <tr class="result" th:each="topLevelEntry : ${topNavSection.topLevelEntries()}">
-                <td>[[${topLevelEntry.name}]]</td>
-                <td>[[${topLevelEntry.subEntries}]]</td>
-            </tr>
-            </th:block>
-            
-            <tr class="result">
-                <td>User</td>
-                <td>[[${headerUiModel.userProfile.userMemento.name}]]</td>
-            </tr>
-            
-            </tbody>
-        </table>
-        
-        <label>[[${helloMsg}]]</label>
-        
-        
-        
-        
-    </div>
-
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/.gitignore b/incubator/viewers/vaadin/.gitignore
deleted file mode 100644
index 9e0884e06a..0000000000
--- a/incubator/viewers/vaadin/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-# Browser drivers for local integration tests
-drivers/
-# Error screenshots generated by TestBench for failed integration tests
-error-screenshots/
-# More Node stuff as introduced with Vaadin
-node/
-generated
-package-lock.json
-package.json
-webpack.config.js
-webpack.generated.js
-vite.generated.ts
-pnpm*
-
-
diff --git a/incubator/viewers/vaadin/adoc/antora.yml b/incubator/viewers/vaadin/adoc/antora.yml
deleted file mode 100644
index bc87cdc73c..0000000000
--- a/incubator/viewers/vaadin/adoc/antora.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing,
-#  software distributed under the License is distributed on an
-#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-#  KIND, either express or implied.  See the License for the
-#  specific language governing permissions and limitations
-#  under the License.
-
-name: incubator
-version: latest
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc
deleted file mode 100644
index b97852230f..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-include::incubator:ROOT:partial$component-nav.adoc[]
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc
deleted file mode 100644
index 505ac922d7..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/pages/about.adoc
+++ /dev/null
@@ -1,6 +0,0 @@
-= Vaadin Viewer (Incubating)
-
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-WARNING: TODO:  v2.0
-
diff --git a/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc b/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc
deleted file mode 100644
index a436056690..0000000000
--- a/incubator/viewers/vaadin/adoc/modules/vaadin/partials/module-nav.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-
-* xref:incubator:vaadin:about.adoc[Vaadin]
-
diff --git a/incubator/viewers/vaadin/model/pom.xml b/incubator/viewers/vaadin/model/pom.xml
deleted file mode 100644
index c9e87b155d..0000000000
--- a/incubator/viewers/vaadin/model/pom.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-vaadin</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-vaadin-model</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin (Model)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin.model</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin/model</git-plugin.propertiesDir>
-	</properties>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-webapp</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-			<artifactId>causeway-viewer-commons-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>com.vaadin</groupId>
-			<artifactId>vaadin</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger</groupId>
-					<artifactId>swagger-compat-spec-parser</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.parser.v3</groupId>
-					<artifactId>swagger-parser-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.parser.v3</groupId>
-					<artifactId>swagger-parser-v3</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger</groupId>
-					<artifactId>swagger-parser</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>com.github.fge</groupId>
-					<artifactId>jackson-coreutils</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger</groupId>
-			<artifactId>swagger-compat-spec-parser</artifactId>
-			<version>1.0.67</version>
-			<exclusions>
-				<exclusion>
-					<groupId>com.github.fge</groupId>
-					<artifactId>jackson-coreutils</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.parser.v3</groupId>
-			<artifactId>swagger-parser-v3</artifactId>
-			<version>2.1.15</version>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-				<exclusion>
-				    <groupId>io.swagger.core.v3</groupId>
-				    <artifactId>swagger-core</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.core.v3</groupId>
-			<artifactId>swagger-core</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.parser.v3</groupId>
-			<artifactId>swagger-parser-core</artifactId>
-			<version>2.1.15</version>
-			<exclusions>
-				<exclusion>
-					<groupId>io.swagger.core.v3</groupId>
-					<artifactId>swagger-models</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger</groupId>
-			<artifactId>swagger-parser</artifactId>
-			<version>1.0.67</version>
-		</dependency>
-		<dependency>
-			<groupId>com.github.fge</groupId>
-			<artifactId>jackson-coreutils</artifactId>
-			<version>1.8</version>
-		</dependency>
-		<dependency>
-			<groupId>io.swagger.core.v3</groupId>
-			<artifactId>swagger-models</artifactId>
-			<version>${swagger-core.version}</version>
-		</dependency>
-
-		<!-- TEST DEPENDENCIES -->
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-internaltestsupport</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java
deleted file mode 100644
index fc946eb62f..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/CausewayModuleIncViewerVaadinModel.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.core.webapp.CausewayModuleCoreWebapp;
-
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleCoreWebapp.class,
-})
-public class CausewayModuleIncViewerVaadinModel {
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
deleted file mode 100644
index 02926be91c..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelFactoryVaa.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.action;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-
-public class ActionUiModelFactoryVaa {
-
-    public ActionUiModelVaa newActionUiModel(ManagedAction managedAction) {
-        return ActionUiModelVaa.of(managedAction);
-    }
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
deleted file mode 100644
index 848fc73a00..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/action/ActionUiModelVaa.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.action;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.html.Label;
-
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.incubator.viewer.vaadin.model.decorator.Decorators;
-import org.apache.causeway.viewer.commons.model.action.UiAction;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@RequiredArgsConstructor(staticName = "of")
-public class ActionUiModelVaa implements UiAction<Component, Component> {
-
-    @Getter
-    private final ManagedAction managedAction;
-
-    @Override
-    public ObjectAction getAction() {
-        return managedAction.getMetaModel();
-    }
-
-    @Override
-    public Component createMenuUiComponent() {
-        return createRegularUiComponent();
-    }
-
-    @Override
-    public Component createRegularUiComponent() {
-        val uiLabel = new Label(getManagedAction().getFriendlyName());
-
-        return Decorators.getIcon().decorate(uiLabel, getFontAwesomeUiModel());
-    }
-
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java
deleted file mode 100644
index e16f771350..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/MemberInvocationHandler.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.context;
-
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public interface MemberInvocationHandler<T> {
-
-    T handle(ManagedObject object);
-    T handle(ManagedAction managedAction, Can<ManagedObject> params, ManagedObject actionResult);
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java
deleted file mode 100644
index f93176623d..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/context/UiContextVaa.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.context;
-
-import java.util.function.Consumer;
-
-import com.vaadin.flow.component.Component;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-
-public interface UiContextVaa {
-
-    InteractionService getInteractionService();
-
-    void setNewPageHandler(Consumer<Component> onNewPage);
-    void setPageFactory(MemberInvocationHandler<Component> pageFactory);
-
-    void route(ManagedObject object);
-    void route(ManagedAction managedAction, Can<ManagedObject> params, ManagedObject actionResult);
-//    void route(Supplier<ManagedObject> objectSupplier);
-
-    // -- DECORATORS
-
-//    IconDecorator<Labeled, Labeled> getIconDecoratorForLabeled();
-//    IconDecorator<MenuItem, MenuItem> getIconDecoratorForMenuItem();
-//
-//    DisablingDecorator<Button> getDisablingDecoratorForButton();
-//    DisablingDecorator<Node> getDisablingDecoratorForFormField();
-//
-//    PrototypingDecorator<Button, Node> getPrototypingDecoratorForButton();
-//    PrototypingDecorator<Node, Node> getPrototypingDecoratorForFormField();
-
-
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java
deleted file mode 100644
index 5e40dce30d..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/decorator/Decorators.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.decorator;
-
-import java.net.URL;
-import java.util.Optional;
-
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.html.Image;
-import com.vaadin.flow.component.html.Label;
-import com.vaadin.flow.component.html.Span;
-import com.vaadin.flow.component.icon.VaadinIcon;
-import com.vaadin.flow.component.orderedlayout.FlexComponent.Alignment;
-import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
-
-import org.apache.causeway.applib.layout.component.CssClassFaPosition;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.viewer.commons.applib.services.userprof.UserProfileUiModel;
-import org.apache.causeway.viewer.commons.applib.services.userprof.UserProfileUiService;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.IconDecorator.FontAwesomeDecorationModel;
-import org.apache.causeway.viewer.commons.model.decorators.TooltipDecorator;
-import org.apache.causeway.viewer.commons.model.decorators.TooltipDecorator.TooltipDecorationModel;
-
-import lombok.Getter;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-import lombok.extern.log4j.Log4j2;
-
-/**
- *
- */
-@UtilityClass
-@Log4j2
-public class Decorators {
-
-    @Getter(lazy = true) private final static Tooltip tooltip = new Tooltip();
-    @Getter(lazy = true) private final static Icon icon = new Icon();
-    @Getter(lazy = true) private final static Menu menu = new Menu();
-    @Getter(lazy = true) private final static User user = new User();
-
-    // -- DECORATOR CLASSES
-
-    public final static class Tooltip implements TooltipDecorator<Component> {
-
-        @Override
-        public void decorate(final Component uiComponent, final TooltipDecorationModel tooltipDecorationModel) {
-            log.warn("not implemented yet");
-        }
-
-    }
-
-    public final static class Icon implements IconDecorator<Component, Component> {
-
-        @Override
-        public Component decorate(
-                final Component uiComponent,
-                final Optional<FontAwesomeDecorationModel> fontAwesomeDecorationModel) {
-
-            val decoratedUiComponent = fontAwesomeDecorationModel
-            .map(fontAwesome->{
-
-                val faIcon = new Span();
-
-                fontAwesome.streamCssClasses()
-                .forEach(faIcon::addClassName);
-
-                return CssClassFaPosition.isLeftOrUnspecified(fontAwesome.getPosition())
-                        ? new HorizontalLayout(faIcon, uiComponent)
-                        : new HorizontalLayout(uiComponent, faIcon);
-
-            })
-            .orElseGet(()->{
-
-                // TODO add spacer, to account for missing fa icon?
-                // but then where to add, left or right?
-
-                return new HorizontalLayout(uiComponent);
-            });
-
-            return (HorizontalLayout)decoratedUiComponent;
-
-        }
-
-    }
-
-    public final static class Menu {
-
-        public Component decorateTopLevel(
-                final Label label) {
-            val icon = getTopLevelMenuIcon();
-            val layout =  new HorizontalLayout(label, icon);
-            layout.setVerticalComponentAlignment(Alignment.END, icon);
-            return layout;
-        }
-
-        private Component getTopLevelMenuIcon() {
-            val menuIcon = new com.vaadin.flow.component.icon.Icon(VaadinIcon.CARET_DOWN);
-            menuIcon.setSize("1em");
-            menuIcon.getElement().getStyle().set("margin-left", "2px");
-            return menuIcon;
-        }
-
-    }
-
-    public final static class User {
-
-        public Component decorateWithAvatar(
-                final Label label,
-                final MetaModelContext commonContext) {
-
-            val profileIfAny = commonContext.lookupServiceElseFail(UserProfileUiService.class)
-                    .userProfile();
-            return decorateWithAvatar(label, Optional.ofNullable(profileIfAny));
-        }
-
-        public Component decorateWithAvatar(
-                final Label label,
-                final Optional<UserProfileUiModel> userProfileUiModel) {
-
-            val decoratedUiComponent = userProfileUiModel
-            .map(userProfile->{
-
-                label.setText(userProfile.getUserProfileName());
-
-                val userIcon = userProfile.avatarUrl()
-                .map(this::getUserIcon)
-                .orElseGet(this::getFallbackUserIcon);
-
-                return (Component) new HorizontalLayout(userIcon, label);
-
-            })
-            .orElseGet(()->{
-                label.setText("<anonymous>");
-                return label;
-            });
-
-            return (Component) decoratedUiComponent;
-
-        }
-
-        private Component getUserIcon(final URL avatarUrl) {
-            return new Image(avatarUrl.toExternalForm(), "avatar");
-        }
-
-        private Component getFallbackUserIcon() {
-            val userIcon = new com.vaadin.flow.component.icon.Icon(VaadinIcon.USER);
-            userIcon.setSize("1em");
-            return userIcon;
-        }
-
-
-
-    }
-
-
-
-
-}
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java
deleted file mode 100644
index 9f72b955f5..0000000000
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/causeway/incubator/viewer/vaadin/model/util/Vaa.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.model.util;
-
-import com.vaadin.flow.component.ClickEvent;
-import com.vaadin.flow.component.Component;
-import com.vaadin.flow.component.ComponentEventListener;
-import com.vaadin.flow.component.ComponentUtil;
-import com.vaadin.flow.component.HasComponents;
-import com.vaadin.flow.component.button.Button;
-import com.vaadin.flow.component.button.ButtonVariant;
-import com.vaadin.flow.component.html.Label;
-import com.vaadin.flow.component.tabs.Tab;
-import com.vaadin.flow.component.tabs.Tabs;
-
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-/**
- * Vaadin common idioms, in alphabetical order.
- */
-@UtilityClass
-public class Vaa {
-
-    // -- COMPONENT FACTORIES
-
-    public <T extends Component> T add(final HasComponents container, final T component) {
-        container.add(component);
-        return component;
-    }
-
-    // specific overload for tabs
-    public Tab add(final Tabs container, final Tab component) {
-        container.add(component);
-        return component;
-    }
-
-    public Button newButton(final String label) {
-        val component = new Button(label);
-        component.getStyle().set("margin-left", "0.5em");
-        component.addThemeVariants(ButtonVariant.LUMO_SMALL);
-        return component;
-    }
-
-    public Button newButton(final HasComponents container, final String label, final ComponentEventListener<ClickEvent<Button>> eventHandler) {
-        val component = newButton(label);
-        container.add(component);
-        component.addClickListener(eventHandler);
-        return component;
-    }
-
-    public Label newLabel(final HasComponents container, final String label) {
-        val component = new Label(label);
-        container.add(component);
-        return component;
-    }
-
-    // -- COMPONENT EVENTS
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public <T extends Component> T setOnClick(
-            final T component,
-            final Runnable onClick) {
-        ComponentUtil.addListener(component, ClickEvent.class,
-                (ComponentEventListener) e->onClick.run());
-        return component;
-    }
-
-
-
-}
diff --git a/incubator/viewers/vaadin/pom.xml b/incubator/viewers/vaadin/pom.xml
deleted file mode 100644
index 309b9ebd86..0000000000
--- a/incubator/viewers/vaadin/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
-	license agreements. See the NOTICE file distributed with this work for additional
-	information regarding copyright ownership. The ASF licenses this file to
-	you under the Apache License, Version 2.0 (the "License"); you may not use
-	this file except in compliance with the License. You may obtain a copy of
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
-	by applicable law or agreed to in writing, software distributed under the
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
-	OF ANY KIND, either express or implied. See the License for the specific
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator</groupId>
-		<artifactId>causeway-incubator</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-		<relativePath>../../pom.xml</relativePath>
-	</parent>
-
-	<groupId>org.apache.causeway.incubator.viewer</groupId>
-	<artifactId>causeway-viewer-vaadin</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin</name>
-	<description>
-		Initial sketches
-	</description>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin</git-plugin.propertiesDir>
-		<enforcer.skip>true</enforcer.skip>
-	</properties>
-
-	<packaging>pom</packaging>
-
-	<dependencyManagement>
-		<dependencies>
-
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-model</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-ui</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-			<dependency>
-				<groupId>org.apache.causeway.incubator.viewer</groupId>
-				<artifactId>causeway-viewer-vaadin-viewer</artifactId>
-				<version>3.0.0-SNAPSHOT</version>
-			</dependency>
-
-		</dependencies>
-	</dependencyManagement>
-
-	<modules>
-		<module>model</module>
-		<module>viewer</module>
-		<module>ui</module>
-	</modules>
-
-</project>
diff --git a/incubator/viewers/vaadin/ui/frontend/index.html b/incubator/viewers/vaadin/ui/frontend/index.html
deleted file mode 100644
index a5cdd4018a..0000000000
--- a/incubator/viewers/vaadin/ui/frontend/index.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<!--
-This file is auto-generated by Vaadin.
--->
-
-<html lang="en">
-<head>
-  <meta charset="UTF-8" />
-  <meta name="viewport" content="width=device-width, initial-scale=1" />
-  <style>
-    body, #outlet {
-      height: 100vh;
-      width: 100%;
-      margin: 0;
-    }
-  </style>
-  <!-- index.ts is included here automatically (either by the dev server or during the build) -->
-</head>
-<body>
-  <!-- This outlet div is where the views are rendered -->
-  <div id="outlet"></div>
-</body>
-</html>
diff --git a/incubator/viewers/vaadin/ui/pom.xml b/incubator/viewers/vaadin/ui/pom.xml
deleted file mode 100644
index 78cbbe6154..0000000000
--- a/incubator/viewers/vaadin/ui/pom.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
-	language governing permissions and limitations under the License. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.apache.causeway.incubator.viewer</groupId>
-		<artifactId>causeway-viewer-vaadin</artifactId>
-		<version>3.0.0-SNAPSHOT</version>
-	</parent>
-
-	<artifactId>causeway-viewer-vaadin-ui</artifactId>
-	<name>Apache Causeway Inc - Viewer Vaadin (UI Components)</name>
-
-	<properties>
-		<jar-plugin.automaticModuleName>org.apache.causeway.incubator.viewer.vaadin.ui</jar-plugin.automaticModuleName>
-		<git-plugin.propertiesDir>org/apache/causeway/incubator/viewer/vaadin/ui</git-plugin.propertiesDir>
-		<enforcer.skip>true</enforcer.skip>
-	</properties>
-
-	<!-- IN CASE WE WANT TO USE VAADIN ADDONS -->
-	<!-- <repositories> -->
-	<!-- <repository> -->
-	<!-- <id>vaadin-addons</id> -->
-	<!-- <url>https://maven.vaadin.com/vaadin-addons</url> -->
-	<!-- </repository> -->
-	<!-- </repositories> -->
-
-	<build>
-		<plugins>
-
-			<plugin>
-				<groupId>com.github.eirslett</groupId>
-				<artifactId>frontend-maven-plugin</artifactId>
-				<version>1.12.1</version>
-				<executions>
-
-					<execution>
-						<id>install node and npm</id>
-						<goals>
-							<goal>install-node-and-npm</goal>
-						</goals>
-						<configuration>
-							<!-- See https://nodejs.org/en/download/ for latest node and npm (lts) 
-								versions -->
-							<nodeVersion>${node.version}</nodeVersion>
-							<npmVersion>${npm.version}</npmVersion>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-
-			<plugin>
-				<groupId>com.vaadin</groupId>
-				<artifactId>vaadin-maven-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>frontend</id>
-						<phase>compile</phase>
-						<goals>
-							<goal>prepare-frontend</goal>
-							<goal>build-frontend</goal>
-						</goals>
-						<configuration>
-							<productionMode>true</productionMode>
-							<!-- does not work due to realative path ../../ resolving issues;
-							instead we copy the frontend folder with the maven-resources-plugin below  
-						    <frontendDirectory>${project.basedir}/src/main/resources/static/frontend</frontendDirectory>
-						    -->
-    					</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			
-			<plugin>
-			    <artifactId>maven-resources-plugin</artifactId>
-			    <executions>
-			        <execution>
-			            <id>copy-resource-one</id>
-			            <phase>validate</phase>
-			            <goals>
-			                <goal>copy-resources</goal>
-			            </goals>
-			            <configuration>
-			                <outputDirectory>${project.basedir}/src/main/resources/static/frontend</outputDirectory>
-			                <resources>
-			                    <resource>
-			                        <directory>frontend</directory>
-			                        <filtering>true</filtering>
-			                    </resource>
-			                </resources>
-			            </configuration>
-			        </execution>
-			    </executions>
-			</plugin>
-			
-		</plugins>
-	</build>
-
-	<dependencies>
-
-		<dependency>
-			<groupId>org.apache.causeway.incubator.viewer</groupId>
-			<artifactId>causeway-viewer-vaadin-model</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.apache.causeway.core</groupId>
-			<artifactId>causeway-core-runtimeservices</artifactId>
-		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-commons-services</artifactId>
-        </dependency>
-        
-        <dependency>
-			<groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-commons-prism</artifactId>
-        </dependency>
-
-		<dependency>
-			<groupId>com.vaadin</groupId>
-			<artifactId>vaadin-spring</artifactId>
-			<exclusions>
-				<exclusion>
-					<!-- convergence issue with wicket 1.3.3 vs 1.4 -->
-					<groupId>commons-fileupload</groupId>
-					<artifactId>commons-fileupload</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>1.5</version>
-		</dependency>
-
-		<!-- VAADIN ADDONS -->
-
-		<!-- <dependency> -->
-		<!-- <groupId>com.github.appreciated</groupId> -->
-		<!-- <artifactId>vaadin-css-grid</artifactId> -->
-		<!-- <version>2.0.0.beta3</version> -->
-		<!-- <version>0.8.4</version> -->
-		<!-- </dependency> -->
-
-	</dependencies>
-
-</project>
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java
deleted file mode 100644
index 028adf0941..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/CausewayModuleIncViewerVaadinUi.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.ui;
-
-import com.vaadin.flow.spring.annotation.EnableVaadin;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-import org.apache.causeway.incubator.viewer.vaadin.model.CausewayModuleIncViewerVaadinModel;
-import org.apache.causeway.incubator.viewer.vaadin.ui.auth.LogoutHandlerVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.auth.VaadinAuthenticationHandler;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.blob.BlobFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.clob.ClobFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.markup.MarkupFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.other.FallbackFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.temporal.TemporalFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.text.TextFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.components.text.uuid.UuidFieldFactory;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.main.UiActionHandlerVaa;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.main.UiContextVaaDefault;
-import org.apache.causeway.viewer.commons.services.CausewayModuleViewerCommonsServices;
-
-
-@Configuration
-@Import({
-        // Modules
-        CausewayModuleViewerCommonsServices.class,
-        CausewayModuleIncViewerVaadinModel.class,
-
-        // @Service's
-        VaadinAuthenticationHandler.class,
-        LogoutHandlerVaa.class,
-        UiComponentFactoryVaa.class,
-        UiActionHandlerVaa.class,
-        UiContextVaaDefault.class,
-
-        // Component Factories
-        BlobFieldFactory.class,
-        ClobFieldFactory.class,
-        MarkupFieldFactory.class,
-        TemporalFieldFactory.class,
-        TextFieldFactory.class,
-        UuidFieldFactory.class,
-        // last in chain
-        FallbackFieldFactory.class,
-
-
-})
-@EnableVaadin("org.apache.causeway.incubator.viewer.vaadin.ui") // scan for vaadin annotations
-public class CausewayModuleIncViewerVaadinUi {
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java
deleted file mode 100644
index 0440953499..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/AuthSessionStoreUtil.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.ui.auth;
-
-import java.util.Optional;
-
-import jakarta.servlet.http.HttpSession;
-
-import com.vaadin.flow.server.VaadinSession;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionContext;
-
-import lombok.NonNull;
-import lombok.experimental.UtilityClass;
-
-/**
- * @implNote Stores authentication information (Authentication) on the HttpSession that is associated
- * with the current thread's VaadinSession or directly on the provided HttpSession if given as argument.
- *
- * @since Mar 15, 2020
- *
- */
-@UtilityClass
-public class AuthSessionStoreUtil {
-
-    public static void put(
-            final @NonNull HttpSession httpSession,
-            final @Nullable InteractionContext auth) {
-        httpSession.setAttribute(InteractionContext.class.getName(), auth);
-    }
-
-    public static Optional<InteractionContext> get(
-            final @NonNull HttpSession httpSession) {
-        return Optional.ofNullable(
-                (InteractionContext)httpSession
-                .getAttribute(InteractionContext.class.getName()));
-    }
-
-    /** when within a VaadinSession */
-    public static void put(
-            final @Nullable InteractionContext auth) {
-
-        Optional.ofNullable(VaadinSession.getCurrent())
-        .map(VaadinSession::getSession)
-        .ifPresent(sessionVaa->{
-            sessionVaa.setAttribute(InteractionContext.class.getName(), auth);
-        });
-
-    }
-
-    /** when within a VaadinSession */
-    public static Optional<InteractionContext> get() {
-        return Optional.ofNullable(
-                (InteractionContext)VaadinSession.getCurrent().getSession()
-                .getAttribute(InteractionContext.class.getName()));
-    }
-
-    /** when within a VaadinSession */
-    public static void clear() {
-        put(null);
-    }
-
-}
\ No newline at end of file
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java
deleted file mode 100644
index fc2c92ac3e..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/LogoutHandlerVaa.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.ui.auth;
-
-import jakarta.inject.Inject;
-
-import com.vaadin.flow.server.VaadinRequest;
-import com.vaadin.flow.server.VaadinSession;
-
-import org.springframework.stereotype.Service;
-
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.security.authentication.logout.LogoutHandler;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-@Service
-@Log4j2
-public class LogoutHandlerVaa implements LogoutHandler {
-
-    @Inject private MetaModelContext metaModelContext;
-
-    @Override
-    public void logout() {
-
-        if(VaadinRequest.getCurrent()==null) {
-            return; // logout is only permissive if within the context of a Vaadin request-cycle
-        }
-
-        val sessionVaa = VaadinSession.getCurrent();
-        if(sessionVaa==null) {
-            return; // ignore if there is no current session
-        }
-
-        AuthSessionStoreUtil.get()
-        .ifPresent(auth->{
-            log.info("logging out {}", auth.getUser().getName());
-            // logout AuthenticationManager
-            metaModelContext.getAuthenticationManager().closeSession(auth);
-            AuthSessionStoreUtil.clear();
-        });
-
-        sessionVaa.close();
-
-    }
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
deleted file mode 100644
index cd14fdccee..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.ui.auth;
-
-import java.util.concurrent.Callable;
-
-import jakarta.inject.Inject;
-
-import com.vaadin.flow.component.page.AppShellConfigurator;
-import com.vaadin.flow.router.BeforeEnterEvent;
-import com.vaadin.flow.router.BeforeLeaveEvent;
-import com.vaadin.flow.server.PWA;
-import com.vaadin.flow.server.ServiceInitEvent;
-import com.vaadin.flow.server.VaadinServiceInitListener;
-import com.vaadin.flow.theme.Theme;
-import com.vaadin.flow.theme.lumo.Lumo;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.services.iactnlayer.InteractionService;
-import org.apache.causeway.commons.functional.ThrowingRunnable;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.security.authentication.AuthenticationRequest;
-import org.apache.causeway.incubator.viewer.vaadin.ui.pages.login.VaadinLoginView;
-
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * Hooks into Vaadin's routing, such that unauthorized access is redirected to the login view.
- * @since Mar 9, 2020
- *
- */
-@Component
-@PWA(name = "Example Project", shortName = "Example Project")
-//@Theme(themeClass = Material.class, variant = Material.DARK)
-@Theme(themeClass = Lumo.class, variant = Lumo.LIGHT)
-@Log4j2
-public class VaadinAuthenticationHandler
-implements
-    AppShellConfigurator,
-    VaadinServiceInitListener {
-
-    private static final long serialVersionUID = 1L;
-
-    @Inject private transient InteractionService interactionService;
-    @Inject private transient MetaModelContext metaModelContext;
-
-    @Override
-    public void serviceInit(ServiceInitEvent event) {
-
-        log.debug("service init event {}", event.getSource());
-
-        event.getSource().addUIInitListener(uiEvent -> {
-            uiEvent.getUI().addBeforeEnterListener(this::beforeEnter);
-            uiEvent.getUI().addBeforeLeaveListener(this::beforeLeave);
-        });
-    }
-
-    /**
-     * @param authenticationRequest
-     * @return whether login was successful
-     */
-    public boolean loginToSession(AuthenticationRequest authenticationRequest) {
-        val authentication = metaModelContext.getAuthenticationManager()
-                .authenticate(authenticationRequest);
-
-        if(authentication!=null) {
-            log.debug("logging in {}", authentication.getUser().getName());
-            AuthSessionStoreUtil.put(authentication);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Executes a piece of code in a new (possibly nested) CausewayInteraction, using the
-     * current Authentication, as, at this point, should be stored in the
-     * current VaadinSession.
-     *
-     * @param callable - the piece of code to run
-     *
-     */
-    public <R> R callAuthenticated(Callable<R> callable) {
-        return AuthSessionStoreUtil.get()
-                .map(authentication->interactionService.call(authentication, callable))
-                .orElse(null); // TODO redirect to login
-    }
-
-    /**
-     * Variant of {@link #callAuthenticated(Callable)} that takes a runnable.
-     * @param runnable
-     */
-    public void runAuthenticated(ThrowingRunnable runnable) {
-        final Callable<Void> callable = ()->{runnable.run(); return null;};
-        callAuthenticated(callable);
-    }
-
-
-    // -- HELPER
-
-    private void beforeEnter(BeforeEnterEvent event) {
-        val targetView = event.getNavigationTarget();
-        log.debug("detected a routing event to {}", targetView);
-
-        val authentication = AuthSessionStoreUtil.get().orElse(null);
-        if(authentication!=null) {
-            interactionService.openInteraction(authentication);
-            return; // access granted
-        }
-        // otherwise redirect to login page
-        if(!VaadinLoginView.class.equals(targetView)) {
-            event.rerouteTo(VaadinLoginView.class);
-        }
-    }
-
-    private void beforeLeave(BeforeLeaveEvent event) {
-        //causewayInteractionFactory.closeSessionStack();
-    }
-
-
-
-
-
-}
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java
deleted file mode 100644
index a7baea24c6..0000000000
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/causeway/incubator/viewer/vaadin/ui/binding/BindingsVaa.java
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.incubator.viewer.vaadin.ui.binding;
-
-import java.util.function.UnaryOperator;
-
-import com.vaadin.flow.component.HasValidation;
-import com.vaadin.flow.component.HasValue;
-import com.vaadin.flow.data.binder.Binder;
-import com.vaadin.flow.data.binder.Binder.BindingBuilder;
-import com.vaadin.flow.data.binder.Setter;
-import com.vaadin.flow.data.converter.Converter;
-import com.vaadin.flow.function.ValueProvider;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.commons.binding.Bindable;
-import org.apache.causeway.commons.binding.Observable;
-import org.apache.causeway.commons.internal.base._Casts;
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedFeature;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedParameter;
-import org.apache.causeway.core.metamodel.interactions.managed.ManagedProperty;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class BindingsVaa {
-
-    // -- UNIDIRECTIONAL
-
-    /**
-     * Binds the uiField's (rendered) value to an {@link Observable}.
-     * @param <V> field/model/presentation value type
-     * @param uiField
-     * @param value - observable (backend)
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <V> void bindValue(
-            final @NonNull HasValue<?, V> uiField,
-            final @NonNull Observable<ManagedObject> value,
-            @Nullable UnaryOperator<BindingBuilder<Observable<ManagedObject>, V>> customizer) {
-
-
-        uiField.setReadOnly(true);
-        val binder = new Binder<Observable<ManagedObject>>();
-        val internalBinding = InternalUnidirBinding.<V>of();
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(binder.forField(uiField))
-        .bind(
-                internalBinding,
-                null);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        //need to check whether this is possible with Vaadin
-        value.addListener((e, oldValue, newValue)->{
-            uiField.setValue(_Casts.<V>uncheckedCast(newValue.getPojo()));
-        });
-
-    }
-
-    /**
-     * Binds the uiField's (rendered) value to an {@link Observable}.
-     * @param <P> field/presentation value type
-     * @param <M> model value type
-     * @param uiField
-     * @param value - observable (backend)
-     * @param converter - converts between model and presentation
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <P, M> void bindValue(
-            final @NonNull HasValue<?, P> uiField,
-            final @NonNull Observable<ManagedObject> value,
-            final @NonNull Converter<P, M> converter,
-            @Nullable UnaryOperator<BindingBuilder<Observable<ManagedObject>, M>> customizer) {
-
-        uiField.setReadOnly(true);
-        val binder = new Binder<Observable<ManagedObject>>();
-        val internalBinding = InternalUnidirBinding.<M>of();
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(
-                binder.forField(uiField)
-                .withConverter(converter))
-        .bind(
-                internalBinding,
-                null);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        //need to check whether this is possible with Vaadin
-        value.addListener((e, oldValue, newValue)->{
-            val newModelValue = _Casts.<M>uncheckedCast(newValue.getPojo());
-            P newFieldValue = converter.convertToPresentation(newModelValue, null);
-            uiField.setValue(newFieldValue);
-        });
-
-    }
-
-    // -- BIDIRECTIONAL
-
-    /**
-     * Binds the uiField's (rendered) value to a {@link Bindable}.
-     * @param <V> field/model value type
-     * @param uiField
-     * @param value
-     * @param valueSpec
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <V> void bindValueBidirectional(
-            final @NonNull HasValue<?, V> uiField,
-            final @NonNull Bindable<ManagedObject> value,
-            final @NonNull ObjectSpecification valueSpec,
-            @Nullable UnaryOperator<BindingBuilder<Bindable<ManagedObject>, V>> customizer) {
-
-        uiField.setReadOnly(false);
-        val binder = new Binder<Bindable<ManagedObject>>();
-        val internalBinding = InternalBidirBinding.<V>of(valueSpec);
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(binder.forField(uiField))
-        .bind(
-                internalBinding::apply,
-                internalBinding::accept);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        value.addListener((e, oldValue, newValue)->{
-            uiField.setValue(_Casts.uncheckedCast(newValue.getPojo()));
-        });
-
-    }
-
-    /**
-     * Binds the uiField's (rendered) value to a {@link Bindable}.
-     * @param <P> field/presentation value type
-     * @param <M> model value type
-     * @param uiField
-     * @param value
-     * @param valueSpec
-     * @param converter - converts between model and presentation
-     * @param customizer - to customize the binding builder (ignored if null)
-     */
-    public static <P, M> void bindValueBidirectional(
-            final @NonNull HasValue<?, P> uiField,
-            final @NonNull Bindable<ManagedObject> value,
-            final @NonNull ObjectSpecification valueSpec,
-            final @NonNull Converter<P, M> converter,
-            @Nullable UnaryOperator<BindingBuilder<Bindable<ManagedObject>, M>> customizer) {
-
-        uiField.setReadOnly(false);
-        val binder = new Binder<Bindable<ManagedObject>>();
-        val internalBinding = InternalBidirBinding.<M>of(valueSpec);
-
-        if(customizer==null) {
-            customizer = UnaryOperator.identity();
-        }
-
-        customizer.apply(
-                binder.forField(uiField)
-                .withConverter(converter))
-        .bind(
-                internalBinding::apply,
-                internalBinding::accept);
-
-        binder.setBean(value);
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        value.addListener((e, oldValue, newValue)->{
-            val newModelValue = _Casts.<M>uncheckedCast(newValue.getPojo());
-            P newFieldValue = converter.convertToPresentation(newModelValue, null);
-            uiField.setValue(newFieldValue);
-        });
-
-    }
-
-    // -- VALIDATION
-
-    /**
-     * Binds the uiField's (rendered) validation feedback to an {@link Observable}.
-     * @param uiField
-     * @param validationFeedbackMessage
-     */
-    public static void bindValidationFeedback(
-            final @NonNull HasValidation uiField,
-            final @NonNull Observable<String> validationFeedbackMessage) {
-
-        //TODO supposed to account for changes originating from backend side
-        // not sure whether this works
-        validationFeedbackMessage.addListener((e, oldValue, newValue)->{
-            uiField.setErrorMessage(newValue);
-            uiField.setInvalid(_Strings.isNotEmpty(newValue));
-        });
-
-        val initialValue = validationFeedbackMessage.getValue();
-        uiField.setErrorMessage(initialValue);
-        uiField.setInvalid(_Strings.isNotEmpty(initialValue));
-
-    }
-
-    // -- FEATURE (PARAMETER OR PROPERTY)
-
-    public static <P, F extends HasValue<?, P> & HasValidation>
... 3492 lines suppressed ...