diff --git a/.docksal/commands/init b/.docksal/commands/init
deleted file mode 100755
index 1bac4d3749e82890850b3f78a21fd7a4fec6f9df..0000000000000000000000000000000000000000
--- a/.docksal/commands/init
+++ /dev/null
@@ -1,3 +0,0 @@
-fin up
-fin exec composer install
-fin exec /var/www/vendor/bin/run drupal:site-install
diff --git a/.docksal/commands/run_tests b/.docksal/commands/run_tests
deleted file mode 100755
index a1539c2a8ba49e6cc0224f90c0d28bdbb7bb10f3..0000000000000000000000000000000000000000
--- a/.docksal/commands/run_tests
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env bash
-
-## Run phpunit tests
-##
-## Tests:
-## - fin run_tests --filter 'UiPatternsSettingsRenderTest'
-
-set -e
-
-fin exec /var/www/vendor/bin/phpunit $*
diff --git a/.docksal/docksal.env b/.docksal/docksal.env
deleted file mode 100644
index 874d3aad1a1a9747c86cafc173bc1084427e0507..0000000000000000000000000000000000000000
--- a/.docksal/docksal.env
+++ /dev/null
@@ -1,6 +0,0 @@
-DOCKSAL_STACK=default
-DOCROOT=build
-XDEBUG_ENABLED=0
-WEB_IMAGE='docksal/web:2.1-apache2.4'
-DB_IMAGE='docksal/db:1.3-mysql-5.7'
-CLI_IMAGE='docksal/cli:php8.1-3.2'
diff --git a/.docksal/docksal.yml b/.docksal/docksal.yml
deleted file mode 100644
index 2c4378d01d4814cc78821c8d49b327ade3a1d824..0000000000000000000000000000000000000000
--- a/.docksal/docksal.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-version: "2.1"
-services:
-  # Web
-  web:
-    extends:
-      file: ${HOME}/.docksal/stacks/services.yml
-      service: apache
-    depends_on:
-      - cli
-
-  # DB
-  db:
-    extends:
-      file: ${HOME}/.docksal/stacks/services.yml
-      service: mysql
-  # CLI
-  cli:
-    extends:
-      file: ${HOME}/.docksal/stacks/services.yml
-      service: cli
-    labels:
-      - io.docksal.virtual-host=storybook.${VIRTUAL_HOST}
-      - io.docksal.virtual-port=3000
-    environment:
-      - "XDEBUG_CONFIG=client_host=${DOCKSAL_HOST_IP} client_port=9000"
-      - "XDEBUG_MODE=debug"
-      - DOCKSAL=1
-      - PHP_IDE_CONFIG=serverName=${VIRTUAL_HOST}
diff --git a/.docksal/etc/php/php-cli.ini b/.docksal/etc/php/php-cli.ini
deleted file mode 100644
index a764a8a2643837ca8078b8a298cb469318997d64..0000000000000000000000000000000000000000
--- a/.docksal/etc/php/php-cli.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-; PHP CLI settings
-[php]
-; Maximum amount of memory a script may consume
-memory_limit = -1
\ No newline at end of file
diff --git a/.docksal/etc/php/php.ini b/.docksal/etc/php/php.ini
deleted file mode 100644
index c96b7075874a401cf60568444e504645db008d62..0000000000000000000000000000000000000000
--- a/.docksal/etc/php/php.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-; PHP CLI settings
-[php]
-; Maximum amount of memory a script may consume
-memory_limit = -1
diff --git a/.github_changelog_generator b/.github_changelog_generator
deleted file mode 100644
index 6d4371808517eec89a5c5b815f184a5baa9e6f74..0000000000000000000000000000000000000000
--- a/.github_changelog_generator
+++ /dev/null
@@ -1,5 +0,0 @@
-merge_prefix=**Merged Pull Requests**
-tag1='API change'
-include-labels='API change,Bug,New feature'
-enhancement_prefix=**New features**
-enhancement-labels='New feature'
diff --git a/.gitignore b/.gitignore
index d753432361cd01803d69137234fed09af13b12a3..a09c56df5c7fd744f3166e151ae91dd41e57fec9 100755
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1 @@
 /.idea
-/vendor
-/composer.lock
-/docs/_build
-/build/
-/phpunit.xml
-/docker-compose.override.yml
-/runner.yml
-/.docksal/docksal-local.env
-/.editorconfig
-/.gitattributes
\ No newline at end of file
diff --git a/.phpunit.result.cache b/.phpunit.result.cache
deleted file mode 100644
index b0218bf7bdf02b7f9d712d14675f864ae8b5f2db..0000000000000000000000000000000000000000
--- a/.phpunit.result.cache
+++ /dev/null
@@ -1 +0,0 @@
-{"version":1,"defects":{"Drupal\\Tests\\ui_patterns_settings\\Functional\\UiPatternsSettingsRenderTest::testRender":4},"times":{"Drupal\\Tests\\ui_patterns_settings\\Functional\\UiPatternsSettingsRenderTest::testRender":9.008}}
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index fe179c33a2a96f75f453f27f380ff6b38a87af62..0000000000000000000000000000000000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-sudo: required
-language: php
-
-php:
-  - 7.3
-  - 7.4
-
-services:
-  - docker
-
-env:
-  global:
-    - DOCKER_COMPOSE_VERSION=1.25.5
-  matrix:
-    - DRUPAL_VERSION=~8.8.7 GRUMPHP_CONFIG=grumphp.drupal8.yml
-    - DRUPAL_VERSION=~8.9.0 GRUMPHP_CONFIG=grumphp.drupal8.yml
-    - DRUPAL_VERSION=~9.0.0 GRUMPHP_CONFIG=grumphp.yml
-    - DRUPAL_VERSION=9.1.x-dev GRUMPHP_CONFIG=grumphp.yml
-
-matrix:
-  allow_failures:
-    - env: DRUPAL_VERSION=9.1.x-dev
-
-before_install:
-  - docker-compose up -d
-
-install:
-  - docker-compose exec -u root php composer require drupal/core-recommended:$DRUPAL_VERSION --dev
-  - docker-compose exec -u root php chown -R www-data:www-data build
-
-script:
-  - docker-compose exec -u www-data php ./vendor/bin/grumphp run -c $GRUMPHP_CONFIG
-  - docker-compose exec -u www-data php ./vendor/bin/phpunit
-
-notifications:
-  email: false
-
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 420e6f23d0e3718c1c5268dee41ebe58f931a563..0000000000000000000000000000000000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1 +0,0 @@
-# Change Log
diff --git a/composer.json b/composer.json
deleted file mode 100644
index 1927a7fda99b0916217d35dd3f800b53260fe824..0000000000000000000000000000000000000000
--- a/composer.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
-    "name": "drupal/ui_patterns_settings",
-    "type": "drupal-module",
-    "description": "UI Patterns Settings.",
-    "keywords": [
-        "drupal",
-        "web",
-        "ui"
-    ],
-    "license": "GPL-2.0+",
-    "minimum-stability": "dev",
-    "prefer-stable": true,
-    "authors": [
-        {
-            "name": "Christian Wiedemann",
-            "email": "christian.wiedemann@key-tec.de"
-        }
-    ],
-    "require-dev": {
-        "composer/installers": "^1.2",
-        "drupal/core-composer-scaffold": "^8.8 || ^9 || ^10",
-        "drupal/ui_patterns_layout_builder": "~1",
-        "drupal/core-dev": "^8.8 || ^9 || ^10",
-        "drupal/ui_patterns": "~1.3",
-        "drupal/token": "~1.0",
-        "drush/drush": "~11",
-        "drupal/ui_patterns_field_formatters": "^2.0",
-        "drupal/core-recommended": "~10 || ^9",
-        "openeuropa/task-runner": "~2.0.0-alpha1",
-        "phpro/grumphp": "~1.5",
-        "drupal/ds": "^3.15",
-        "drupal/form_options_attributes": "^2.0"
-    },
-    "repositories": [
-        {
-            "type": "composer",
-            "url": "https://packages.drupal.org/8"
-        }
-    ],
-    "autoload": {
-        "psr-4": {
-            "Drupal\\ui_patterns_settings_settings\\": "./src"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "Drupal\\Tests\\ui_patterns_settings_settings\\": "./tests/src"
-        }
-    },
-    "scripts": {
-        "post-install-cmd": "./vendor/bin/run drupal:site-setup",
-        "post-update-cmd": "./vendor/bin/run drupal:site-setup"
-    },
-    "extra": {
-        "enable-patching": true,
-        "composer-exit-on-patch-failure": true,
-        "drupal-scaffold": {
-            "locations": {
-                "web-root": "build/"
-            }
-        },
-        "installer-paths": {
-            "build/core": [
-                "type:drupal-core"
-            ],
-            "build/modules/contrib/{$name}": [
-                "type:drupal-module"
-            ],
-            "build/profiles/contrib/{$name}": [
-                "type:drupal-profile"
-            ],
-            "build/themes/contrib/{$name}": [
-                "type:drupal-theme"
-            ]
-        }
-    },
-    "config": {
-        "sort-packages": true,
-        "allow-plugins": {
-            "composer/installers": true,
-            "cweagans/composer-patches": true,
-            "drupal/core-composer-scaffold": true,
-            "phpro/grumphp": true,
-            "phpstan/extension-installer": true,
-            "dealerdirect/phpcodesniffer-composer-installer": true
-        }
-    }
-}
diff --git a/config/schema/ui_patterns_settings.schema.yml b/config/schema/ui_patterns_settings.schema.yml
deleted file mode 100644
index 083e79176df277f02ad75861882c50544f3ced69..0000000000000000000000000000000000000000
--- a/config/schema/ui_patterns_settings.schema.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-ui_patterns_settings.settings:
-  type: config_object
-  label: 'UI Patterns settings config'
-  mapping:
-    mapping:
-      type: sequence
-      label: 'Mapping'
-      sequence:
-        type: string
-        label: 'Field mapping'
diff --git a/config/schema/ui_patterns_settings.sources.schema.yml b/config/schema/ui_patterns_settings.sources.schema.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d26b260542288cc9d019e564e3711165b7ac59df
--- /dev/null
+++ b/config/schema/ui_patterns_settings.sources.schema.yml
@@ -0,0 +1,10 @@
+ui_patterns_source.media:
+  type: mapping
+  label: 'Source: Media'
+  mapping:
+    media:
+      type: mapping
+      label: 'Media'
+      mapping:
+        media_library_selection:
+          type: string
diff --git a/css/toggler.png b/css/toggler.png
deleted file mode 100644
index e8db53e8361249c25f17fdeb1911e0984679e4a3..0000000000000000000000000000000000000000
Binary files a/css/toggler.png and /dev/null differ
diff --git a/css/ui_patterns_settings.css b/css/ui_patterns_settings.css
deleted file mode 100644
index b67c0d77269560508bb4449963b84f771e8ad794..0000000000000000000000000000000000000000
--- a/css/ui_patterns_settings.css
+++ /dev/null
@@ -1,50 +0,0 @@
-.js-ui-patterns-settings__wrapper {
-  position: relative;
-}
-
-#ui-patterns-settings-token-link {
-  display: none;
-}
-
-.ui-patterns-settings-show-token-a {
-  display: block;
-}
-
-.js-ui-patterns-settings__toggler {
-  position: absolute;
-  width: 14px;
-  height: 14px;
-  right: 0;
-  top: 0;
-  display: block;
-  cursor: pointer;
-  background-image: url("toggler.png");
-  background-repeat: no-repeat;
-  background-size: cover;
-}
-
-.js-ui-patterns-settings__wrapper .js-ui-patterns-settings__token-wrapper > * {
-  display: none !important;
-}
-
-.js-ui-patterns-settings__wrapper.js-ui-patterns-settings--token-has-value > .js-ui-patterns-settings__input-wrapper > * {
-  display: none !important;
-}
-
-.js-ui-patterns-settings__wrapper.js-ui-patterns-settings--token-has-value > .js-ui-patterns-settings__token-wrapper > * {
-  display: block !important;
-}
-
-.ui-patterns-media-edit {
-  position: relative;
-}
-
-.media-library-edit__link {
-  position: absolute;
-  right: 0;
-  z-index: 10;
-}
-
-.media-library-form-element .fieldset-wrapper {
-  position: relative;
-}
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index c9c010c560b4e0c3dfdbc58902b5fe971acfe076..0000000000000000000000000000000000000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,67 +0,0 @@
-version: "2"
-
-services:
-
-  mariadb:
-    image: wodby/mariadb:10.3-3.8.4
-    stop_grace_period: 30s
-    environment:
-      MYSQL_ROOT_PASSWORD: password
-      MYSQL_DATABASE: drupal
-      MYSQL_USER: drupal
-      MYSQL_PASSWORD: drupal
-
-  php:
-    image: wodby/drupal-php:${TRAVIS_PHP_VERSION}-4.15.9
-    environment:
-      DB_HOST: mariadb
-      DB_USER: drupal
-      DB_PASSWORD: drupal
-      DB_NAME: drupal
-      DB_DRIVER: mysql
-      PHP_XDEBUG: 1
-      PHP_XDEBUG_DEFAULT_ENABLE: 1
-      PHP_XDEBUG_REMOTE_CONNECT_BACK: 1
-      PHP_XDEBUG_REMOTE_HOST: "10.254.254.254"
-      PHP_XDEBUG_IDEKEY: "PHPSTORM"
-      PHP_IDE_CONFIG: "serverName=ui_patterns"
-    volumes:
-    - ./:/var/www/html
-
-  nginx:
-    image: wodby/nginx:1.15-5.0.0
-    depends_on:
-    - php
-    environment:
-      NGINX_STATIC_OPEN_FILE_CACHE: "off"
-      NGINX_ERROR_LOG_LEVEL: debug
-      NGINX_BACKEND_HOST: php
-      NGINX_SERVER_ROOT: /var/www/html/build
-      NGINX_VHOST_PRESET: drupal8
-    volumes:
-    - ./:/var/www/html
-    ports:
-    - "8080:80"
-
-  # If you would like to see what is going on you can run the following on your host:
-  # docker run --rm -p 4444:4444 -p 5900:5900 --network="host" selenium/standalone-chrome-debug:latest
-  # Newer version of this image might run into this issue:
-  # @link https://github.com/elgalu/docker-selenium/issues/20
-  selenium:
-    image: selenium/standalone-chrome-debug:3.11
-    expose:
-    - '4444'
-    environment:
-    - DISPLAY=:99
-    - SE_OPTS=-debug
-    - SCREEN_WIDTH=1280
-    - SCREEN_HEIGHT=800
-    - VNC_NO_PASSWORD=1
-    ports:
-    - '4444:4444'
-    - "5900:5900"
-    volumes:
-    - /dev/shm:/dev/shm
-
-volumes:
-  codebase:
diff --git a/grumphp.drupal8.yml b/grumphp.drupal8.yml
deleted file mode 100644
index 79311e2201080fa38dc20e442475b4245a2cd82b..0000000000000000000000000000000000000000
--- a/grumphp.drupal8.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-grumphp:
-  ascii:
-    failed: ~
-    succeeded: ~
-  tasks:
-    phpcs:
-      standard: vendor/drupal/coder/coder_sniffer/Drupal/
-      ignore_patterns:
-        - build/
-        - vendor/
-      triggered_by:
-        - php
-        - module
-        - install
-        - inc
-        - theme
diff --git a/grumphp.yml b/grumphp.yml
deleted file mode 100644
index 79311e2201080fa38dc20e442475b4245a2cd82b..0000000000000000000000000000000000000000
--- a/grumphp.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-grumphp:
-  ascii:
-    failed: ~
-    succeeded: ~
-  tasks:
-    phpcs:
-      standard: vendor/drupal/coder/coder_sniffer/Drupal/
-      ignore_patterns:
-        - build/
-        - vendor/
-      triggered_by:
-        - php
-        - module
-        - install
-        - inc
-        - theme
diff --git a/images/settings.png b/images/settings.png
deleted file mode 100644
index e4a07572c240b2fadc588eaadff5f4508064b576..0000000000000000000000000000000000000000
Binary files a/images/settings.png and /dev/null differ
diff --git a/js/ui_pattern_settings.toggle_token.js b/js/ui_pattern_settings.toggle_token.js
deleted file mode 100644
index 2bd98be9d5bbd7bceb47244fdf753776e0b94ede..0000000000000000000000000000000000000000
--- a/js/ui_pattern_settings.toggle_token.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * @file
- * JavaScript file for the UI Pattern settings module.
- */
-
-(function ($, Drupal, drupalSettings, DrupalCoffee) {
-
-  'use strict';
-
-  /**
-   * Attaches ui patterns settings module behaviors.
-   *
-   * Handles enable/disable token element.
-   *
-   * @type {Drupal~behavior}
-   *
-   * @prop {Drupal~behaviorAttach} attach
-   *   Attach  ui patterns settings toggle functionality to the page.
-   *
-   */
-  Drupal.behaviors.ups_toggle_token = {
-    attach: function () {
-      once('ui-patterns-settings-show-token-link', '.js-ui-patterns-settings-show-token-link').forEach(function (elm) {
-        $(elm).after($('<a href="#" class="ui-patterns-settings-show-token-a">' + Drupal.t('Browse available token') + '</a>').click(function (event) {
-          event.preventDefault();
-          $('#ui-patterns-settings-token-link:first a').click();
-        }));
-      });
-
-      once('ui-patterns-settings-wrapper', '.js-ui-patterns-settings__wrapper').forEach(function (el) {
-        var wrapper = $(el);
-        var toggler = $('<div class="js-ui-patterns-settings__toggler" title="Use token"></div>');
-        $(toggler).click(function () {
-          var tokenInput = $('.js-ui-patterns-settings__token', wrapper);
-          if ($(wrapper).hasClass('js-ui-patterns-settings--token-has-value')) {
-            tokenInput.attr('data-init-val', tokenInput.val());
-            tokenInput.val('');
-            wrapper.removeClass('js-ui-patterns-settings--token-has-value');
-          } else {
-            tokenInput.val(tokenInput.attr('data-init-val'));
-            wrapper.addClass('js-ui-patterns-settings--token-has-value');
-          }
-        });
-        $('.js-ui-patterns-settings__input-wrapper', wrapper).append(toggler)
-        $('.js-ui-patterns-settings__token-wrapper', wrapper).append(toggler.clone(true))
-      });
-    }
-  };
-})(jQuery, Drupal, drupalSettings);
diff --git a/runner.docksal.yml b/runner.docksal.yml
deleted file mode 100644
index 7222a68bfa9738fe2d44c9ecde100c8f76a2af27..0000000000000000000000000000000000000000
--- a/runner.docksal.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-drupal:
-  root: "build"
-  base_url: "http://ui-patterns-settings.docksal"
-  database:
-    host: "db"
-    port: "3306"
-    name: "default"
-    user: "root"
-    password: "root"
-  post_install:
-    - "./vendor/bin/drush en -y ui_patterns ui_patterns_library ui_patterns_ds ui_patterns_field_group ui_patterns_layouts ui_patterns_views ui_patterns_settings ui_patterns_settings_render_test"
-    - "./vendor/bin/drush en -y coffee config_devel"
-    - "./vendor/bin/drush en -y page_manager paragraphs panels"
-    - "./vendor/bin/drush cr"
-  settings:
-    settings:
-      container_yamls:
-        - "/var/www/${drupal.root}/sites/development.services.yml"
-      extension_discovery_scan_tests: true
-      cache:
-        bins:
-          dynamic_page_cache: "cache.backend.null"
-          page_cache: "cache.backend.null"
-          render: "cache.backend.null"
-      file_scan_ignore_directories:
-        - "vendor"
-        - "${drupal.root}"
-
-selenium:
-  host: "http://selenium:4444"
-  browser: "chrome"
-
-commands:
-  drupal:site-setup:
-    - { task: "symlink", from: "../../../../src", to: "${drupal.root}/modules/custom/ui_patterns_settings/src" }
-    - { task: "symlink", from: "../../../../tests", to: "${drupal.root}/modules/custom/ui_patterns_settings/tests" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.info.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.info.yml" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.module", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.module" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.services.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.services.yml" }
-    # Generate settings.testing.php, it will be used when running functional tests.
-    - { task: "process-php", type: "write", config: "drupal.settings", source: "${drupal.root}/sites/default/default.settings.php", destination: "${drupal.root}/sites/default/settings.testing.php", override: true }
-    - { task: "run", command: "drupal:drush-setup" }
-    - { task: "run", command: "drupal:settings-setup" }
-    - { task: "run", command: "setup:phpunit" }
-  setup:phpunit:
-    - { task: "process", source: "phpunit.xml.dist", destination: "phpunit.xml" }
diff --git a/runner.yml.dist b/runner.yml.dist
deleted file mode 100644
index 6be0adfb4e212f99b9fcbea8c70fe234766e8bc4..0000000000000000000000000000000000000000
--- a/runner.yml.dist
+++ /dev/null
@@ -1,48 +0,0 @@
-drupal:
-  root: "build"
-  base_url: "http://ui-patterns-settings.docksal"
-  database:
-    host: "db"
-    port: "3306"
-    name: "default"
-    user: "root"
-    password: "root"
-  post_install:
-    - "./vendor/bin/drush en -y ui_patterns layout_builder ui_patterns_layout_builder ui_patterns_library ui_patterns_layouts ui_patterns_views ui_patterns_settings ui_patterns_settings_render_test"
-    - "./vendor/bin/drush cr"
-  settings:
-    settings:
-      container_yamls:
-        - "/var/www/${drupal.root}/sites/development.services.yml"
-      extension_discovery_scan_tests: true
-      cache:
-        bins:
-          dynamic_page_cache: "cache.backend.null"
-          page_cache: "cache.backend.null"
-          render: "cache.backend.null"
-      file_scan_ignore_directories:
-        - "vendor"
-        - "${drupal.root}"
-
-selenium:
-  host: "http://selenium:4444"
-  browser: "chrome"
-
-commands:
-  drupal:site-setup:
-    - { task: "symlink", from: "../../../../config", to: "${drupal.root}/modules/custom/ui_patterns_settings/config" }
-    - { task: "symlink", from: "../../../../src", to: "${drupal.root}/modules/custom/ui_patterns_settings/src" }
-    - { task: "symlink", from: "../../../../js", to: "${drupal.root}/modules/custom/ui_patterns_settings/js" }
-    - { task: "symlink", from: "../../../../css", to: "${drupal.root}/modules/custom/ui_patterns_settings/css" }
-    - { task: "symlink", from: "../../../../tests", to: "${drupal.root}/modules/custom/ui_patterns_settings/tests" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.libraries.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.libraries.yml" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.info.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.info.yml" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.module", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.module" }
-    - { task: "symlink", from: "../../../../ui_patterns_settings.services.yml", to: "${drupal.root}/modules/custom/ui_patterns_settings/ui_patterns_settings.services.yml" }
-    # Generate settings.testing.php, it will be used when running functional tests.
-    - { task: "process-php", type: "write", config: "drupal.settings", source: "${drupal.root}/sites/default/default.settings.php", destination: "${drupal.root}/sites/default/settings.testing.php", override: true }
-    - { task: "run", command: "drupal:drush-setup" }
-    - { task: "run", command: "drupal:settings-setup" }
-    - { task: "run", command: "setup:phpunit" }
-  setup:phpunit:
-    - { task: "process", source: "phpunit.xml.dist", destination: "phpunit.xml" }
diff --git a/src/Annotation/UiPatternsSettingType.php b/src/Annotation/UiPatternsSettingType.php
deleted file mode 100644
index 935630a8c51be3c11aff80791221dd1428e0edc6..0000000000000000000000000000000000000000
--- a/src/Annotation/UiPatternsSettingType.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Annotation;
-
-use Drupal\Component\Annotation\Plugin;
-
-/**
- * Defines a UI Patterns Setting Type annotation object.
- *
- * @see \Drupal\ui_patterns_settings\UiPatternsSettingManager
- * @see plugin_api
- *
- * @Annotation
- */
-class UiPatternsSettingType extends Plugin {
-
-  /**
-   * The plugin ID.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The label of the plugin.
-   *
-   * @var \Drupal\Core\Annotation\Translation
-   *
-   * @ingroup plugin_translatable
-   */
-  public $label;
-
-}
diff --git a/src/ConfigManager.php b/src/ConfigManager.php
deleted file mode 100644
index 27b6c304dacd85960fdea5608fd6fd999788d696..0000000000000000000000000000000000000000
--- a/src/ConfigManager.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings;
-
-use Drupal\Core\Config\ConfigFactoryInterface;
-
-/**
- * UI Patterns setting factory class.
- *
- * @package Drupal\ui_patterns_settings
- */
-class ConfigManager {
-
-  /**
-   * The config.
-   *
-   * @var \Drupal\Core\Config\Config
-   */
-  private $config;
-
-  /**
-   * Storage array by type.
-   *
-   * @var array
-   */
-  private $typeMap = [];
-
-  /**
-   * Storage array by variant.
-   *
-   * @var array
-   */
-  private $variantMap = [];
-
-  /**
-   * Constructs a new Fast404ExceptionHtmlSubscriber.
-   *
-   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
-   *   The configuration factory.
-   */
-  public function __construct(ConfigFactoryInterface $config_factory) {
-    $this->config = $config_factory->getEditable('ui_patterns_settings.settings');
-  }
-
-  /**
-   * Add mapping.
-   */
-  public function addMapping($field_id, $pattern_setting_id) {
-    $field_id = str_replace('.', '--', $field_id);
-    $map = $this->config->get('mapping');
-    if ($pattern_setting_id !== NULL) {
-      $map[$field_id] = $pattern_setting_id;
-    }
-    else {
-      unset($map[$field_id]);
-    }
-
-    $this->config->set('mapping', $map);
-    $this->config->save();
-  }
-
-  /**
-   * Find all variant mappings.
-   *
-   * @return string[]
-   *   List of all variant mappings.
-   */
-  public function findVariantMappings($type) {
-    if (isset($this->variantMap[$type])) {
-      return $this->variantMap[$type];
-    }
-    $map = is_array($this->config->get('mapping')) ? $this->config->get('mapping') : [];
-    foreach ($map as $field_id => $pattern_string) {
-      [$pattern_id, $setting_id] = explode('::', $pattern_string);
-      [$entity_type_id, $field_name] = explode('--', $field_id);
-      if ($setting_id === 'variant') {
-        $this->variantMap[$type][] = $field_name;
-      }
-    }
-    if (!isset($this->variantMap[$type])) {
-      $this->variantMap[$type] = [];
-    }
-    return $this->variantMap[$type];
-  }
-
-  /**
-   * Gets all mapping by entity type.
-   *
-   * @return string[]
-   *   List of mappings.
-   */
-  public function getMappingByType($type) {
-    if (isset($this->typeMap[$type])) {
-      return $this->typeMap[$type];
-    }
-    $map = is_array($this->config->get('mapping')) ? $this->config->get('mapping') : [];
-
-    foreach ($map as $field_id => $pattern_id) {
-      [$field_type, $field_name] = explode('--', $field_id);
-      $this->typeMap[$field_type][$field_name] = $pattern_id;
-    }
-    if (!isset($this->typeMap[$type])) {
-      $this->typeMap[$type] = [];
-    }
-    return $this->typeMap[$type];
-  }
-
-  /**
-   * Get Mapping by field id.
-   *
-   * @return string
-   *   The pattern.
-   */
-  public function getMapping($field_id) {
-    $field_id = str_replace('.', '--', $field_id);
-    $map = $this->config->get('mapping');
-    return $map[$field_id] ?? NULL;
-  }
-
-}
diff --git a/src/Definition/PatternDefinitionSetting.php b/src/Definition/PatternDefinitionSetting.php
deleted file mode 100644
index e26beaff37ae65bcfc9c8872b621875207db1aa7..0000000000000000000000000000000000000000
--- a/src/Definition/PatternDefinitionSetting.php
+++ /dev/null
@@ -1,390 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Definition;
-
-use Drupal\ui_patterns\Definition\ArrayAccessDefinitionTrait;
-
-/**
- * Pattern setting definition class.
- *
- * @package Drupal\ui_patterns_settings\Definition
- */
-class PatternDefinitionSetting implements \ArrayAccess {
-
-  use ArrayAccessDefinitionTrait;
-
-  /**
-   * Default setting values.
-   *
-   * @var array
-   */
-  protected $definition = [
-    'name' => NULL,
-    'label' => NULL,
-    'description' => NULL,
-    'type' => NULL,
-    'required' => FALSE,
-    'default_value' => NULL,
-    'group' => NULL,
-    'forced_value' => NULL,
-    'options' => NULL,
-    'form_visible' => TRUE,
-    'allow_token' => FALSE,
-    'expose_as_field' => FALSE,
-  ];
-
-  /**
-   * PatternDefinitionSetting constructor.
-   */
-  public function __construct($name, $value) {
-    if (is_scalar($value)) {
-      $this->definition['name'] = is_numeric($name) ? $value : $name;
-      $this->definition['label'] = $value;
-      $this->definition['type'] = 'textfield';
-      $this->definition['preview'] = NULL;
-      $this->definition['group'] = NULL;
-      $this->definition['weight'] = NULL;
-      $this->definition['allow_token'] = FALSE;
-      $this->definition['allow_expose'] = FALSE;
-      $this->definition['expose_as_field'] = FALSE;
-    }
-    else {
-      $name_key = !isset($value['name']) ? $name : $value['name'];
-      $this->definition['name'] = $name_key;
-      $this->definition['group'] = $value['group'] ?? NULL;
-      $this->definition['weight'] = $value['weight'] ?? NULL;
-      $this->definition['type'] = $value['type'] ?? 'textfield';
-      $this->definition['label'] = $value['label'] ?? $name_key;
-      $this->definition['required'] = $value['required'] ?? FALSE;
-      $this->definition['default_value'] = $value['default_value'] ?? NULL;
-      $this->definition['preview'] = $value['preview'] ?? NULL;
-      $this->definition['raw_options'] = $value['options'] ?? NULL;
-
-      $unprocessed_options = $value['options'] ?? NULL;
-      unset($value['options']);
-      if (is_array($unprocessed_options)) {
-        $processed_options = [];
-        foreach ($unprocessed_options as $option_key => $option_value) {
-          if (is_array($option_value)) {
-            $processed_options[$option_key] = $option_value['label'] ?? 'undefined';
-          }
-          else {
-            $processed_options[$option_key] = $option_value;
-          }
-        }
-      }
-      else {
-        $processed_options = NULL;
-      }
-      $this->definition['options'] = $processed_options;
-
-      $this->definition['allow_token'] = $value['allow_token'] ?? FALSE;
-      $this->definition['allow_expose'] = $value['allow_expose'] ?? FALSE;
-      $this->definition['expose_as_field'] = $value['expose_as_field'] ?? FALSE;
-
-      $this->definition = $value + $this->definition;
-    }
-  }
-
-  /**
-   * Overwrite setting definition.
-   *
-   * @param array $definitions
-   *   The overwritten definitions.
-   */
-  public function setDefinitions(array $definitions) {
-    $this->definition = $definitions + $this->definition;
-  }
-
-  /**
-   * Return any definition value.
-   *
-   * @return string
-   *   The value.
-   */
-  public function getValue($key) {
-    return $this->definition[$key] ?? NULL;
-  }
-
-  /**
-   * Return array definition.
-   *
-   * @return array
-   *   Array definition.
-   */
-  public function toArray() {
-    return $this->definition;
-  }
-
-  /**
-   * Get Name property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getName() {
-    return $this->definition['name'];
-  }
-
-  /**
-   * Get Group property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getGroup() {
-    return $this->definition['group'];
-  }
-
-  /**
-   * Get Label property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getLabel() {
-    return $this->definition['label'];
-  }
-
-  /**
-   * Get required property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getRequired() {
-    return $this->definition['required'];
-  }
-
-  /**
-   * Get allow token property.
-   *
-   * @return bool
-   *   Property value.
-   */
-  public function getAllowToken() {
-    return $this->definition['allow_token'];
-  }
-
-  /**
-   * Get raw options array.
-   *
-   * @return mixed
-   *   Property option.
-   */
-  public function getRawOptions() {
-    return $this->definition['raw_options'];
-  }
-
-  /**
-   * Get options array.
-   *
-   * @return mixed
-   *   Property option.
-   */
-  public function getOptions() {
-    return $this->definition['options'];
-  }
-
-  /**
-   * Get default value property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getDefaultValue() {
-    return $this->definition['default_value'];
-  }
-
-  /**
-   * Set default value property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function setDefaultValue($defaultValue) {
-    $this->definition['default_value'] = $defaultValue;
-    return $this;
-  }
-
-  /**
-   * Get weight value property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getWeight() {
-    return $this->definition['weight'];
-  }
-
-  /**
-   * Set weight property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function setWeight($weight) {
-    $this->definition['weight'] = $weight;
-    return $this;
-  }
-
-  /**
-   * Set allow token value property.
-   *
-   * @param bool $allow_token
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setAllowToken($allow_token) {
-    $this->definition['allow_token'] = $allow_token;
-    return $this;
-  }
-
-  /**
-   * Get default value property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getForcedValue() {
-    return $this->definition['forced_value'];
-  }
-
-  /**
-   * Get preview property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function getPreview() {
-    return $this->definition['preview'];
-  }
-
-  /**
-   * Set default value property.
-   *
-   * @return mixed
-   *   Property value.
-   */
-  public function setForcedValue($forcedValue) {
-    $this->definition['forced_value'] = $forcedValue;
-    return $this;
-  }
-
-  /**
-   * Get exposable property.
-   *
-   * @return string
-   *   Property value.
-   */
-  public function allowExpose() {
-    return $this->definition['allow_expose'];
-  }
-
-  /**
-   * Set Exposable property.
-   *
-   * @param string $allow_expose
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setAllowExpose($allow_expose) {
-    $this->definition['allow_expose'] = $allow_expose;
-    return $this;
-  }
-
-  /**
-   * Get Description property.
-   *
-   * @return string
-   *   Property value.
-   */
-  public function getDescription() {
-    return $this->definition['description'];
-  }
-
-  /**
-   * Set Description property.
-   *
-   * @param string $description
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setDescription($description) {
-    $this->definition['description'] = $description;
-    return $this;
-  }
-
-  /**
-   * Is form visible property.
-   *
-   * @return bool
-   *   Property value.
-   */
-  public function isFormVisible() {
-    return $this->definition['form_visible'];
-  }
-
-  /**
-   * Set form visible property.
-   *
-   * @param bool $visible
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setFormVisible($visible) {
-    $this->definition['form_visible'] = $visible;
-    return $this;
-  }
-
-  /**
-   * Get Type property.
-   *
-   * @return string
-   *   Property value.
-   */
-  public function getExposeAsField() {
-    return $this->definition['expose_as_field'];
-  }
-
-  /**
-   * Set Expose property.
-   *
-   * @param string $expose_as_field
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setExposeAsField($expose_as_field) {
-    $this->definition['expose_as_field'] = $expose_as_field;
-    return $this;
-  }
-
-  /**
-   * Get Type property.
-   *
-   * @return string
-   *   Property value.
-   */
-  public function getType() {
-    return $this->definition['type'];
-  }
-
-  /**
-   * Set Type property.
-   *
-   * @param string $type
-   *   Property value.
-   *
-   * @return $this
-   */
-  public function setType($type) {
-    $this->definition['type'] = $type;
-    return $this;
-  }
-
-}
diff --git a/src/Element/PatternSettings.php b/src/Element/PatternSettings.php
deleted file mode 100644
index 55d67c6e5ea83e04a7c74caa2ed21ae469adaa1e..0000000000000000000000000000000000000000
--- a/src/Element/PatternSettings.php
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Element;
-
-use Drupal\Core\Security\TrustedCallbackInterface;
-use Drupal\Core\Template\Attribute;
-use Drupal\ui_patterns\UiPatterns;
-use Drupal\ui_patterns_settings\UiPatternsSettings;
-use Drupal\Core\Entity\EntityMalformedException;
-
-/**
- * Renders a pattern element.
- */
-class PatternSettings implements TrustedCallbackInterface {
-
-  /**
-   * Process settings for preview.
-   *
-   * @param array $element
-   *   Render array.
-   *
-   * @return array
-   *   Render array.
-   */
-  public static function processPreviewSettings(array $element) {
-    return PatternSettings::processSettings($element, TRUE);
-  }
-
-  /**
-   * Process settings.
-   *
-   * @param array $element
-   *   Render array.
-   * @param bool $preview
-   *   True when called in pattern preview mode.
-   *
-   * @return array
-   *   Render array.
-   */
-  public static function processSettings(array $element, $preview = FALSE) {
-    $alter_context = [];
-    $context = $element['#context'];
-    $pattern_id = $element['#id'];
-    /** @var \Drupal\Core\Entity\ContentEntityBase $entity */
-    $entity = $context->getProperty('entity');
-    if ($context->getType() === 'layout' && $entity !== NULL) {
-      $mappings = UiPatternsSettings::getConfigManager()->findVariantMappings($entity->getEntityTypeId());
-      foreach ($mappings as $field_name) {
-        if ($entity->hasField($field_name) && !empty($entity->get($field_name)->value)) {
-          $element['#variant'] = $entity->get($field_name)->value;
-        }
-      }
-    }
-
-    // Handling variant token for layout builder.
-    if (empty($element['#variant_token']) && isset($element['#layout'])) {
-      /** @var \Drupal\ui_patterns_layout_builder\Plugin\Layout\PatternLayoutBuilder $layout */
-      $layout = $element['#layout'];
-      $configuration = $layout->getConfiguration();
-      $element['#variant_token'] = $configuration['pattern']['variant_token'] ?? NULL;
-    }
-
-    // Handle Variant token.
-    if (!empty($element['#variant_token'])) {
-      $variant_token = $element['#variant_token'];
-      $token_data = [];
-      if ($entity !== NULL) {
-        $token_data[$entity->getEntityTypeId()] = $entity;
-      }
-      try {
-        $element['#variant'] = \Drupal::token()->replace($variant_token, $token_data, ['clear' => TRUE]);
-      }
-      catch (EntityMalformedException $e) {
-        if (!ui_patterns_settings_is_layout_builder_route()) {
-          throw $e;
-        }
-        // Do nothing inside layout builder.
-      }
-    }
-    $variant_alter_context['#pattern_id'] = $pattern_id;
-    if (isset($element['#layout'])) {
-      $variant_alter_context['#layout'] = $element['#layout'];
-    }
-    $variant_alter_context['#pattern_context'] = $context;
-    $variant = $element['#variant'];
-    \Drupal::moduleHandler()->alter('ui_pattern_settings_variant', $variant, $variant_alter_context);
-    $element['#variant'] = $variant;
-    // Make sure we don't render anything in case fields are empty.
-    if (self::hasSettings($element)) {
-      $settings = $element['#settings'] ?? [];
-      // Handling display suite pattern.
-      if (empty($settings)) {
-        $settings = $element['#ds_configuration']['layout']['settings']['pattern']['settings'] ?? [];
-      }
-      // Handling layout builder.
-      if (empty($settings) && isset($element['#layout'])) {
-        /** @var \Drupal\ui_patterns_layout_builder\Plugin\Layout\PatternLayoutBuilder $layout */
-        $layout = $element['#layout'];
-        $configuration = $layout->getConfiguration();
-        $settings = $configuration['pattern']['settings'] ?? [];
-      }
-      $entity = $context->getProperty('entity');
-      $variant = $element['#variant'] ?? NULL;
-      $settings = UiPatternsSettings::preprocess($pattern_id, $settings, $variant, $preview, $entity, $element);
-      if (isset($element['#layout'])) {
-        $alter_context['#layout'] = $element['#layout'];
-      }
-      $alter_context['#pattern_id'] = $pattern_id;
-      $alter_context['#variant'] = $variant;
-      $alter_context['#pattern_context'] = $context;
-      \Drupal::moduleHandler()->alter('ui_pattern_settings_settings', $settings, $alter_context);
-      unset($element['#settings']);
-      foreach ($settings as $name => $setting) {
-        $key = '#' . $name;
-        if (!isset($element[$key])) {
-          $element[$key] = $setting;
-        }
-        else {
-          if ($setting instanceof Attribute && $element[$key] instanceof Attribute) {
-            $element[$key] = new Attribute(array_merge($setting->toArray(), $element[$key]->toArray()));
-          }
-          elseif (is_array($element[$key]) && is_array($setting)) {
-            $element[$key] = array_merge($element[$key], $setting);
-          } elseif (empty($element[$key]) && !empty($setting)) {
-            // Handle Exposed fields. Overwrite expose fields if the setting is provided
-            // but the variable prefilled with an empty field. (e.g. component blocks)
-            $setting_definition = UiPatternsSettings::getPatternDefinitionSetting(UiPatterns::getPatternDefinition($pattern_id), $name);
-            if ($setting_definition !== NULL && $setting_definition->getExposeAsField()) {
-              $element[$key] = $setting;
-            }
-          }
-        }
-      }
-    }
-    return $element;
-  }
-
-  /**
-   * Whereas pattern has settings or not.
-   *
-   * @return bool
-   *   TRUE or FALSE.
-   */
-  public static function hasSettings($element) {
-    $definition = UiPatterns::getPatternDefinition($element['#id']);
-    $settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
-    if ($definition != NULL && count($settings) != 0) {
-      return TRUE;
-    }
-    else {
-      return FALSE;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function trustedCallbacks() {
-    return ['processSettings', 'processPreviewSettings'];
-  }
-
-}
diff --git a/src/Form/SettingsFormBuilder.php b/src/Form/SettingsFormBuilder.php
deleted file mode 100644
index 389642c04c9ca587791015b5697e0e704e7a8f65..0000000000000000000000000000000000000000
--- a/src/Form/SettingsFormBuilder.php
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Form;
-
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Entity\ContentEntityType;
-use Drupal\Core\Form\FormState;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\ui_patterns\Definition\PatternDefinition;
-use Drupal\ui_patterns\UiPatterns;
-use Drupal\ui_patterns_settings\UiPatternsSettings;
-use Drupal\ui_patterns_settings\UiPatternsSettingsManager;
-
-/**
- * Build settings in manage display form.
- */
-class SettingsFormBuilder {
-
-  /**
-   * Build a hidden tree link token for performance reasons.
-   *
-   * Forms with class .js-ui-patterns-settings-show-token-link will
-   * generate Browse token button which click on the hidden link.
-   * This will reduce the number of browse buttons.
-   *
-   * @param array $form
-   *   The form.
-   */
-  private static function buildTokenLink(array &$form) {
-
-    // Detecting current entity type.
-    // We don't have access to.
-    $request = \Drupal::request();
-    $entity_type_id = $request->attributes->get('entity_type_id');
-    if (empty($entity_type_id)) {
-      /** @var \Drupal\layout_builder\Plugin\SectionStorage\DefaultsSectionStorage $section_storage */
-      $section_storage = $request->attributes->get('section_storage');
-      if ($section_storage !== NULL) {
-        $entity_type_id = explode('.', $section_storage->getStorageId())[0];
-      }
-    }
-
-    if (!empty($entity_type_id)) {
-      $content_entity_types[] = $entity_type_id;
-    }
-    else {
-      $entity_type_definations = \Drupal::entityTypeManager()->getDefinitions();
-      /** @var EntityTypeInterface $definition */
-      foreach ($entity_type_definations as $definition) {
-        if ($definition instanceof ContentEntityType) {
-          $content_entity_types[] = $definition->id();
-        }
-      }
-    }
-
-    $form['token_link'] = [
-      '#prefix' => '<div id="ui-patterns-settings-token-link">',
-      '#suffix' => '</div>',
-      '#theme' => 'token_tree_link',
-      '#token_types' => $content_entity_types,
-      '#show_restricted' => FALSE,
-      '#show_nested' => FALSE,
-      '#global_types' => TRUE,
-      '#click_insert' => TRUE,
-      '#recursion_limit' => 3,
-      '#weight' => 90,
-    ];
-  }
-
-  /**
-   * Ajax callback for variant change.
-   *
-   * @param array $form
-   *   The form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The form state.
-   */
-  public static function regenerateForm(array $form, FormStateInterface $form_state) {
-    return $form['layout_settings']['pattern']['settings'];
-  }
-
-  /**
-   * Build pattern settings fieldset.
-   *
-   * @param array $form
-   *   Form array.
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The pattern definition.
-   * @param array $configuration
-   *   The pattern configuration.
-   */
-  public static function layoutForm(array &$form, PatternDefinition $definition, array $configuration) {
-    $settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
-    self::buildTokenLink($form);
-
-    $form['variant']['#ajax'] = [
-      'callback' => '\Drupal\ui_patterns_settings\Form\SettingsFormBuilder::regenerateForm',
-      'wrapper' => 'ui-patterns-settings-form-wrapper',
-      'event' => 'change',
-    ];
-
-    $form['#attached']['library'][] = 'ui_patterns_settings/widget';
-    if (UiPatternsSettingsManager::allowVariantToken($definition)) {
-      $variant_token_value = $configuration['pattern']['variant_token'] ?? NULL;
-      $form['variant_token'] = [
-        '#type' => 'textfield',
-        '#title' => 'Variant token',
-        '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']],
-        '#default_value' => $variant_token_value,
-      ];
-    }
-
-    $form['variant']['#attributes']['class'][] = 'ui-patterns-variant-selector-' . $definition->id();
-    if (!empty($settings)) {
-      foreach ($settings as $key => $setting) {
-        if (empty($setting->getType()) || !$setting->isFormVisible()) {
-          continue;
-        }
-
-        if (!isset($form['settings'])) {
-          $form['settings'] = [
-            '#type' => 'fieldset',
-            '#prefix' => '<div id="ui-patterns-settings-form-wrapper">',
-            '#suffix' => '</div>',
-            '#title' => t('Settings'),
-          ];
-        }
-        $setting_value = $configuration['pattern']['settings'][$key] ?? NULL;
-        $token_value = $configuration['pattern']['settings'][$key . "_token"] ?? "";
-        $variant = $_POST['layout_settings']['pattern']['variant'] ?? $configuration['pattern']['variant'];
-        $settingType = UiPatternsSettings::createSettingType($definition, $setting, $variant);
-        $form['settings'] += $settingType->buildConfigurationForm([], $setting_value, $token_value, 'layouts_display');
-      }
-      SettingsFormBuilder::buildVariantsForm(".ui-patterns-variant-selector-" . $definition->id(), $form['settings'], $definition);
-    }
-  }
-
-  /**
-   * Build pattern settings for display form.
-   *
-   * @param array $form
-   *   Form array.
-   * @param array $configuration
-   *   Configurations array.
-   */
-  public static function displayForm(array &$form, array $configuration) {
-    $form['#attached']['library'][] = 'ui_patterns_settings/widget';
-    self::buildTokenLink($form);
-    foreach (UiPatterns::getPatternDefinitions() as $pattern_id => $definition) {
-      $settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
-      $form['variants'][$pattern_id]['#attributes']['class'][] = 'ui-patterns-variant-selector-' . $pattern_id;
-      if (UiPatternsSettingsManager::allowVariantToken($definition)) {
-        $variant_token_value = $configuration['variants_token'][$pattern_id] ?? NULL;
-        $form['variants']['#weight'] = 20;
-        $form['pattern_mapping']['#weight'] = 30;
-        $form['pattern_settings']['#weight'] = 40;
-        $form['variants_token'] = [
-          '#type' => 'container',
-          '#title' => t('Pattern Variant'),
-          '#weight' => 25,
-          '#states' => [
-            'visible' => [
-              'select[id="patterns-select"]' => ['value' => $pattern_id],
-            ],
-          ],
-        ];
-        $form['variants_token'][$pattern_id] = [
-          '#type' => 'textfield',
-          '#title' => t('Variant token'),
-          '#default_value' => $variant_token_value,
-          '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']],
-          '#states' => [
-            'visible' => [
-              'select[id="patterns-select"]' => ['value' => $pattern_id],
-            ],
-          ],
-        ];
-      }
-      if (!empty($settings)) {
-        foreach ($settings as $key => $setting) {
-          if (empty($setting->getType()) || !$setting->isFormVisible()) {
-            continue;
-          }
-          if (!isset($form['pattern_settings'][$pattern_id])) {
-            $form['pattern_settings'][$pattern_id] = [
-              '#type' => 'fieldset',
-              '#title' => t('Settings'),
-              '#states' => [
-                'visible' => [
-                  'select[id="patterns-select"]' => ['value' => $pattern_id],
-                ],
-              ],
-            ];
-          }
-          $fieldset = &$form['pattern_settings'][$pattern_id];
-          $settingType = UiPatternsSettings::createSettingType($definition, $setting);
-          $setting_value = $configuration['pattern_settings'][$pattern_id][$key] ?? NULL;
-          $token_value = $configuration['pattern_settings'][$pattern_id][$key . "_token"] ?? NULL;
-          $fieldset += $settingType->buildConfigurationForm([], $setting_value, $token_value, 'display');
-        }
-        SettingsFormBuilder::buildVariantsForm('.ui-patterns-variant-selector-' . $pattern_id, $fieldset, $definition);
-      }
-    }
-    if (!empty($form['pattern_settings'])) {
-      $form['pattern_settings']['#element_validate'][] =
-        [static::class, 'cleanSettings'];
-    }
-  }
-
-  /**
-   * Clean form values before being saved to configuration.
-   *
-   * @param array $element
-   *   The pattern_settings fieldset element.
-   * @param \Drupal\Core\Form\FormState $form_state
-   *   The form state.
-   * @param array $form
-   *   The complete form array.
-   */
-  public static function cleanSettings(array $element, FormState $form_state, array $form) {
-    $values = $form_state->getValues();
-    $pattern_config = NestedArray::getValue($values, array_slice($element['#parents'], 0, -1));
-    if (!empty($pattern_config['pattern_settings'])) {
-      // Only keep settings related to the selected pattern.
-      $pattern_settings = array_intersect_key($pattern_config['pattern_settings'], [$pattern_config['pattern'] => TRUE]);
-      $form_state->setValueForElement($element, $pattern_settings);
-    }
-  }
-
-  /**
-   * Hide all settings which are configured by the variant.
-   *
-   * @param string $select_selector
-   *   The id of the variant select field.
-   * @param array $fieldset
-   *   The fieldset.
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The pattern definition.
-   */
-  private static function buildVariantsForm($select_selector, array &$fieldset, PatternDefinition $definition) {
-    $variants = $definition->getVariants();
-    foreach ($variants as $variant) {
-      $variant_ary = $variant->toArray();
-      $settings = $variant_ary['settings'] ?? [];
-
-      // Variants may have definition overwrites.
-      // This should not lead to hide them. So unset them before.
-      foreach ($settings as $name => $setting) {
-        if (is_array($setting) && isset($setting['definition']) && empty($setting['value'])) {
-          unset($settings[$name]);
-        }
-      }
-
-      foreach ($settings as $name => $setting) {
-        if (isset($fieldset[$name])) {
-          // Add an or before a new state begins.
-          if (isset($fieldset[$name]['#states']['invisible']) && count($fieldset[$name]['#states']['invisible']) != 0) {
-            $fieldset[$name]['#states']['invisible'][] = 'or';
-          }
-          // Hide configured setting.
-          $fieldset[$name]['#states']['invisible'][][$select_selector]['value'] = $variant->getName();
-          if (isset($fieldset[$name . '_token'])) {
-            $fieldset[$name . '_token']['#states']['invisible'][][$select_selector]['value'] = $variant->getName();
-          }
-        }
-      }
-    }
-  }
-
-}
diff --git a/src/Plugin/EnumerationSettingTypeBase.php b/src/Plugin/EnumerationSettingTypeBase.php
deleted file mode 100644
index dae3eb9f4deee6b6f71e19caac50bebb1be0001c..0000000000000000000000000000000000000000
--- a/src/Plugin/EnumerationSettingTypeBase.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin;
-
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-
-/**
- * Base class for enumerations like radios or select.
- */
-abstract class EnumerationSettingTypeBase extends PatternSettingTypeBase {
-
-  /**
-   * Returns empty option.
-   *
-   * @return array
-   *   The empty option.
-   */
-  protected function emptyOption() {
-    return ["" => $this->t("Please select")];
-  }
-
-  /**
-   * Returns the enumeration type.
-   *
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition setting.
-   *
-   * @return string
-   *   The enumeration type.
-   */
-  protected function getEnumerationType(PatternDefinitionSetting $def) {
-    return $def->getValue('enumeration_type');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterFieldStorage(FieldStorageConfig $storage_config) {
-    $storage_config->setSetting('allowed_values_function', 'ui_patterns_settings_allowed_values_function');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fieldStorageExposableTypes() {
-    return ['list_string'];
-  }
-
-  /**
-   * Returns the enumeration options.
-   *
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   *
-   * @return mixed
-   *   The options.
-   */
-  protected function getOptions(PatternDefinitionSetting $def) {
-    $config = $this->configuration;
-    $raw_options = $def->getRawOptions();
-    $final_options = [];
-    foreach ($raw_options as $key => $value) {
-      if (isset($value['condition']['variant'])) {
-        if ($value['condition']['variant'] === $config['variant']) {
-          $final_options[$key] = $value['label'];
-        }
-      }
-      else {
-        $final_options[$key] = $value['label'] ?? $value;
-      }
-    }
-    return $final_options;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    if ($def->getRequired() == FALSE) {
-      $options = $this->emptyOption();
-    }
-    else {
-      $options = [];
-    }
-
-    $options += $this->getOptions($def);
-    $form[$def->getName()] = [
-      '#type' => $this->getEnumerationType($def),
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $this->getValue($value),
-      '#options' => $options,
-    ];
-    if ($raw_options = $def->getRawOptions()) {
-      foreach ($raw_options as $raw_option_name => $raw_option) {
-        if (isset($raw_option['condition'])) {
-          if (isset($raw_option['condition']['variant'])) {
-            $form[$def->getName()]['#options_attributes'][$raw_option_name] = [
-              'ui-patterns-settings-visible-variant' => $raw_option['condition']['variant'],
-            ];
-          }
-        }
-      }
-    }
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/LanguageCheckboxesSettingTypeBase.php b/src/Plugin/LanguageCheckboxesSettingTypeBase.php
deleted file mode 100644
index faaf95176af94f512fb586f86e07140b906cf41d..0000000000000000000000000000000000000000
--- a/src/Plugin/LanguageCheckboxesSettingTypeBase.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin;
-
-use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Language Checkboxes setting type.
- *
- * Provides an array of:
- * - current_language_selected: True if the
- *   current language is part of the selection
- *   or nothing is selected
- * - current_language: The current language.
- * - selected: Array of selected languages.
- *
- * @UiPatternsSettingType(
- *   id = "language_checkboxes",
- *   label = @Translation("Language checkboxes")
- * )
- */
-class LanguageCheckboxesSettingTypeBase extends EnumerationSettingTypeBase {
-
-  /**
-   * The language manager.
-   *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
-   */
-  protected LanguageManagerInterface $languageManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function emptyOption() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getValue($value) {
-    if ($value === NULL) {
-      return !is_array($this->getPatternSettingDefinition()
-        ->getDefaultValue()) ? [
-          $this->getPatternSettingDefinition()
-            ->getDefaultValue(),
-        ] : $this->getPatternSettingDefinition()->getDefaultValue();
-    }
-    else {
-      return $value ?? "";
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getOptions(PatternDefinitionSetting $def) {
-    $languages = $this->languageManager->getLanguages();
-    $options = [];
-    foreach ($languages as $language) {
-      $options[$language->getId()] = $language->getName();
-    }
-    return $options;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEnumerationType(PatternDefinitionSetting $def) {
-    return $def->getValue('enumeration_type') ?? 'checkboxes';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    $selected_options = [];
-    $defined_options = $this->getOptions($def);
-    if (is_array($value)) {
-      foreach ($value as $checkbox_key => $checkbox_value) {
-        if ($checkbox_value != "0") {
-          $selected_options[$checkbox_key] = $defined_options[$checkbox_value] ?? $checkbox_value;
-        }
-      }
-    }
-    $current_language = $this->languageManager->getCurrentLanguage();
-    return [
-      'current_language_selected' => count($selected_options) === 0 || isset($selected_options[$current_language->getId()]),
-      'current_language' => [
-        $current_language->getId() => $current_language->getName(),
-      ],
-      'selected' => $selected_options,
-    ];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(
-    ContainerInterface $container,
-    array $configuration,
-                       $plugin_id,
-                       $plugin_definition
-  ) {
-    $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition);
-    $plugin->languageManager = $container->get('language_manager');
-    return $plugin;
-  }
-
-}
diff --git a/src/Plugin/Layout/PatternSettingsLayout.php b/src/Plugin/Layout/PatternSettingsLayout.php
deleted file mode 100644
index 5dfbcc2d9eec8e6d5e67117c232a34b9bf849d5d..0000000000000000000000000000000000000000
--- a/src/Plugin/Layout/PatternSettingsLayout.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\Layout;
-
-use Drupal\ui_patterns_layouts\Plugin\Layout\PatternLayout;
-
-/**
- * Layout class for patterns with settings.
- *
- * @package Drupal\ui_patterns_settings\Plugin\Layout
- */
-class PatternSettingsLayout extends PatternLayout {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function build(array $regions) {
-    $build = parent::build($regions);
-    $configuration = $this->getConfiguration();
-    if (isset($configuration['pattern']['settings'])) {
-      $build['#settings'] = $configuration['pattern']['settings'];
-    }
-    if (isset($configuration['pattern']['variant_token'])) {
-      $build['#variant_token'] = $configuration['pattern']['variant_token'];
-    }
-    return $build;
-  }
-
-}
diff --git a/src/Plugin/PatternSettingTypeBase.php b/src/Plugin/PatternSettingTypeBase.php
deleted file mode 100644
index fd024c2a135d3e3487d4895a3f58e4fb42328004..0000000000000000000000000000000000000000
--- a/src/Plugin/PatternSettingTypeBase.php
+++ /dev/null
@@ -1,440 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin;
-
-use Drupal\Component\Plugin\ConfigurableInterface;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Field\FieldItemList;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Plugin\PluginBase;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Base class for UI Patterns Setting plugins.
- */
-abstract class PatternSettingTypeBase extends PluginBase implements
-    ConfigurableInterface,
-    PatternSettingTypeInterface,
-    ContainerFactoryPluginInterface {
-
-  /**
-   * Returns a list of plugin dependencies.
-   *
-   * @return bool
-   *   True if all dependencies exist.
-   */
-  protected function getSettingTypeDependencies() {
-    return [];
-  }
-
-  /**
-   * The module handler.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  private $moduleHandler;
-
-  /**
-   * The route match.
-   *
-   * @var \Drupal\Core\Routing\RouteMatchInterface
-   */
-  private $routeMatch;
-
-  /**
-   * Return pattern definitions for setting .
-   *
-   * @var \Drupal\ui_patterns\Definition\PatternDefinition
-   */
-  private $patternDefinition;
-
-  /**
-   * Return pattern definitions for setting .
-   *
-   * @var \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting
-   */
-  private $patternSettingDefinition;
-
-  /**
-   * Return pattern definitions for setting .
-   *
-   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
-   */
-  protected $entityTypeManager;
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(
-    array $configuration,
-    $plugin_id,
-    array $plugin_definition,
-    ModuleHandlerInterface $module_handler,
-    EntityTypeManagerInterface $entity_type_manager
-  ) {
-    $configuration += $this->defaultConfiguration();
-    $this->patternSettingDefinition = $configuration['pattern_setting_definition'];
-    $this->patternDefinition = $configuration['pattern_definition'];
-    $this->moduleHandler = $module_handler;
-    $this->entityTypeManager = $entity_type_manager;
-    unset($configuration['pattern_setting_definition']);
-    unset($configuration['pattern_definition']);
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-  }
-
-  /**
-   * Return value if set otherwise take the default value.
-   *
-   * @param mixed $value
-   *   The provided value.
-   *
-   * @return string
-   *   The value for this setting
-   */
-  protected function getValue($value) {
-    if ($value === NULL) {
-      return $this->getPatternSettingDefinition()->getDefaultValue();
-    }
-    else {
-      return $value ?? "";
-    }
-  }
-
-  /**
-   * Return pattern setting definition.
-   *
-   * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting
-   *   Pattern setting definition.
-   */
-  protected function getPatternSettingDefinition() {
-    return $this->patternSettingDefinition;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(
-    ContainerInterface $container,
-    array $configuration,
-    $plugin_id,
-    $plugin_definition
-  ) {
-    $plugin = new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition,
-      $container->get('module_handler'),
-      $container->get('entity_type.manager')
-    );
-    /** @var \Drupal\Core\StringTranslation\TranslationInterface $translation */
-    $translation = $container->get('string_translation');
-
-    $plugin->setStringTranslation($translation);
-    $plugin->routeMatch = $container->get('current_route_match');
-    return $plugin;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterFieldStorage(FieldStorageConfig $storage_config) {
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function label() {
-    $plugin_definition = $this->getPluginDefinition();
-    return $plugin_definition['label'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDescription() {
-    $plugin_definition = $this->getPluginDefinition();
-    return $plugin_definition['description'] ?? '';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function defaultConfiguration() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfiguration() {
-    return $this->configuration;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function setConfiguration(array $configuration) {
-    $this->configuration = $configuration + $this->defaultConfiguration();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function calculateDependencies() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function preprocess($value, array $context) {
-    $def = $this->getPatternSettingDefinition();
-    $value = $this->settingsPreprocess($value, $context, $def);
-    return $value;
-  }
-
-  /**
-   * Checks if current route is a layout builder route.
-   *
-   * @return bool
-   *   True if it is a layout builder route.
-   */
-  protected function isLayoutBuilderRoute() {
-    if (preg_match('/^(layout_builder\.([^.]+\.)?)/', $this->routeMatch->getRouteName())) {
-      return TRUE;
-    }
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterElement($value, PatternDefinitionSetting $def, &$element) {
-
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess(
-    $value,
-    array $context,
-    PatternDefinitionSetting $def
-  ) {
-    return $value;
-  }
-
-  /**
-   * Returns the bind form field.
-   *
-   * @param array $form
-   *   The form definition array for the settings configuration form.
-   * @param string $value
-   *   The stored default value.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   *
-   * @return array
-   *   The form.
-   */
-  protected function tokenForm(
-    array $form,
-    $value,
-    PatternDefinitionSetting $def
-  ) {
-    $form[$def->getName() . "_token"] = [
-      '#type' => 'textfield',
-      '#title' => $this->t("Token for %label", ['%label' => $def->getLabel()]),
-      '#default_value' => $this->getValue($value),
-      '#attributes' => [
-        'class' => [
-          'js-ui-patterns-settings-show-token-link',
-          'js-ui-patterns-settings__token',
-        ],
-      ],
-      '#wrapper_attributes' => ['class' => ['js-ui-patterns-settings__token-wrapper']],
-    ];
-    return $form;
-  }
-
-  /**
-   * Check required input fields in layout forms.
-   *
-   * @param array $element
-   *   The element to validate.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The form state.
-   * @param array $form
-   *   The form.
-   */
-  public static function validateLayout(
-    array $element,
-    FormStateInterface &$form_state,
-    array &$form
-  ) {
-    $parents = $element['#parents'];
-    $value = $form_state->getValue($parents);
-    $parents[count($parents) - 1] = $parents[count($parents) - 1] . '_token';
-    $token_value = $form_state->getValue($parents);
-    if (empty($value) && empty($token_value)) {
-      // Check if a variant is selected and the value
-      // is provided by the variant.
-      $variant = $form_state->getValue(
-        [
-          'layout_configuration',
-          'pattern',
-          'variant',
-        ]
-      );
-      if (!empty($variant)) {
-        $variant_def = $element['#pattern_definition']->getVariant($variant);
-        $variant_ary = $variant_def->toArray();
-        if (!empty(
-        $variant_ary['settings'][$element['#pattern_setting_definition']->getName(
-        )]
-        )) {
-          return;
-        }
-      }
-
-      $form_state->setError(
-        $element,
-        t(
-          '@name field is required.',
-          ['@name' => $element['#title']]
-        )
-      );
-    }
-  }
-
-  /**
-   * Add validation and basics classes to the raw input field.
-   *
-   * @param array $input
-   *   The input field.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   * @param string $form_type
-   *   The form type. Either layouts_display or display.
-   */
-  protected function handleInput(
-    array &$input,
-    PatternDefinitionSetting $def,
-    $form_type
-  ) {
-    $input['#attributes']['class'][] = 'js-ui-patterns-settings__input';
-    $input['#wrapper_attributes']['class'][] = 'js-ui-patterns-settings__input-wrapper';
-    if ($def->getRequired()) {
-      $input['#title'] .= ' *';
-      if ($form_type === 'layouts_display') {
-        $input['#element_validate'][] = [
-          PatternSettingTypeBase::class,
-          'validateLayout',
-        ];
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * Creates a generic configuration form for all settings types.
-   * Individual settings plugins can add elements to this form by
-   * overriding PatternSettingTypeBaseInterface::settingsForm().
-   * Most plugins should not override this method unless they
-   * need to alter the generic form elements.
-   *
-   * @see \Drupal\Core\Block\BlockBase::blockForm()
-   */
-  public function buildConfigurationForm(
-    array $form,
-    $value,
-    $token_value,
-    $form_type
-  ) {
-    $dependencies = $this->getSettingTypeDependencies();
-    $def = $this->getPatternSettingDefinition();
-    foreach ($dependencies as $dependency) {
-      if (!$this->moduleHandler->moduleExists($dependency)) {
-        $form[$def->getName(
-        )] = ['#markup' => "Missing SettingType {$def->getName()} dependency {$dependency}."];
-        return $form;
-      }
-    }
-
-    $form = $this->settingsForm($form, $value, $def, $form_type);
-    $form[$def->getName()]['#pattern_setting_definition'] = $def;
-    $form[$def->getName()]['#pattern_definition'] = $this->patternDefinition;
-
-    if (!empty($def->getWeight())) {
-      $form[$def->getName()]['#weight'] = $def->getWeight();
-    }
-
-    if ($def->getAllowToken()) {
-      $form = $this->tokenForm($form, $token_value, $def);
-      if (isset($form[$def->getName() . '_token'])) {
-        $classes = 'js-ui-patterns-settings__wrapper';
-        if (!empty($token_value)) {
-          $classes .= ' js-ui-patterns-settings--token-has-value';
-        }
-        $form[$def->getName()]['#prefix'] = '<div class="' . $classes . '">';
-        $form[$def->getName() . '_token']['#suffix'] = '</div>';
-        $form[$def->getName() . '_token']['#pattern_setting_definition'] = $def;
-        $form[$def->getName(
-        ) . '_token']['#pattern_definition'] = $this->patternDefinition;
-      }
-    }
-    return $form;
-  }
-
-  /**
-   * Set the right group before drupal #group attribute is processed.
-   *
-   * @param array $element
-   *   The form field.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The pattern definition.
-   * @param mixed $form
-   *   The form.
-   *
-   * @return array
-   *   The processed element.
-   */
-  public static function formGroupProcess(
-    array &$element,
-    FormStateInterface $form_state = NULL,
-    &$form = []
-  ) {
-    if (isset($element['#pattern_setting_definition'])) {
-      $setting_definition = $element['#pattern_setting_definition'];
-      if ($setting_definition->getGroup() !== NULL) {
-        $parents = $element['#parents'];
-        array_pop($parents);
-        $parents[] = $setting_definition->getGroup();
-        $element['#group'] = implode('][', $parents);
-      }
-    }
-    return $element;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fieldStorageExposableTypes() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function preprocessExposedField(FieldItemList $items) {
-    foreach ($items as $item) {
-      return $item->value;
-    }
-  }
-
-}
diff --git a/src/Plugin/PatternSettingTypeInterface.php b/src/Plugin/PatternSettingTypeInterface.php
deleted file mode 100644
index 49bf7c3b21967e57adb9abef3d5a8eda912b2ad2..0000000000000000000000000000000000000000
--- a/src/Plugin/PatternSettingTypeInterface.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin;
-
-use Drupal\Component\Plugin\ConfigurableInterface;
-use Drupal\Core\Field\FieldItemList;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-
-/**
- * Defines an interface for UI Patterns setting type plugins.
- */
-interface PatternSettingTypeInterface extends ConfigurableInterface {
-
-  /**
-   * Returns the configuration form elements specific to this settings plugin..
-   *
-   * @param array $form
-   *   The form definition array for the settings configuration form.
-   * @param string $value
-   *   The stored default value.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   * @param string $form_type
-   *   The form type. Either layout or layouts_display or display.
-   *
-   * @return array
-   *   The configuration form.
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type);
-
-  /**
-   * Preprocess setting variable.
-   *
-   * @param string $value
-   *   The stored value.
-   * @param array $context
-   *   Context informations.
-   *   Keys:
-   *    - entity.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   *
-   * @return string
-   *   The processed value.
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def);
-
-  /**
-   * Returns the processed setting variable.
-   *
-   * @param string $value
-   *   The stored value.
-   * @param array $context
-   *   Context informations.
-   *
-   * @return mixed
-   *   The processed value.
-   */
-  public function preprocess($value, array $context);
-
-  /**
-   * Returns the processed setting variable for an exposed field.
-   *
-   * @param \Drupal\Core\Field\FieldItemList $field
-   *   The stored value.
-   *
-   * @return mixed
-   *   The processed value.
-   */
-  public function preprocessExposedField(FieldItemList $field);
-
-  /**
-   * Returns the settings configuration form.
-   *
-   * @param array $form
-   *   The form definition array for the settings configuration form.
-   * @param string $value
-   *   The stored default value.
-   * @param string $token_value
-   *   The stored token value.
-   * @param string $form_type
-   *   The form type. Either layout or layouts_display or display.
-   */
-  public function buildConfigurationForm(array $form, $value, $token_value, $form_type);
-
-  /**
-   * Alter the storage of a connected field storage.
-   *
-   * @param \Drupal\field\Entity\FieldStorageConfig $storage_config
-   *   The storage type.
-   */
-  public function alterFieldStorage(FieldStorageConfig $storage_config);
-
-  /**
-   * Returns the list to matching field types.
-   *
-   * @return array
-   *   The list of exposable field types
-   */
-  public function fieldStorageExposableTypes();
-
-  /**
-   * Allow setting types to alter render element.
-   *
-   * @param string $value
-   *   The value.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $def
-   *   The pattern definition.
-   * @param array $element
-   *   The render element.
-   */
-  public function alterElement($value, PatternDefinitionSetting $def, &$element);
-
-}
diff --git a/src/Plugin/TokenSettingTypeBase.php b/src/Plugin/TokenSettingTypeBase.php
deleted file mode 100644
index 4913ee36797fbf2792091eeec1bee33de361f323..0000000000000000000000000000000000000000
--- a/src/Plugin/TokenSettingTypeBase.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin;
-
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Utility\Token;
-use Drupal\Core\Entity\EntityMalformedException;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Base class for setting types with tokens.
- */
-abstract class TokenSettingTypeBase extends PatternSettingTypeBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The token service.
-   *
-   * @var \Drupal\Core\Utility\Token
-   */
-  protected $tokenService;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    $plugin = parent::create($container, $configuration, $plugin_id, $plugin_definition);
-    $plugin->setTokenService($container->get('token'));
-    return $plugin;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $def = $this->getPatternSettingDefinition();
-    $value = $this->getValue($value);
-    $description = $def->getDescription() != NULL ? $def->getDescription() : "";
-
-    $form[$def->getName()] = [
-      '#type' => 'container',
-    ];
-
-    $form[$def->getName()]['input'] = [
-      '#type' => 'textfield',
-      '#title' => $def->getLabel(),
-      '#description' => $description,
-      '#default_value' => $this->getValue($value),
-      '#attributes' => ['class' => ['js-ui-patterns-settings-show-token-link']],
-    ];
-    $this->handleInput($form[$def->getName()]['input'], $def, $form_type);
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    $return_value = '';
-
-    if (is_array($value) && isset($value['input'])) {
-      $value = $value['input'];
-    }
-
-    if (is_string($value)) {
-      $token_data = [];
-      /** @var \Drupal\Core\Entity\EntityInterface $entity */
-      $entity = $context['entity'] ?? NULL;
-      if ($entity !== NULL) {
-        $token_data[$entity->getEntityTypeId()] = $entity;
-      }
-      try {
-        $return_value = $this->getTokenService()->replace($value, $token_data, ['clear' => TRUE]);
-      }
-      catch (EntityMalformedException $e) {
-        if (!ui_patterns_settings_is_layout_builder_route()) {
-          throw $e;
-        }
-        // Do nothing inside layout builder.
-      }
-    }
-
-    return $return_value;
-  }
-
-  /**
-   * Sets the token service.
-   *
-   * @param \Drupal\Core\Utility\Token $token_service
-   *   The token service.
-   *
-   * @return self
-   *   The token service.
-   */
-  public function setTokenService(Token $token_service) {
-    $this->tokenService = $token_service;
-    return $this;
-  }
-
-  /**
-   * Gets the token service.
-   *
-   * @return \Drupal\Core\Utility\Token
-   *   The token service.
-   */
-  public function getTokenService() {
-    if (!$this->tokenService) {
-      $this->tokenService = \Drupal::token();
-    }
-
-    return $this->tokenService;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php b/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php
deleted file mode 100644
index b006d16d498496b4b127554b44d6cb811c9b47f2..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/AttributesSettingType.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\Component\Utility\Html;
-use Drupal\Core\Template\Attribute;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Attributes setting type.
- *
- * @UiPatternsSettingType(
- *   id = "attributes",
- *   label = @Translation("Attributes")
- * )
- */
-class AttributesSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $value = $this->getValue($value);
-    $description = $def->getDescription() != NULL ? $def->getDescription() : $this->t('E.g. role="navigation" class="class-1"');
-    $form[$def->getName()] = [
-      '#type' => 'textfield',
-      '#title' => $def->getLabel(),
-      '#description' => $description,
-      '#default_value' => $value,
-    ];
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function preprocess($value, array $context) {
-    $value = parent::preprocess($value, $context);
-    $parse_html = '<div ' . $value . '></div>';
-    $attributes = [];
-    foreach (Html::load($parse_html)->getElementsByTagName('div') as $div) {
-      foreach ($div->attributes as $attr) {
-        $attributes[$attr->nodeName] = $attr->nodeValue;
-      }
-    }
-    return new Attribute($attributes);
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php b/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php
deleted file mode 100644
index 2ce436e126a2be707e61fe6e1cb52a78a280f6c6..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/BooleanSettingType.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Checkbox setting type.
- *
- * @UiPatternsSettingType(
- *   id = "boolean",
- *   label = @Translation("true/false")
- * )
- */
-class BooleanSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $value = $this->getValue($value);
-    $form[$def->getName()] = [
-      '#type' => 'checkbox',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $value,
-    ];
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fieldStorageExposableTypes() {
-    return ['boolean'];
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php b/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php
deleted file mode 100644
index 1194c90b1ee2b8a6bbc5d1f44ded53a66c62ede1..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/CheckboxesSettingType.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Checkbox setting type.
- *
- * @UiPatternsSettingType(
- *   id = "checkboxes",
- *   label = @Translation("Checkboxes")
- * )
- */
-class CheckboxesSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    $selected_options = [];
-    $defined_options = $def->getOptions();
-    if (is_array($value)) {
-      foreach ($value as $checkbox_key => $checkbox_value) {
-        if ($checkbox_value != "0" && isset($defined_options[$checkbox_value])) {
-          $selected_options[$checkbox_key] = $checkbox_value;
-        }
-      }
-    }
-    return $selected_options;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $def = $this->getPatternSettingDefinition();
-    $value = $this->getValue($value);
-    if (is_scalar($value)) {
-      $value = [$value];
-    }
-    if (empty($value)) {
-      $value = [];
-    }
-    $form[$def->getName()] = [
-      '#type' => 'checkboxes',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $value,
-      '#options' => $def->getOptions(),
-    ];
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php b/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php
deleted file mode 100644
index 11418240e003be89f4058e8ec4c52863c25a4e23..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/ColorWidgetSettingType.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-
-/**
- * Colorwidget setting type.
- *
- * @UiPatternsSettingType(
- *   id = "colorwidget",
- *   label = @Translation("Color Widget")
- * )
- */
-class ColorWidgetSettingType extends EnumerationSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getSettingTypeDependencies() {
-    return ['colorwidget'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEnumerationType(PatternDefinitionSetting $def) {
-    return 'colorwidget';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function emptyOption() {
-    return [];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    return $value['colorwidget'] ?? NULL;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getValue($value) {
-    if ($value === NULL) {
-      return $this->getPatternSettingDefinition()->getDefaultValue();
-    }
-    else {
-      return $value['colorwidget'] ?? $value;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function handleInput(array &$input, PatternDefinitionSetting $def, $form_type) {
-    parent::handleInput($input, $def, $form_type);
-
-    foreach ($input['#options'] as $key => $label) {
-      $css_color = 'transparent';
-      if (str_contains($label, '/')) {
-        [$label, $css_color] = explode('/', $label);
-      }
-      $input['#colors'][$key] = [
-        'label' => $label,
-        'css_color' => $css_color,
-      ];
-    }
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php b/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php
deleted file mode 100644
index c1b8a2d502771e2160402d9ed413e79b21102efd..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/ColorisWidgetSettingType.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Coloriswidget setting type.
- *
- * @UiPatternsSettingType(
- *   id = "coloriswidget",
- *   label = @Translation("Coloris Widget")
- * )
- */
-class ColorisWidgetSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getSettingTypeDependencies() {
-    return ['coloris'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess(
-    $value,
-    array $context,
-    PatternDefinitionSetting $def
-  ) {
-    if (is_string($value) && !empty($value)) {
-      return $value;
-    }
-    return $value['coloris'] ?? '';
-  }
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $options = $def->getOptions() ?? [];
-    $swatches = array_keys($options);
-    $form[$def->getName()] = [
-      '#type' => 'coloriswidget',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $this->getValue($value),
-      '#swatches' => $swatches
-    ];
-
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php b/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php
deleted file mode 100644
index d21af52dbd5a95906b7f11f6e9a05659e0fa160c..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/EnumerationSettingType.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-
-/**
- * Enumerations setting type.
- *
- * @UiPatternsSettingType(
- *   id = "enumeration",
- *   label = @Translation("Enumeration")
- * )
- */
-class EnumerationSettingType extends EnumerationSettingTypeBase {
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/GroupType.php b/src/Plugin/UiPatterns/SettingType/GroupType.php
deleted file mode 100644
index 3133df969e6b3e5daec47f8fd5a2f0acb9762642..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/GroupType.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Group (fieldgroup/details) setting type.
- *
- * @UiPatternsSettingType(
- *   id = "group",
- *   label = @Translation("Group")
- * )
- */
-class GroupType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $def = $this->getPatternSettingDefinition();
-    $form[$def->getName()] = [
-      '#type' => !empty($def->getValue('group_type')) ? $def->getValue('group_type') : 'fieldset',
-      '#title' => $def->getLabel(),
-    ];
-    if (!empty($def->getDescription())) {
-      $form[$def->getName()]['#description'] = $def->getDescription();
-    }
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    return NULL;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php b/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php
deleted file mode 100644
index 1149ed597cf9feb113dfff27ee3d5492d7dc3063..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/LanguageAccessSettingType.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\LanguageCheckboxesSettingTypeBase;
-
-/**
- * Hides render element for unchecked languages.
- *
- * Setting type to hide the render element if:
- * Elements are checked and the current language is
- * not part of the selection.
- *
- * @UiPatternsSettingType(
- *   id = "language_access",
- *   label = @Translation("Language Access")
- * )
- */
-class LanguageAccessSettingType extends LanguageCheckboxesSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterElement($value, PatternDefinitionSetting $def, &$element) {
-    if ($this->isLayoutBuilderRoute() === FALSE && $value['current_language_selected'] === FALSE) {
-      hide($element);
-    }
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php b/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php
deleted file mode 100644
index 560c2b629f32cd17709c678c1336caaaf6a7700d..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/LanguageCheckboxesSettingType.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-use Drupal\ui_patterns_settings\Plugin\LanguageCheckboxesSettingTypeBase;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Language Checkboxes setting type.
- *
- * Provides an array of:
- * - current_language_selected: True if the
- *   current language is part of the selection
- *   or nothing is selected
- * - current_language: The current language.
- * - selected: Array of selected languages.
- *
- * @UiPatternsSettingType(
- *   id = "language_checkboxes",
- *   label = @Translation("Language checkboxes")
- * )
- */
-class LanguageCheckboxesSettingType extends LanguageCheckboxesSettingTypeBase {
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php b/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php
deleted file mode 100644
index 680d5b3245d9051de44cf7e7d07568c3a0485ec0..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/MediaLibrarySettingType.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\Component\Utility\UrlHelper;
-use Drupal\Core\Field\FieldItemList;
-use Drupal\Core\Url;
-use Drupal\media\Entity\Media;
-use Drupal\media_library\MediaLibraryUiBuilder;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Media Library setting type.
- *
- * @UiPatternsSettingType(
- *   id = "media_library",
- *   label = @Translation("Media Library")
- * )
- */
-class MediaLibrarySettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getSettingTypeDependencies() {
-    return ['media_library_form_element', 'media_library_edit'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    if (intval($value)) {
-      $media_id = $value;
-      $media = Media::load($media_id);
-      if ($media === NULL) {
-        return '';
-      }
-    }
-    else {
-      return '';
-    }
-
-    $image_style = $def->getValue('image_style');
-    if (empty($image_style) === FALSE) {
-      $image_uri = $media->field_media_image->entity !== NULL ? $media->field_media_image->entity->uri->value : NULL;
-      if ($image_uri !== NULL) {
-        return [
-          '#theme' => 'image_style',
-          '#style_name' => $image_style,
-          '#uri' => $image_uri,
-        ];
-      }
-    }
-
-    $responsive_image_style = $def->getValue('responsive_image_style');
-    if (empty($responsive_image_style) === FALSE) {
-      $image_uri = $media->field_media_image->entity !== NULL ? $media->field_media_image->entity->uri->value : NULL;
-      if ($image_uri !== NULL) {
-        return [
-          '#theme' => 'responsive_image',
-          '#responsive_image_style_id' => $responsive_image_style,
-          '#uri' => $image_uri,
-        ];
-      }
-    }
-
-    $view_mode = $def->getValue('view_mode');
-    if (empty($view_mode)) {
-      return $value;
-    }
-    $view_mode_builder = $this->entityTypeManager->getViewBuilder('media');
-    return $view_mode_builder->view($media, $view_mode);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fieldStorageExposableTypes() {
-    return ['entity_reference'];
-  }
-
-  public function preprocessExposedField(FieldItemList $items) {
-    foreach ($items as $item) {
-      if ($item->entity !== NULL) {
-        return $item->entity->id();
-      }
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $media_id = $this->getValue($value);
-
-    $media = $media_id !== NULL && is_numeric($media_id) ? Media::load($media_id) : NULL;
-    $media_id = $media !== NULL ? $media_id : NULL;
-    $form[$def->getName()] = [
-      '#type' => 'media_library',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $media_id,
-    ];
-    if ($media !== NULL && $def->getValue('show_edit_button') === TRUE) {
-      $form[$def->getName()]['#ui_patterns_media_edit_button'] = TRUE;
-    }
-
-    $allowed_bundles = $def->getValue('allowed_bundles');
-    if (!empty($allowed_bundles)) {
-      $form[$def->getName()]['#allowed_bundles'] = $allowed_bundles;
-    }
-    else {
-      $form[$def->getName()]['#allowed_bundles'] = ['image'];
-    }
-    $cardinality = $def->getValue('cardinality');
-    if (!empty($cardinality)) {
-      $form[$def->getName()]['#cardinality'] = $cardinality;
-    }
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/NumberSettingType.php b/src/Plugin/UiPatterns/SettingType/NumberSettingType.php
deleted file mode 100644
index 99fd99ccc54386ec265f1ee8f79a2514893ce030..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/NumberSettingType.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Number setting type.
- *
- * @UiPatternsSettingType(
- *   id = "number",
- *   label = @Translation("Number")
- * )
- */
-class NumberSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $form[$def->getName()] = [
-      '#type' => 'number',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $this->getValue($value),
-    ];
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/PublishSettingType.php b/src/Plugin/UiPatterns/SettingType/PublishSettingType.php
deleted file mode 100644
index a96a81b105ac55bab123c8373363cfc33743d58b..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/PublishSettingType.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Unpublish render array.
- *
- * @UiPatternsSettingType(
- *   id = "publish",
- *   label = @Translation("Publish ")
- * )
- */
-class PublishSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function alterElement($value, PatternDefinitionSetting $def, &$element) {
-    if ($this->isLayoutBuilderRoute() === FALSE && $value === FALSE) {
-      hide($element);
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    if ($value === NULL) {
-      return $def->getDefaultValue();
-    }
-    return $value !== 0;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $form[$def->getName()] = [
-      '#type' => 'checkbox',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $this->getValue($value),
-    ];
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php b/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php
deleted file mode 100644
index 14b933785ae087f47499eac34066ba2eafc0bea4..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/RadiosSettingType.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-
-/**
- * Radios setting type.
- *
- * @UiPatternsSettingType(
- *   id = "radios",
- *   label = @Translation("Radios")
- * )
- */
-class RadiosSettingType extends EnumerationSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEnumerationType(PatternDefinitionSetting $def) {
-    return 'radios';
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/SelectSettingType.php b/src/Plugin/UiPatterns/SettingType/SelectSettingType.php
deleted file mode 100644
index 8a92222f651d85001b77e279a725585f854248ef..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/SelectSettingType.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\EnumerationSettingTypeBase;
-
-/**
- * Select setting type.
- *
- * @UiPatternsSettingType(
- *   id = "select",
- *   label = @Translation("Select")
- * )
- */
-class SelectSettingType extends EnumerationSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getEnumerationType(PatternDefinitionSetting $def) {
-    return 'select';
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php b/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php
deleted file mode 100644
index 7f1ab2a6490e5bc1363c2eb3b128803bb7910072..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/TextfieldSettingType.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-
-/**
- * Textfield setting type.
- *
- * @UiPatternsSettingType(
- *   id = "textfield",
- *   label = @Translation("Textfield")
- * )
- */
-class TextfieldSettingType extends PatternSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsForm(array $form, $value, PatternDefinitionSetting $def, $form_type) {
-    $form[$def->getName()] = [
-      '#type' => 'textfield',
-      '#title' => $def->getLabel(),
-      '#description' => $def->getDescription(),
-      '#default_value' => $this->getValue($value),
-    ];
-
-    $this->handleInput($form[$def->getName()], $def, $form_type);
-    return $form;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/TokenSettingType.php b/src/Plugin/UiPatterns/SettingType/TokenSettingType.php
deleted file mode 100644
index 2f53d55f2a62790b8339aa26bd080156d71545b3..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/TokenSettingType.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\ui_patterns_settings\Plugin\TokenSettingTypeBase;
-
-/**
- * Token setting type.
- *
- * @UiPatternsSettingType(
- *   id = "token",
- *   label = @Translation("Token")
- * )
- */
-class TokenSettingType extends TokenSettingTypeBase {
-
-}
diff --git a/src/Plugin/UiPatterns/SettingType/UrlSettingType.php b/src/Plugin/UiPatterns/SettingType/UrlSettingType.php
deleted file mode 100644
index 8d415a753fa23eeae000d3ce78a4307dbe083c9f..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/SettingType/UrlSettingType.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UIPatterns\SettingType;
-
-use Drupal\Core\Field\FieldItemList;
-use Drupal\Core\Url;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\ui_patterns_settings\Plugin\TokenSettingTypeBase;
-
-/**
- * Url setting type.
- *
- * @UiPatternsSettingType(
- *   id = "url",
- *   label = @Translation("Url")
- * )
- */
-class UrlSettingType extends TokenSettingTypeBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function fieldStorageExposableTypes() {
-    return ['link'];
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function preprocessExposedField(FieldItemList $items) {
-    foreach ($items as $item) {
-      return $item->getUrl();
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function settingsPreprocess($value, array $context, PatternDefinitionSetting $def) {
-    $value = parent::settingsPreprocess($value, $context, $def);
-    if (empty($value)) {
-      return "";
-    }
-    try {
-      $url = Url::fromUri($value)->toString();
-    }
-    catch (\Exception $e) {
-      // Not a valid uri. Try user input:
-      try {
-        $url = Url::fromUserInput($value)->toString();
-      }
-      catch (\Exception $e) {
-        // Not a valid url.
-        return '#';
-      }
-    }
-    return $url;
-  }
-
-}
diff --git a/src/Plugin/UiPatterns/Source/MediaSource.php b/src/Plugin/UiPatterns/Source/MediaSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..a6ac2dc2a34115d6092c563004abab3145e5b97b
--- /dev/null
+++ b/src/Plugin/UiPatterns/Source/MediaSource.php
@@ -0,0 +1,143 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\ui_patterns_settings\Plugin\UiPatterns\Source;
+
+use Drupal\Core\Entity\EntityTypeManager;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\media\Entity\Media;
+use Drupal\ui_patterns\Attribute\Source;
+use Drupal\ui_patterns\SourcePluginBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Plugin implementation of the source.
+ */
+#[Source(
+  id: 'media',
+  label: new TranslatableMarkup('Media'),
+  description: new TranslatableMarkup('Provides a Media source..'),
+  prop_types: ['slot']
+)]
+class MediaSource extends SourcePluginBase {
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManager
+   */
+  protected ?EntityTypeManager $entityTypeManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(
+    ContainerInterface $container,
+    array $configuration,
+    $plugin_id,
+    $plugin_definition,
+  ) {
+    $plugin = parent::create(
+      $container,
+      $configuration,
+      $plugin_id,
+      $plugin_definition
+    );
+    $plugin->entityTypeManager = $container->get('entity_type.manager');
+    return $plugin;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultSettings(): array {
+    return [
+      'media' => NULL,
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPropValue(): mixed {
+
+    $media = $this->getMedia();
+    if ($media === NULL) {
+     return '';
+    }
+    $view_mode = $this->getSetting('view_mode') ?? 'default';
+    if ($view_mode === NULL) {
+      return $media->id();
+    }
+    $view_mode_builder = $this->entityTypeManager->getViewBuilder('media');
+    return $view_mode_builder->view($media, $view_mode);
+
+  }
+
+  /**
+   * Returns the referenced media object.
+   */
+  protected function getMedia(): ?Media {
+    $media_id = $this->getSetting('media')['media_library_selection'] ?? NULL;
+    return $media_id !== NULL && is_numeric($media_id) ? Media::load($media_id) : NULL;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function configureForm(array $form, FormStateInterface $form_state): array {
+    $configuration = $this->getConfiguration();
+    $form = parent::configureForm($form, $form_state);
+    /** @var \Drupal\media\Entity\MediaType $bundles */
+    $bundles = $this->entityTypeManager->getStorage('media_type')->loadMultiple();
+    $bundle_options = [];
+    foreach ($bundles as $bundle_id => $bundle) {
+      $bundle_options[$bundle_id] = $bundle->label();
+    }
+    $form['allowed_bundles'] = [
+      '#type' => 'checkboxes',
+      '#title' => $this->t('Bundles'),
+      '#options' => $bundle_options,
+      '#default_value' => $configuration['configure']['allowed_bundles'] ?? FALSE,
+    ];
+    $form['show_edit_button'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show Edit button'),
+      '#default_value' => $configuration['configure']['show_edit_button'] ?? FALSE,
+    ];
+
+    return $form;
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function settingsForm(array $form, FormStateInterface $form_state): array {
+    $form = parent::settingsForm($form, $form_state);
+    $configure = $this->getConfiguration()['configure'];
+    $media = $this->getMedia();
+    $media_id = $media?->id();
+    $form['media'] = [
+      '#type' => 'media_library',
+      '#default_value' => $media_id,
+    ];
+
+    $this->addRequired($form['media']);
+    if ($media !== NULL && isset($configure['show_edit_button'])
+      && $configure['show_edit_button'] === TRUE) {
+      $form['media']['#ui_patterns_media_edit_button'] = TRUE;
+    }
+
+    $allowed_bundles = $configure['allowed_bundles'] ?? ['image'];
+    if (!empty($allowed_bundles)) {
+      $form['media']['#allowed_bundles'] = $allowed_bundles;
+    }
+    else {
+      $form['media']['#allowed_bundles'] = ['image'];
+    }
+    $form['media']['#cardinality'] = $configure['cardinality'] ?? 1;
+    return $form;
+  }
+
+}
diff --git a/src/Plugin/UiPatterns/Source/SettingFieldSource.php b/src/Plugin/UiPatterns/Source/SettingFieldSource.php
deleted file mode 100644
index 239b69ce1325a62ff6d6436d27a9533450c852bc..0000000000000000000000000000000000000000
--- a/src/Plugin/UiPatterns/Source/SettingFieldSource.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\Plugin\UiPatterns\Source;
-
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\ui_patterns\Plugin\PatternSourceBase;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Defines UI Patterns Settings fields source plugin.
- *
- * @UiPatternsSource(
- *   id = "settings_field",
- *   label = @Translation("Seting Fields (UI Pattern settings)"),
- *   provider = "ui_patterns_settings",
- *   tags = {
- *     "field_properties"
- *   }
- * )
- */
-class SettingFieldSource extends PatternSourceBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static(
-      $configuration,
-      $plugin_id,
-      $plugin_definition
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getSourceFields() {
-    $sources = [];
-    return $sources;
-  }
-
-}
diff --git a/src/TwigExtension/UIPatternsSettingsExtension.php b/src/TwigExtension/UIPatternsSettingsExtension.php
deleted file mode 100644
index 66b9cad343ee0c5eb1960d3ace526d04150df5ce..0000000000000000000000000000000000000000
--- a/src/TwigExtension/UIPatternsSettingsExtension.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings\TwigExtension;
-
-use Drupal\ui_patterns\UiPatterns;
-use Drupal\ui_patterns_settings\UiPatternsSettings;
-use Twig\Extension\AbstractExtension;
-use Twig\TwigFunction;
-
-/**
- * UI Patterns Twig Extension.
- *
- * @package Drupal\ui_patterns_settings\TwigExtension
- */
-class UIPatternsSettingsExtension extends AbstractExtension {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getName() {
-    return 'ui_patterns_settings';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFunctions() {
-    return [
-      new TwigFunction(
-        'pattern_configuration',
-        [$this, 'patternConfiguration']
-      ),
-    ];
-  }
-
-  /**
-   * Returns pattern configuration.
-   *
-   * @param string $pattern_id
-   *   The pattern id.
-   * @param string $variant_id
-   *   The variant id.
-   * @param string $config_name
-   *   The config name.
-   *
-   * @return mixed|null
-   *   The pattern config
-   */
-  public function patternConfiguration($pattern_id, $variant_id, $config_name) {
-    $definition = UiPatterns::getPatternDefinition($pattern_id);
-    if ($definition !== NULL) {
-      return UiPatternsSettings::getPatternConfiguration($definition, $variant_id, $config_name);
-    }
-  }
-
-}
diff --git a/src/UiPatternsSettings.php b/src/UiPatternsSettings.php
deleted file mode 100644
index b1c578db8dda682f8f623a3d5e89d92f13af8007..0000000000000000000000000000000000000000
--- a/src/UiPatternsSettings.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings;
-
-use Drupal\Core\Entity\ContentEntityBase;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\ui_patterns\Definition\PatternDefinition;
-use Drupal\ui_patterns\UiPatterns;
-use Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting;
-use Drupal\Core\Entity\EntityMalformedException;
-
-/**
- * UI Patterns setting factory class.
- *
- * @package Drupal\ui_patterns_settings
- */
-class UiPatternsSettings {
-
-  /**
-   * Cached pattern definition settings.
-   *
-   * @var \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting[]
-   */
-  private static $settings;
-
-  /**
-   * Get pattern manager setting instance.
-   *
-   * @return \Drupal\ui_patterns_settings\UiPatternsSettingsManager
-   *   UI Patterns setting manager instance.
-   */
-  public static function getManager() {
-    return \Drupal::service('plugin.manager.ui_patterns_settings');
-  }
-
-  /**
-   * Get config manager instance.
-   *
-   * @return \Drupal\ui_patterns_settings\ConfigManager
-   *   UI Patterns setting config manager.
-   */
-  public static function getConfigManager() {
-    return \Drupal::service('ui_patterns_settings.config_manager');
-  }
-
-  /**
-   * Preprocess exposed settings variables.
-   *
-   * @param \Drupal\Core\Entity\ContentEntityBase $entity
-   *   The entity.
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The pattern definition.
-   *
-   * @return array
-   *   The processed variables.
-   */
-  private static function preprocessExposedFields(ContentEntityBase $entity, PatternDefinition $definition) {
-    $processed_settings = [];
-    $mapping = self::getConfigManager()->getMappingByType($entity->getEntityTypeId());
-    foreach ($mapping as $field => $pattern_setting) {
-      if ($entity->hasField($field)) {
-        [$pattern_id, $setting_id] = explode('::', $pattern_setting);
-        if ($setting_id !== 'variant') {
-          $pattern_definition = UiPatterns::getPatternDefinition($pattern_id);
-          $setting_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_id);
-          if ($setting_definition !== NULL) {
-            $settingType = UiPatternsSettings::createSettingType($definition, $setting_definition);
-            $processed_settings[$setting_id] = $settingType->preprocessExposedField($entity->get($field));
-          }
-        }
-      }
-    }
-    return $processed_settings;
-  }
-
-  /**
-   * Preprocess all settings variables.
-   *
-   * @param string $pattern_id
-   *   Pattern ID for which to preprocess.
-   * @param array $settings
-   *   The stored settings.
-   * @param string $variant
-   *   The variant.
-   * @param bool $preview
-   *   Is preview.
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity of the pattern. Useful for dynamic settings.
-   * @param array $element
-   *   The render element.
-   *
-   * @return array
-   *   The processed settings.
-   */
-  public static function preprocess($pattern_id, array $settings, $variant, $preview, EntityInterface $entity = NULL, array &$element = NULL) {
-    $processed_settings = [];
-    $definition = UiPatterns::getPatternDefinition($pattern_id);
-    $context = [];
-    $context['entity'] = $entity;
-    if ($entity instanceof ContentEntityBase) {
-      $processed_settings = self::preprocessExposedFields($entity, $definition);
-    }
-    $settings_definition = UiPatternsSettings::getPatternDefinitionSettings($definition);
-    foreach ($settings_definition as $key => $setting_definition) {
-      if ($setting_definition->getForcedValue()) {
-        $value = $setting_definition->getForcedValue();
-      }
-      elseif (!empty($settings[$key . '_token'])) {
-        $token_value = $settings[$key . '_token'];
-        $token_data = [];
-        if ($entity !== NULL) {
-          $token_data[$entity->getEntityTypeId()] = $entity;
-        }
-        try {
-          $value = \Drupal::token()
-            ->replace($token_value, $token_data, ['clear' => TRUE]);
-        }
-        catch (EntityMalformedException $e) {
-          if (!ui_patterns_settings_is_layout_builder_route()) {
-            throw $e;
-          }
-          // Do nothing inside layout builder.
-        }
-      }
-      // Use exposed field value if no other setting is provided.
-      elseif (isset($processed_settings[$key]) && empty($settings[$key])) {
-        $value = $processed_settings[$key];
-      }
-      elseif (isset($settings[$key])) {
-        $value = $settings[$key];
-      }
-      elseif ($preview && !empty($setting_definition->getPreview())) {
-        $value = $setting_definition->getPreview();
-      }
-      else {
-        $value = $setting_definition->getDefaultValue();
-      }
-      if (!empty($variant) && $definition->hasVariant($variant)) {
-        $variant_ob = $definition->getVariant($variant);
-        if ($variant_ob != NULL) {
-          $variant_ary = $variant_ob->toArray();
-          if (isset($variant_ary['settings']) && isset($variant_ary['settings'][$key])) {
-            // Overwrite settings definition.
-            // Allow variants to overwrite settings configuration.
-            if (isset($variant_ary['settings'][$key]['definition']) && is_array($variant_ary['settings'][$key]['definition'])) {
-              $value = $variant_ary['settings'][$key]['value'] ?? $value;
-              if (isset($variant_ary['settings'][$key]['definition'])) {
-                $setting_definition = clone $setting_definition;
-                $setting_definition->setDefinitions($variant_ary['settings'][$key]['definition']);
-              }
-            }
-            else {
-              $value = $variant_ary['settings'][$key];
-            }
-          }
-        }
-      }
-      $setting_type = UiPatternsSettings::createSettingType($definition, $setting_definition);
-      $processed_value = $setting_type->preprocess($value, $context);
-      $setting_type->alterElement($processed_value, $setting_definition, $element);
-      $processed_settings[$key] = $processed_value;
-    }
-    return $processed_settings;
-
-  }
-
-  /**
-   * Exposed pattern setting definitions.
-   *
-   * Returns a list of all exposed pattern setting definitions
-   * filtered by the provided field storage type.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The pattern definition.
-   * @param string $field_storage_type
-   *   The field storage type.
-   *
-   * @return array
-   *   The configuration array.
-   *   Key: pattern::setting.
-   *   Keys:
-   *     'label' = 'The setting label'
-   *     'definition' = The pattern definition
-   */
-  public static function getExposedPatternDefinition(PatternDefinition $definition, $field_storage_type) {
-    $additional = $definition->getAdditional();
-    $exposed = [];
-    if (isset($additional['allow_variant_expose']) &&
-      $additional['allow_variant_expose'] === TRUE && $field_storage_type === 'list_string') {
-      $exposed[$definition->id() . '::variant'] = [
-        'label' => $definition->getLabel() . ' Variants',
-        'definition' => $definition,
-      ];
-    }
-
-    $settings = self::getPatternDefinitionSettings($definition);
-    /** @var \Drupal\ui_patterns\Definition\PatternDefinitionSetting $setting */
-    foreach ($settings as $setting) {
-      if ($setting->allowExpose()
-      ) {
-        $setting_type = self::createSettingType($definition, $setting);
-        if (in_array($field_storage_type, $setting_type->fieldStorageExposableTypes())) {
-          $exposed[$definition->id() . '::' . $setting->getName()] = [
-            'label' => $definition->getLabel() . ' ' . $setting->getLabel(),
-            'definition' => $definition,
-          ];
-        }
-      }
-    }
-    return $exposed;
-  }
-
-  /**
-   * Get pattern configuration for a pattern definition.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The definition.
-   * @param string $variant
-   *   The pattern variant.
-   * @param string $name
-   *   The configuration key.
-   *
-   * @return mixed
-   *   Setting pattern configuration.
-   */
-  public static function getPatternConfiguration(PatternDefinition $definition, $variant = NULL, $name = NULL) {
-    $additional = $definition->getAdditional();
-    $configuration = $additional['configuration'] ?? [];
-    // Check for variant configuration.
-    if (!empty($variant)) {
-      $variant_ob = $definition->getVariant($variant);
-      if ($variant_ob != NULL) {
-        $variant_ary = $variant_ob->toArray();
-        if (isset($variant_ary['configuration'])) {
-          $configuration = array_merge($configuration, $variant_ary['configuration']);
-        }
-      }
-    }
-    // Check for settings configuration.
-    if (isset($additional['settings'][$name]['options'])) {
-      foreach ($additional['settings'][$name]['options'] as $option_key => $option_value) {
-        if (is_array($option_value) && isset($option_value['configuration'])) {
-          $configuration[$name][$option_key] = $option_value['configuration'];
-        }
-      }
-    }
-    if ($name !== NULL && isset($configuration[$name])) {
-      return $configuration[$name];
-    }
-    return $configuration;
-  }
-
-  /**
-   * Get setting definition for a pattern and a setting name.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The pattern definition.
-   * @param string $setting_name
-   *   The setting name.
-   */
-  public static function getPatternDefinitionSetting(PatternDefinition $definition, $setting_name) {
-    $definitions = self::getPatternDefinitionSettings($definition);
-    return $definitions[$setting_name] ?? NULL;
-  }
-
-  /**
-   * Get setting definitions for a pattern definition.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $definition
-   *   The definition.
-   *
-   * @return \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting[]
-   *   Setting pattern definitons.
-   */
-  public static function getPatternDefinitionSettings(PatternDefinition $definition) {
-    if (isset(self::$settings[$definition->id()])) {
-      return self::$settings[$definition->id()];
-    }
-    $additional = $definition->getAdditional();
-    $settings_ary = $additional['settings'] ?? [];
-    $settings = [];
-    if (!empty($settings_ary)) {
-      foreach ($settings_ary as $key => $setting_ary) {
-        $settings[$key] = new PatternDefinitionSetting($key, $setting_ary);
-      }
-    }
-    self::$settings[$definition->id()] = $settings;
-    return $settings;
-  }
-
-  /**
-   * Create setting type plugin.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $pattern_definition
-   *   The pattern definition.
-   * @param \Drupal\ui_patterns_settings\Definition\PatternDefinitionSetting $setting_defintion
-   *   The setting definition.
-   * @param string $variant
-   *   The variant.
-   *
-   * @return \Drupal\ui_patterns_settings\Plugin\PatternSettingTypeInterface
-   *   UI Patterns setting manager instance.
-   */
-  public static function createSettingType(PatternDefinition $pattern_definition, PatternDefinitionSetting $setting_defintion, $variant = NULL) {
-    $configuration = [];
-    $configuration['pattern_setting_definition'] = $setting_defintion;
-    $configuration['pattern_definition'] = $pattern_definition;
-    $configuration['variant'] = $variant;
-
-    return \Drupal::service('plugin.manager.ui_patterns_settings')
-      ->createInstance($setting_defintion->getType(), $configuration);
-  }
-
-}
diff --git a/src/UiPatternsSettingsManager.php b/src/UiPatternsSettingsManager.php
deleted file mode 100644
index 73f131d5b724c4ad1cbd9b3dcf75a7a64c661b1d..0000000000000000000000000000000000000000
--- a/src/UiPatternsSettingsManager.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace Drupal\ui_patterns_settings;
-
-use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\Component\Plugin\PluginManagerInterface;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Plugin\DefaultPluginManager;
-use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\ui_patterns\Definition\PatternDefinition;
-
-/**
- * Provides the UI Patterns Settings plugin manager.
- */
-class UiPatternsSettingsManager extends DefaultPluginManager implements PluginManagerInterface {
-
-  use StringTranslationTrait;
-
-  /**
-   * UiPatternsSettingsManager constructor.
-   */
-  public function __construct(\Traversable $namespaces, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend) {
-    parent::__construct('Plugin/UiPatterns/SettingType', $namespaces, $module_handler, 'Drupal\ui_patterns_settings\SettingTypeInterface', 'Drupal\ui_patterns_settings\Annotation\UiPatternsSettingType');
-    $this->moduleHandler = $module_handler;
-    $this->alterInfo('ui_patterns_settings_info');
-    $this->setCacheBackend($cache_backend, 'ui_patterns_settings', ['ui_patterns_settings']);
-  }
-
-  /**
-   * Returns TRUE if a variant token can configured.
-   *
-   * @param \Drupal\ui_patterns\Definition\PatternDefinition $pattern_definition
-   *   The pattern definition.
-   *
-   * @return bool
-   *   Returns TRUE if a variant token can configured.
-   */
-  public static function allowVariantToken(PatternDefinition $pattern_definition) {
-    $ary = $pattern_definition->getAdditional();
-    if (isset($ary['allow_variant_token']) && $ary['allow_variant_token'] === TRUE) {
-      return TRUE;
-    }
-    else {
-      return FALSE;
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function createInstance($plugin_id, array $configuration = []) {
-    $plugin_definition = $this->getDefinition($plugin_id);
-    $plugin_class = DefaultFactory::getPluginClass($plugin_id, $plugin_definition);
-    // If the plugin provides a factory method, pass the container to it.
-    if (is_subclass_of($plugin_class, 'Drupal\Core\Plugin\ContainerFactoryPluginInterface')) {
-      $plugin = $plugin_class::create(\Drupal::getContainer(), $configuration, $plugin_id, $plugin_definition);
-    }
-    else {
-      $plugin = new $plugin_class($configuration, $plugin_id, $plugin_definition);
-    }
-    return $plugin;
-  }
-
-}
diff --git a/tests/fixtures/TestDataSet.yml b/tests/fixtures/TestDataSet.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5911789820212da2462de948211d262bc1a374d9
--- /dev/null
+++ b/tests/fixtures/TestDataSet.yml
@@ -0,0 +1,20 @@
+---
+media_main:
+  component:
+    component_id: ui_patterns_test:test-component
+    slots:
+      slot:
+        sources:
+          -
+            source_id: media
+            source:
+              media_id: 112
+
+  output:
+    slots:
+      slot:
+        -
+          normalized_value: '12'
+
+
+  entity: {}
diff --git a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig b/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig
deleted file mode 100644
index 1ed615f536a0978c45bc30220fb0a371e0f4fadc..0000000000000000000000000000000000000000
--- a/tests/modules/ui_patterns_settings_render_test/templates/pattern-foo-settings.html.twig
+++ /dev/null
@@ -1,18 +0,0 @@
-{% set configuration = pattern_configuration('foo_settings', '', 'config') %}
-<div style="border: 1px solid blue">
-    <div class="textfield">Textfield: {{ textfield }}</div>
-    <div class="number">Number: {{ number }}</div>
-    <div class="token">Token: {{ token }}</div>
-    <div class="boolean">Boolean: {{ boolean }}</div>
-    <div class="url">Url: {{ url }}</div>
-    <div class="select">Select: {{ select }}</div>
-  <div class="enumeration">Enumeration: {{ enumeration }}</div>
-    <div class="checkboxes">Checkboxes: {% for i in checkboxes %}  {{- i -}} {% endfor %}</div>
-    <div class="language_checkboxes">language_checkboxes: {% for index, language in language_checkboxes.selected %}  {{- index -}}-{{ language }} {% endfor %}</div>
-    <div class="attributes">Attributes: {{ attributes }}</div>
-    <div class="config">Configuration: {{ configuration }}</div>
-    <div class="group_sub">Group sub: {{ group_sub }}</div>
-  <div class="media_style">Media Style: {{ media_style }}</div>
-  <div class="select_config">select_config: {{ pattern_configuration('foo_settings', '', 'select_config')[select_config] }}</div>
-
-</div>
diff --git a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml b/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml
deleted file mode 100644
index 7948673e49421e439e9cc710e3400b4c93bed326..0000000000000000000000000000000000000000
--- a/tests/modules/ui_patterns_settings_render_test/templates/settings.ui_patterns.yml
+++ /dev/null
@@ -1,140 +0,0 @@
-foo_settings:
-  label: Foo settings
-  fields:
-    dummy:
-      type: text
-      label: Dummy
-  allow_variant_token: true
-  allow_variant_expose: true
-  variants:
-    default:
-      label: Default
-    blue:
-      label: Blue
-      settings:
-        textfield: blue
-        media_style:
-          definition:
-            image_style: 'large'
-  settings:
-    textfield:
-      type: textfield
-      label: Textfield
-      allow_token: true
-      preview: text preview
-      required: true
-    number:
-      type: number
-      label: Number
-      preview: 10
-      required: true
-    token:
-      type: token
-      label: Token
-      preview: Token
-    media_library:
-      type: media_library
-      label: Media Library
-      view_mode: 'default'
-    media_style:
-      type: media_library
-      label: Media Style
-      allow_expose: true
-      image_style: 'medium'
-    url:
-      type: url
-      label: Url
-      preview: Url
-      allow_expose: true
-      expose_as_field: true
-    boolean:
-      type: boolean
-      allow_token: true
-      label: Boolean
-      preview: 1
-      allow_expose: true
-    colorwidget:
-      type: colorwidget
-      label: Colorwidget
-      options:
-        key: value/#000000
-        white: White/#ffffff
-    enumeration:
-      type: enumeration
-      enumeration_type: select
-      label: Enumeration
-      options:
-        key: value
-    select:
-      type: select
-      label: Select
-      allow_expose: true
-      options:
-        key: value
-        key2: value2
-    select_config:
-      type: select
-      label: Select Config
-      options:
-        key:
-          label: select_config 1
-          configuration: config key
-        key2:
-          label: select_config 2
-          configuration: config key2
-          condition:
-            variant: blue
-    language_checkboxes:
-      type: language_checkboxes
-      label: Language selection
-    language_access:
-      type: language_access
-      label: Language access
-    publish:
-      type: publish
-      label: Publish
-      default_value: true
-    checkboxes:
-      type: checkboxes
-      label: Checkboxes
-      options:
-        box1: Box1
-        box2: Box2
-    attributes:
-      type: attributes
-      label: Attributes
-    group:
-      type: group
-      label: Group
-      group_type: container
-    group_sub:
-      type: textfield
-      label: Textfield
-      group: group
-    tabs:
-      type: group
-      label: Tabs
-      group_type: horizontal_tabs
-    tab:
-      type: group
-      label: Tab
-      group_type: details
-      group: tabs
-    tab_2:
-      type: group
-      label: Tab 2
-      group_type: details
-      group: tabs
-    tab_element:
-      type: textfield
-      label: Textfield
-      group: tab
-    tab_element2:
-      type: select
-      label: Textfield 2
-      group: tab_2
-      options:
-        option1: Option 1
-
-  configuration:
-    config: config_value
diff --git a/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml b/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml
deleted file mode 100644
index 047efdc35fc22aa2c40cfe2c375a4eee643d7f69..0000000000000000000000000000000000000000
--- a/tests/modules/ui_patterns_settings_render_test/ui_patterns_settings_render_test.info.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-type: module
-name: 'UI Patterns Settings Render Test'
-core_version_requirement: ^8 || ^9 || ^10
diff --git a/tests/src/Functional/UiPatternsSettingsRenderTest.php b/tests/src/Functional/UiPatternsSettingsRenderTest.php
deleted file mode 100644
index aa7aaf8abdb9e4ed2e5d75761c367beccc4ea79c..0000000000000000000000000000000000000000
--- a/tests/src/Functional/UiPatternsSettingsRenderTest.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-namespace Drupal\Tests\ui_patterns_settings\Functional;
-
-use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\ui_patterns\Traits\TwigDebugTrait;
-
-/**
- * Test pattern preview rendering.
- *
- * @group ui_patterns_setting
- * @name ui_patterns_setting
- */
-class UiPatternsSettingsRenderTest extends BrowserTestBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  protected $defaultTheme = 'stable';
-
-  /**
-   * Disable schema validation when running tests.
-   *
-   * @var bool
-   *
-   * @todo Fix this by providing actual schema validation.
-   */
-  protected $strictConfigSchema = FALSE;
-
-  use TwigDebugTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected static $modules = [
-    'node',
-    'ui_patterns',
-    'ui_patterns_ds',
-    'ui_patterns_library',
-    'ui_patterns_layouts',
-    'ui_patterns_settings',
-    'field_ui',
-    'token',
-    'ds',
-    'ui_patterns_settings_render_test',
-  ];
-
-  /**
-   * Tests pattern preview suggestions.
-   */
-  public function testRender() {
-
-    $assert_session = $this->assertSession();
-
-    $this->drupalCreateContentType(['type' => 'article']);
-    $created_node = $this->drupalCreateNode([
-      'title' =>
-      t('Hello Settings'),
-      'type' => 'article',
-    ]);
-    $this->enableTwigDebugMode();
-
-    $user = $this->drupalCreateUser([], NULL, TRUE);
-    $this->drupalLogin($user);
-
-    // Define mapping for each setting type.
-    $mappings = [
-      '[textfield]' => ['input' => 'Text', 'result' => 'Textfield: Text'],
-      '[number]' => ['input' => '10', 'result' => 'Number: 10'],
-      '[token][input]' => ['input' => '[node:nid]', 'result' => 'Token: 1'],
-      '[boolean]' => ['input' => '1', 'result' => 'Boolean: 1'],
-      '[select]' => ['input' => 'key', 'result' => 'Select: key'],
-      '[select_config]' => ['input' => 'key', 'result' => 'select_config: config key'],
-      '[enumeration]' => ['input' => 'key', 'result' => 'Enumeration: key'],
-      /*'[colorwidget][colorwidget]' => [
-        'input' => 'key',
-        'result' => 'Colorwidget: key',
-      ],*/
-      '[checkboxes][box1]' => ['input' => TRUE, 'result' => 'Checkboxes: Box1'],
-      '[attributes]' => [
-        'input' => 'class="class"',
-        'result' => 'Attributes:  class="class"',
-      ],
-      '[group_sub]' => [
-        'input' => 'group_sub',
-        'result' => 'Group sub: group_sub',
-      ],
-    ];
-
-    // Select the layout.
-    $edit = [
-      'ds_layout' => 'pattern_foo_settings',
-    ];
-    $this->drupalGet('/admin/structure/types/manage/article/display');
-    $this->submitForm($edit, 'Save');
-
-    // Fill settings.
-    $edit = [];
-    foreach ($mappings as $key => $mapping) {
-      $edit['layout_configuration[pattern][settings]' . $key] = $mapping['input'];
-    }
-    $this->drupalGet('/admin/structure/types/manage/article/display');
-    $this->submitForm($edit, 'Save');
-
-    // Check values.
-    $this->drupalGet('/node/' . $created_node->id());
-    foreach ($mappings as $key => $mapping) {
-      $assert_session->responseContains($mapping['result']);
-    }
-    $assert_session->responseContains('Configuration: config_value');
-  }
-
-}
diff --git a/tests/src/Kernel/Source/MediaSourceTest.php b/tests/src/Kernel/Source/MediaSourceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..aecb567782409b3a39263178ffb41d0297cc7dda
--- /dev/null
+++ b/tests/src/Kernel/Source/MediaSourceTest.php
@@ -0,0 +1,32 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ui_patterns_settings\Kernel\Source;
+
+use Drupal\Tests\ui_patterns_settings\Kernel\UiPSSourcePluginsTestBase;
+
+/**
+ * Test MediaSource.
+ *
+ * @coversDefaultClass \Drupal\ui_patterns_settings\Plugin\UiPatterns\Source\MediaSource
+ * @group ui_patterns_settings
+ */
+class MediaSourceTest extends UiPSSourcePluginsTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'ui_patterns_settings',
+  ];
+
+
+  /**
+   * Test TokenSource Plugin.
+   */
+  public function testPlugin(): void {
+    $this->runSourcePluginTests('media_', __DIR__ . "/../../fixtures/TestDataSet.yml");
+  }
+
+}
diff --git a/tests/src/Kernel/UiPSSourcePluginsTestBase.php b/tests/src/Kernel/UiPSSourcePluginsTestBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..06e142f3a39ab010d961abfd1796b59923e20cff
--- /dev/null
+++ b/tests/src/Kernel/UiPSSourcePluginsTestBase.php
@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Drupal\Tests\ui_patterns_settings\Kernel;
+
+use Drupal\Tests\ui_patterns\Kernel\SourcePluginsTestBase;
+
+/**
+ * Base class to test source plugins.
+ *
+ * @group ui_patterns
+ */
+class UiPSSourcePluginsTestBase extends SourcePluginsTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+    $this->installConfig(['ui_patterns_settings']);
+
+  }
+
+  public function runSourcePluginTests(?string $test_starts_with = NULL, ?string $tests_path = NULL): void {
+    parent::runSourcePluginTests($test_starts_with, __DIR__ . "/../../fixtures/TestDataSet.yml");
+  }
+
+
+}
diff --git a/ui_patterns_settings.info.yml b/ui_patterns_settings.info.yml
index a93111a96f264882138dfaa2f4bde5445aff68d9..b0ea5a384efc19e0e32290c5027d0f3eccaa540e 100644
--- a/ui_patterns_settings.info.yml
+++ b/ui_patterns_settings.info.yml
@@ -2,7 +2,7 @@ name: UI Patterns Settings
 type: module
 description: Configure patterns with settings
 package: User interface
-core_version_requirement: ^8 || ^9 || ^10
+core_version_requirement: ^10.3 || ^11
 dependencies:
   - ui_patterns:ui_patterns
   - token:token
diff --git a/ui_patterns_settings.libraries.yml b/ui_patterns_settings.libraries.yml
deleted file mode 100644
index bd781241034d10f0e9d3b6299c3c0f1acd5d2207..0000000000000000000000000000000000000000
--- a/ui_patterns_settings.libraries.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-widget:
-  version: VERSION
-  js:
-    js/ui_pattern_settings.toggle_token.js: {}
-  css:
-    component:
-      css/ui_patterns_settings.css: {}
-  dependencies:
-    - core/jquery
-    - core/once
-    - core/drupal
-    - core/drupalSettings
diff --git a/ui_patterns_settings.module b/ui_patterns_settings.module
index 20a345838982416dce1a624bb7e9010fc40c293a..fba211c5451677bec301cd8b55e3e957a4e14cd2 100644
--- a/ui_patterns_settings.module
+++ b/ui_patterns_settings.module
@@ -5,329 +5,3 @@
  * Contains ui_patterns_settings.module.
  */
 
-use Drupal\Component\Utility\UrlHelper;
-use Drupal\Core\Url;
-use Drupal\ui_patterns_settings\Plugin\PatternSettingTypeBase;
-use Drupal\ui_patterns_settings\Plugin\Layout\PatternSettingsLayout;
-use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\field\Entity\FieldStorageConfig;
-use Drupal\ui_patterns_settings\UiPatternsSettings;
-use Drupal\ui_patterns\UiPatterns;
-use Drupal\ui_patterns\Definition\PatternDefinition;
-use Drupal\ui_patterns_settings\Form\SettingsFormBuilder;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
-use Drupal\media_library\MediaLibraryUiBuilder;
-
-/**
- * Implements hook_ui_patterns_layouts_display_settings_form_alter().
- */
-function ui_patterns_settings_ui_patterns_layouts_display_settings_form_alter(&$form, PatternDefinition $definition, $configuration) {
-  SettingsFormBuilder::layoutForm($form, $definition, $configuration);
-}
-
-function ui_patterns_settings_build_media_edit_button($media_id) {
-  $media_entity_type = \Drupal::entityTypeManager()->getStorage('media')->getEntityType();
-  $edit_template = $media_entity_type->getLinkTemplate('edit-form');
-  $edit_url_query_params = [
-    'media_library_edit' => 'ajax',
-    'media_library_edit_entity_id' => $media_id,
-  ];
-  $edit_url = Url::fromUserInput(str_replace('{media}', $media_id, $edit_template) . '?' . UrlHelper::buildQuery($edit_url_query_params));
-  $dialog_options = MediaLibraryUiBuilder::dialogOptions();
-  return [
-    '#type' => 'link',
-    '#title' => '',
-    '#url' => $edit_url,
-    '#attributes' => [
-      'class' => [
-        'js-media-library-edit-link',
-        'media-library-edit__link',
-        'use-ajax',
-      ],
-      'target' => '_blank',
-      'data-dialog-options' => json_encode([
-                                             'height' => $dialog_options['height'],
-                                             'width' => $dialog_options['width'],
-                                             'classes' => ['ui-dialog-content' => 'media-library-edit__modal'],
-                                           ]),
-      'data-dialog-type' => 'dialog',
-    ],
-    '#attached' => [
-      'library' => [
-        'media_library_edit/admin',
-        'core/drupal.dialog.ajax',
-      ],
-    ],
-  ];
-
-}
-/**
- * Implements hook_preprocess_media_library_element().
- */
-function ui_patterns_settings_preprocess_media_library_element(&$variables) {
-  $element = $variables['element'];
-  if (isset($element['#ui_patterns_media_edit_button']) && !empty($element['#value']) && isset($variables['content']['selection'])) {
-    foreach (Element::children($variables['content']['selection']) as $child) {
-      $selection = &$variables['content']['selection'][$child];
-      $media_id = $selection['preview']['target_id']['#value'] ?? NULL;
-      if ($media_id !== NULL) {
-        // Remove js-media-library-item
-        if (($key = array_search('js-media-library-item', $selection['#attributes']['class'])) !== false) {
-          unset($selection['#attributes']['class'][$key]);
-        }
-        $selection['media_edit'] = ui_patterns_settings_build_media_edit_button($media_id);
-      }
-    }
-
-  }
-}
-/**
- * Implements hook_form_field_storage_config_edit_form_alter().
- */
-function ui_patterns_settings_form_field_storage_config_edit_form_alter(&$form, FormStateInterface $form_state) {
-  /** @var \Drupal\field\Entity\FieldStorageConfig $entity */
-  $entity = $form_state->getFormObject()->getEntity();
-  array_unshift($form['actions']['submit']['#submit'], 'ui_patterns_settings_form_field_storage_config_edit_form_submit');
-
-  $definitions = UiPatterns::getPatternDefinitions();
-  $settings_options = [];
-  foreach ($definitions as $definition) {
-    $infos = UiPatternsSettings::getExposedPatternDefinition($definition, $entity->getType());
-    foreach ($infos as $key => $info) {
-      $settings_options[$key] = $info['label'];
-    }
-  }
-  if (count($settings_options) > 0) {
-    $mapping = UiPatternsSettings::getConfigManager()->getMapping($entity->id());
-    $form['settings']['use_pattern'] = [
-      '#type' => 'checkbox',
-      '#title' => t('Expose pattern setting'),
-      '#default_value' => $mapping !== NULL,
-      '#description' => '',
-    ];
-
-    $form['settings']['pattern_setting'] = [
-      '#type' => 'select',
-      '#options' => $settings_options,
-      '#title' => 'Pattern Setting',
-      '#states' => [
-        'invisible' => [
-          ':input[name="settings[use_pattern]"]' => ['checked' => FALSE],
-        ],
-      ],
-      '#default_value' => $mapping,
-    ];
-  }
-}
-
-/**
- * Implements hook_form_field_storage_config_edit_form_submit().
- */
-function ui_patterns_settings_form_field_storage_config_edit_form_submit(array $form, FormStateInterface $form_state) {
-  $settings = $form_state->getValue('settings');
-  /** @var \Drupal\field\Entity\FieldStorageConfig $entity */
-  $entity = $form_state->getFormObject()->getEntity();
-
-  if (isset($settings['use_pattern']) && $settings['use_pattern'] === 1) {
-    UiPatternsSettings::getConfigManager()->addMapping($entity->id(), $settings['pattern_setting']);
-  }
-  else {
-    UiPatternsSettings::getConfigManager()->addMapping($entity->id(), NULL);
-  }
-
-}
-
-/**
- * Implements hook_entity_field_storage_info_alter().
- */
-function ui_patterns_settings_entity_field_storage_info_alter(&$fields, EntityTypeInterface $entity_type) {
-  /** @var \Drupal\field\Entity\FieldStorageConfig $field */
-  foreach ($fields as $field) {
-    if ($field instanceof FieldStorageConfig) {
-      if (($mapping = UiPatternsSettings::getConfigManager()
-          ->getMapping($field->id())) !== NULL) {
-        [$pattern_id, $setting_id] = explode('::', $mapping);
-        try {
-          $pattern_definition = UiPatterns::getPatternDefinition($pattern_id);
-          $settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_id);
-          if ($pattern_definition !== NULL
-            && $settings_definition !== NULL
-          ) {
-            $type = UiPatternsSettings::createSettingType($pattern_definition, $settings_definition);
-            $type->alterFieldStorage($field);
-          }
-          elseif ($pattern_definition !== NULL && $setting_id === 'variant') {
-            $field->setSetting('allowed_values_function', 'ui_patterns_settings_allowed_values_function');
-          }
-          else {
-            \Drupal::messenger()->addError('No pattern setting %setting found');
-          }
-        } catch (\Exception $e) {
-          \Drupal::messenger()->addError($e->getMessage());
-        }
-      }
-    }
-  }
-}
-
-/**
- * The storage config.
- *
- * @param \Drupal\field\Entity\FieldStorageConfig $storage_config
- *   The field storage config.
- *
- * @return string[]
- *   The allowed list of the enumeration.
- */
-function ui_patterns_settings_allowed_values_function(FieldStorageConfig $storage_config) {
-  [$pattern, $setting_key] = explode('::', UiPatternsSettings::getConfigManager()->getMapping($storage_config->id()));
-  $pattern_definition = UiPatterns::getPatternDefinition($pattern);
-  $settings_definition = UiPatternsSettings::getPatternDefinitionSetting($pattern_definition, $setting_key);
-  if ($pattern_definition !== NULL && $settings_definition !== NULL) {
-    return $settings_definition->getOptions();
-  }
-  elseif ($pattern_definition !== NULL && $setting_key === 'variant') {
-    return $pattern_definition->getVariantsAsOptions();
-  }
-  return [];
-}
-
-/**
- * Implements hook_ui_patterns_display_form_alter().
- */
-function ui_patterns_settings_ui_patterns_display_settings_form_alter(array &$form, $configuration) {
-  SettingsFormBuilder::displayForm($form, $configuration);
-}
-
-/**
- * Preprocess hook.
- *
- * @param array $variables
- *   Theme variables.
- */
-function ui_patterns_settings_preprocess_field__pattern_ds_field_template(array &$variables) {
-  $pattern_id = $variables['ds-config']['settings']['pattern'];
-  $settings = $variables['ds-config']['settings']['pattern_settings'][$pattern_id] ?? NULL;
-  foreach ($variables['items'] as $delta => $item) {
-    $variables['pattern']['pattern_' . $delta]['#settings'] = $settings;
-  }
-}
-
-/**
- * Preprocess variables for the pattern_views_row theme hook.
- *
- * @param array $variables
- *   Theme variables.
- */
-function ui_patterns_settings_preprocess_pattern_views_row(array &$variables) {
-  $pattern_id = $variables['options']['pattern'];
-  $settings = $variables['options']['pattern_settings'][$pattern_id] ?? NULL;
-  $variables['pattern']['#settings'] = $settings;
-}
-
-/**
- * Implements hook_element_info_alter().
- */
-function ui_patterns_settings_element_info_alter(array &$info) {
-
-  foreach ($info as &$elm) {
-    if (isset($elm['#process'])) {
-      array_unshift($elm['#process'], [
-        PatternSettingTypeBase::class,
-        "formGroupProcess",
-      ]);
-    }
-  }
-
-  if (isset($info['pattern'])) {
-    $info['pattern']['#pre_render'][] = [
-      "Drupal\ui_patterns_settings\Element\PatternSettings",
-      "processSettings",
-    ];
-  }
-
-  if (isset($info['pattern_preview'])) {
-    $info['pattern_preview']['#pre_render'][] = [
-      "Drupal\ui_patterns_settings\Element\PatternSettings",
-      "processPreviewSettings",
-    ];
-  }
-
-}
-
-/**
- * Implements hook_theme_registry_alter().
- *
- * Add settings variables to the pattern theme.
- */
-function ui_patterns_settings_theme_registry_alter(&$theme_registry) {
-  foreach (UiPatterns::getManager()->getPatterns() as $pattern) {
-    $definition = $pattern->getPluginDefinition();
-    if (isset($theme_registry['pattern_' . $definition->id()])) {
-      $settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
-      foreach ($settings as $key => $setting) {
-        $theme_registry['pattern_' . $definition->id()]['variables'][$key] = NULL;
-      }
-    }
-  }
-}
-
-/**
- * Implements hook_field_group_build_pre_render_alter().
- */
-function ui_patterns_settings_field_group_pre_render_alter(&$element, $group, $rendering_object) {
-  if (!isset($group->format_settings['pattern'])) {
-    return;
-  }
-
-  $pattern_id = $group->format_settings['pattern'] ?? NULL;
-  $element['#settings'] = $group->format_settings['pattern_settings'][$pattern_id] ?? NULL;
-  $element['#variant'] = $group->format_settings['pattern_variant'] ?? NULL;
-  if (!empty($group->format_settings['variants_token'])) {
-    $element['#variant_token'] = $group->format_settings['variants_token'][$pattern_id] ?? NULL;
-  }
-}
-
-/**
- * Returns true if current route is a layout builder route.
- *
- * @return bool
- *   True if is layout builder route
- */
-function ui_patterns_settings_is_layout_builder_route() {
-  $route_name = \Drupal::routeMatch()->getRouteName();
-  if (preg_match('/^(layout_builder\.([^.]+\.)?)/', $route_name)) {
-    return TRUE;
-  }
-  else {
-    return FALSE;
-  }
-}
-
-/**
- * Implements hook_layout_alter().
- */
-function ui_patterns_settings_layout_alter(&$definitions) {
-  /** @var \Drupal\Core\Layout\LayoutDefinition $definition */
-  foreach ($definitions as $definition) {
-    if ($definition->getClass() == '\Drupal\ui_patterns_layouts\Plugin\Layout\PatternLayout') {
-      $definition->setClass(PatternSettingsLayout::class);
-    }
-  }
-}
-
-/**
- * Implements hook_ui_patterns_info_alter().
- */
-function ui_patterns_settings_ui_patterns_info_alter(&$definitions) {
-  /** @var PatternDefinition $definition */
-  foreach ($definitions as $definition) {
-    $settings = UiPatternsSettings::getPatternDefinitionSettings($definition);
-    foreach ($settings as $setting) {
-      if ($setting->getExposeAsField()) {
-        $definition->setField($setting->getName(), $setting->getLabel());
-      }
-    }
-  }
-}
diff --git a/ui_patterns_settings.services.yml b/ui_patterns_settings.services.yml
index 18acd844db01bf77ba3ed4055b68727686def5ae..ad189ddbec905274478cedb2ae508abbdb4caeb0 100644
--- a/ui_patterns_settings.services.yml
+++ b/ui_patterns_settings.services.yml
@@ -1,11 +1 @@
-services:
-  plugin.manager.ui_patterns_settings:
-    class: Drupal\ui_patterns_settings\UiPatternsSettingsManager
-    arguments: ['@container.namespaces', '@module_handler', '@cache.discovery']
-  ui_patterns_settings.twig:
-    class: Drupal\ui_patterns_settings\TwigExtension\UIPatternsSettingsExtension
-    tags:
-      - { name: twig.extension }
-  ui_patterns_settings.config_manager:
-    class: Drupal\ui_patterns_settings\ConfigManager
-    arguments: ['@config.factory']
+services: {}