diff --git a/composer.json b/composer.json
index 602e0bd9fbaa4e2baf428207053d45d61da5d7b9..77712c96588300bc1c08d2affd676f328b5960a8 100644
--- a/composer.json
+++ b/composer.json
@@ -87,7 +87,7 @@
         "desandro/masonry": "4.2",
         "dimsemenov/magnific-popup": "1.1",
         "drupal/addtocalendar": "3.2",
-        "drupal/admin_toolbar": "2.4",
+        "drupal/admin_toolbar": "3.0.2",
         "drupal/administerusersbyrole": "3.0",
         "drupal/allowed_formats": "1.3",
         "drupal/anchor_link": "1.7",
diff --git a/composer.lock b/composer.lock
index 4f6452429b78dab6f8303719c3b04257497d3a02..832f32945a09162973bbb99b43d6cca84cf492a6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "380fe9eca56285be5ea4b81288b6fd1f",
+    "content-hash": "d92afd65f29182ece4d6df27d3215b4d",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -1710,26 +1710,29 @@
         },
         {
             "name": "drupal/admin_toolbar",
-            "version": "2.4.0",
+            "version": "3.0.2",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/admin_toolbar.git",
-                "reference": "8.x-2.4"
+                "reference": "3.0.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip",
-                "reference": "8.x-2.4",
-                "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38"
+                "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.0.2.zip",
+                "reference": "3.0.2",
+                "shasum": "a3b7a8030695d0c1d49ec57786321e2dd142184a"
             },
             "require": {
                 "drupal/core": "^8.8.0 || ^9.0"
             },
+            "require-dev": {
+                "drupal/admin_toolbar_tools": "*"
+            },
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "8.x-2.4",
-                    "datestamp": "1601999178",
+                    "version": "3.0.2",
+                    "datestamp": "1629907124",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
@@ -7845,17 +7848,17 @@
         },
         {
             "name": "drupal/webform",
-            "version": "6.0.3",
+            "version": "6.0.5",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/webform.git",
-                "reference": "6.0.3"
+                "reference": "6.0.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/webform-6.0.3.zip",
-                "reference": "6.0.3",
-                "shasum": "b75f79e26b5d58f4a9e047131f63c482bdaa5593"
+                "url": "https://ftp.drupal.org/files/projects/webform-6.0.5.zip",
+                "reference": "6.0.5",
+                "shasum": "a925d604e3b4a29f5a688a8e84fdb3a93490f641"
             },
             "require": {
                 "drupal/core": "^8.8 || ^9"
@@ -7903,8 +7906,8 @@
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "6.0.3",
-                    "datestamp": "1620250254",
+                    "version": "6.0.5",
+                    "datestamp": "1629909787",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
@@ -7912,7 +7915,7 @@
                 },
                 "drush": {
                     "services": {
-                        "drush.services.yml": "^9"
+                        "drush.services.yml": "^9 || ^10"
                     }
                 }
             },
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
index a7d4124c399f59bf0db1d8f830fb42ffb82d645e..9368cf92d0ab0035b0ee3511d3a7b5ae8a6ced62 100644
--- a/vendor/composer/InstalledVersions.php
+++ b/vendor/composer/InstalledVersions.php
@@ -30,7 +30,7 @@ class InstalledVersions
     'aliases' => 
     array (
     ),
-    'reference' => '6c76100b0c87696bdb0c18fd35fa6fc265ab9aa9',
+    'reference' => '5ba45909d4ed1776c96788bcdc27e492dac03d11',
     'name' => 'osu-asc-webservices/d8-upstream',
   ),
   'versions' => 
@@ -312,12 +312,12 @@ class InstalledVersions
     ),
     'drupal/admin_toolbar' => 
     array (
-      'pretty_version' => '2.4.0',
-      'version' => '2.4.0.0',
+      'pretty_version' => '3.0.2',
+      'version' => '3.0.2.0',
       'aliases' => 
       array (
       ),
-      'reference' => '8.x-2.4',
+      'reference' => '3.0.2',
     ),
     'drupal/administerusersbyrole' => 
     array (
@@ -1957,12 +1957,12 @@ class InstalledVersions
     ),
     'drupal/webform' => 
     array (
-      'pretty_version' => '6.0.3',
-      'version' => '6.0.3.0',
+      'pretty_version' => '6.0.5',
+      'version' => '6.0.5.0',
       'aliases' => 
       array (
       ),
-      'reference' => '6.0.3',
+      'reference' => '6.0.5',
     ),
     'drupal/workflows' => 
     array (
@@ -2226,7 +2226,7 @@ class InstalledVersions
       'aliases' => 
       array (
       ),
-      'reference' => '6c76100b0c87696bdb0c18fd35fa6fc265ab9aa9',
+      'reference' => '5ba45909d4ed1776c96788bcdc27e492dac03d11',
     ),
     'pantheon-systems/quicksilver-pushback' => 
     array (
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index f202a91f4f8fbdbf4cfa2fef8fe156209a56dab5..35b3dd558e7df3c89a15f9b8ff15abfc7f2b9692 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1751,27 +1751,30 @@
         },
         {
             "name": "drupal/admin_toolbar",
-            "version": "2.4.0",
-            "version_normalized": "2.4.0.0",
+            "version": "3.0.2",
+            "version_normalized": "3.0.2.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/admin_toolbar.git",
-                "reference": "8.x-2.4"
+                "reference": "3.0.2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/admin_toolbar-8.x-2.4.zip",
-                "reference": "8.x-2.4",
-                "shasum": "6240047b8d91ac78f98d861ba8282af971fa0b38"
+                "url": "https://ftp.drupal.org/files/projects/admin_toolbar-3.0.2.zip",
+                "reference": "3.0.2",
+                "shasum": "a3b7a8030695d0c1d49ec57786321e2dd142184a"
             },
             "require": {
                 "drupal/core": "^8.8.0 || ^9.0"
             },
+            "require-dev": {
+                "drupal/admin_toolbar_tools": "*"
+            },
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "8.x-2.4",
-                    "datestamp": "1601999178",
+                    "version": "3.0.2",
+                    "datestamp": "1629907124",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
@@ -8174,18 +8177,18 @@
         },
         {
             "name": "drupal/webform",
-            "version": "6.0.3",
-            "version_normalized": "6.0.3.0",
+            "version": "6.0.5",
+            "version_normalized": "6.0.5.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/webform.git",
-                "reference": "6.0.3"
+                "reference": "6.0.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/webform-6.0.3.zip",
-                "reference": "6.0.3",
-                "shasum": "b75f79e26b5d58f4a9e047131f63c482bdaa5593"
+                "url": "https://ftp.drupal.org/files/projects/webform-6.0.5.zip",
+                "reference": "6.0.5",
+                "shasum": "a925d604e3b4a29f5a688a8e84fdb3a93490f641"
             },
             "require": {
                 "drupal/core": "^8.8 || ^9"
@@ -8233,8 +8236,8 @@
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "6.0.3",
-                    "datestamp": "1620250254",
+                    "version": "6.0.5",
+                    "datestamp": "1629909787",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
@@ -8242,7 +8245,7 @@
                 },
                 "drush": {
                     "services": {
-                        "drush.services.yml": "^9"
+                        "drush.services.yml": "^9 || ^10"
                     }
                 }
             },
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index a8a6cc6445aeec6484aa01178937d777b5bd6381..653ddc6436391b51484f5efd8c1ed0710abb5cdf 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -6,7 +6,7 @@
     'aliases' => 
     array (
     ),
-    'reference' => '6c76100b0c87696bdb0c18fd35fa6fc265ab9aa9',
+    'reference' => '5ba45909d4ed1776c96788bcdc27e492dac03d11',
     'name' => 'osu-asc-webservices/d8-upstream',
   ),
   'versions' => 
@@ -288,12 +288,12 @@
     ),
     'drupal/admin_toolbar' => 
     array (
-      'pretty_version' => '2.4.0',
-      'version' => '2.4.0.0',
+      'pretty_version' => '3.0.2',
+      'version' => '3.0.2.0',
       'aliases' => 
       array (
       ),
-      'reference' => '8.x-2.4',
+      'reference' => '3.0.2',
     ),
     'drupal/administerusersbyrole' => 
     array (
@@ -1933,12 +1933,12 @@
     ),
     'drupal/webform' => 
     array (
-      'pretty_version' => '6.0.3',
-      'version' => '6.0.3.0',
+      'pretty_version' => '6.0.5',
+      'version' => '6.0.5.0',
       'aliases' => 
       array (
       ),
-      'reference' => '6.0.3',
+      'reference' => '6.0.5',
     ),
     'drupal/workflows' => 
     array (
@@ -2202,7 +2202,7 @@
       'aliases' => 
       array (
       ),
-      'reference' => '6c76100b0c87696bdb0c18fd35fa6fc265ab9aa9',
+      'reference' => '5ba45909d4ed1776c96788bcdc27e492dac03d11',
     ),
     'pantheon-systems/quicksilver-pushback' => 
     array (
diff --git a/web/modules/admin_toolbar/README.txt b/web/modules/admin_toolbar/README.txt
index 46c2929a6f2c96fae03a61f209d78c057ab51926..110c238e28d9397b717b62d5bb12671afb659906 100755
--- a/web/modules/admin_toolbar/README.txt
+++ b/web/modules/admin_toolbar/README.txt
@@ -50,7 +50,7 @@ INSTALLATION
 CONFIGURATION
 -------------
 
-No configuration is needed.
+ * Configure the admin toolbar tools at (/admin/config/user-interface/settings).
 
 
 MAINTAINERS
diff --git a/web/modules/admin_toolbar/admin_toolbar.info.yml b/web/modules/admin_toolbar/admin_toolbar.info.yml
index 983bef388c44ad74d8c2c4440b763a56ca0d5f8f..6d6b70d1deb9ede2dee714a6360635085b5b3841 100644
--- a/web/modules/admin_toolbar/admin_toolbar.info.yml
+++ b/web/modules/admin_toolbar/admin_toolbar.info.yml
@@ -1,14 +1,12 @@
 name: Admin Toolbar
 description: Provides an improved drop-down menu interface to the site Toolbar.
 package: Administration
-
 type: module
-core_version_requirement: ^8.8.0 || ^9.0
-
+core_version_requirement: ^8.8.0 || ^9
 dependencies:
   - drupal:toolbar
 
-# Information added by Drupal.org packaging script on 2020-10-06
-version: '8.x-2.4'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '3.0.2'
 project: 'admin_toolbar'
-datestamp: 1601998855
+datestamp: 1629882676
diff --git a/web/modules/admin_toolbar/admin_toolbar.libraries.yml b/web/modules/admin_toolbar/admin_toolbar.libraries.yml
index 85b322a4e6f1bf851f781529e6140a7e66acd86b..7dc0448de5325204d03aaa02c14d44ef056b7866 100755
--- a/web/modules/admin_toolbar/admin_toolbar.libraries.yml
+++ b/web/modules/admin_toolbar/admin_toolbar.libraries.yml
@@ -3,8 +3,19 @@ toolbar.tree:
     theme:
       css/admin.toolbar.css: {}
   js:
-    js/jquery.hoverIntent.js: {}
     js/admin_toolbar.js: {}
   dependencies:
     - core/jquery
     - core/drupal
+toolbar.tree.hoverintent:
+  js:
+    js/jquery.hoverIntent.js: {}
+    js/admin_toolbar.hoverintent.js: {}
+  dependencies:
+    - core/jquery
+
+toolbar.tree.hover:
+  js:
+    js/admin_toolbar.hover.js: {}
+  dependencies:
+    - core/jquery
diff --git a/web/modules/admin_toolbar/admin_toolbar.module b/web/modules/admin_toolbar/admin_toolbar.module
index c02c3f4868df2827ffd830eb170de560b15bab62..2b32b5799523eaa24c6018073e5870bf528dd027 100755
--- a/web/modules/admin_toolbar/admin_toolbar.module
+++ b/web/modules/admin_toolbar/admin_toolbar.module
@@ -16,6 +16,15 @@
 function admin_toolbar_toolbar_alter(&$items) {
   $items['administration']['tray']['toolbar_administration']['#pre_render'] = [[AdminToolbar::class, 'preRenderTray']];
   $items['administration']['#attached']['library'][] = 'admin_toolbar/toolbar.tree';
+  $hoverintent_functionality = \Drupal::config('admin_toolbar_tools.settings')->get('hoverintent_functionality');
+  if ($hoverintent_functionality === TRUE) {
+  // Use jQuery hover() effect.
+  $items['administration']['#attached']['library'][] = 'admin_toolbar/toolbar.tree.hoverintent';
+  }
+  else {
+    // User hoverIntent plugin.
+    $items['administration']['#attached']['library'][] = 'admin_toolbar/toolbar.tree.hover';
+  }
 }
 
 /**
diff --git a/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.info.yml b/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.info.yml
index 1e3882867e0e2d1bac3f2c197e5652a1caa2523b..3751d83ac004c63c9aab270cace565a6881d2116 100644
--- a/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.info.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.info.yml
@@ -8,7 +8,7 @@ core_version_requirement: ^8.8.0 || ^9.0
 dependencies:
   - admin_toolbar:admin_toolbar
 
-# Information added by Drupal.org packaging script on 2020-10-06
-version: '8.x-2.4'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '3.0.2'
 project: 'admin_toolbar'
-datestamp: 1601998855
+datestamp: 1629882676
diff --git a/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.module b/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.module
index 2aff07f40240690760b77bc99c2aec944a548ba0..a415d136208f73aa7f04b6b9e67b2799fb85e033 100755
--- a/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.module
+++ b/web/modules/admin_toolbar/admin_toolbar_links_access_filter/admin_toolbar_links_access_filter.module
@@ -58,8 +58,8 @@ function admin_toolbar_links_access_filter_preprocess_menu(&$variables) {
  * Hides links from admin menu, if user doesn't have access rights.
  */
 function admin_toolbar_links_access_filter_filter_non_accessible_links(array &$items) {
-  foreach ($items as $route => &$item) {
-    $route_name = $route;
+  foreach ($items as $menu_id => &$item) {
+    $route_name = NULL;
     $route_params = [];
     if (!empty($item['original_link'])) {
       /** @var \Drupal\Core\Menu\MenuLinkBase $original_link */
@@ -71,18 +71,28 @@ function admin_toolbar_links_access_filter_filter_non_accessible_links(array &$i
       $route_name = $original_link->getRouteName();
       $route_params = $original_link->getRouteParameters();
     }
+    elseif (!empty($item['url'])) {
+      /** @var \Drupal\Core\Url $url */
+      $url = $item['url'];
+      if ($url->isExternal()) {
+        // Do not filter external URL at all.
+        continue;
+      }
+      $route_name = $url->getRouteName();
+      $route_params = $url->getRouteParameters();
+    }
 
     // Check, if user has access rights to the route.
     if (!\Drupal::accessManager()
       ->checkNamedRoute($route_name, $route_params)) {
-      unset($items[$route]);
+      unset($items[$menu_id]);
     }
     else {
-      if (!empty($items[$route]['below'])) {
+      if (!empty($items[$menu_id]['below'])) {
         // Recursively call this function for the child items.
-        admin_toolbar_links_access_filter_filter_non_accessible_links($items[$route]['below']);
+        admin_toolbar_links_access_filter_filter_non_accessible_links($items[$menu_id]['below']);
       }
-      if (empty($items[$route]['below']) && \Drupal::moduleHandler()
+      if (empty($items[$menu_id]['below']) && \Drupal::moduleHandler()
         ->moduleExists('admin_toolbar')) {
 
         // Every child item has been cleared out.
@@ -91,12 +101,17 @@ function admin_toolbar_links_access_filter_filter_non_accessible_links(array &$i
         // unset this item, as there aren't any children left.
         // This assumption is only valid, when the admin_toolbar module is
         // installed because otherwise we won't have child items at all.
-        if (admin_toolbar_links_access_filter_is_overview_page($route)) {
-          unset($items[$route]);
+        if (admin_toolbar_links_access_filter_is_overview_page($route_name)) {
+          unset($items[$menu_id]);
+        }
+        // If there are no sub-items and the parent does not have a link, then
+        // it is safe to remove it.
+        elseif ($route_name === '<nolink>') {
+          unset($items[$menu_id]);
         }
         else {
           // Let's remove the expanded flag.
-          $items[$route]['is_expanded'] = FALSE;
+          $items[$menu_id]['is_expanded'] = FALSE;
         }
       }
     }
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.info.yml b/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.info.yml
index 462a5ad51330313847b1d7bfd69304c2df2e45c4..2536e7a0c1b7714570a07509a0a027a0d88c95f8 100644
--- a/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.info.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.info.yml
@@ -1,14 +1,12 @@
 name: Admin Toolbar Search
 description: Provides search of Admin Toolbar items.
 package: Administration
-
 type: module
 core_version_requirement: ^8.8.0 || ^9.0
-
 dependencies:
-  - admin_toolbar:admin_toolbar
+  - admin_toolbar:admin_toolbar_tools
 
-# Information added by Drupal.org packaging script on 2020-10-06
-version: '8.x-2.4'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '3.0.2'
 project: 'admin_toolbar'
-datestamp: 1601998855
+datestamp: 1629882676
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.services.yml b/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.services.yml
index 977e6ce2c3aba9cdccca8f7065c799847a953bf5..12950ea112c43951ce4c15119975d60e4dfab3a6 100644
--- a/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.services.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_search/admin_toolbar_search.services.yml
@@ -7,3 +7,4 @@ services:
      - '@router.route_provider'
      - '@cache_contexts_manager'
      - '@cache.toolbar'
+     - '@config.factory'
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css b/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css
index d12e95bbbf4c7f177f250d0f2b3303155cea491b..4e7b028d0d3ddd79012df3ee5224e3cd0d4dfcbf 100755
--- a/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css
+++ b/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css
@@ -4,7 +4,8 @@
 }
 
 #admin-toolbar-search-input {
-  min-height: 1rem;
+  min-height: 30px;
+  height: 100%;
   padding: 0 0.4rem;
   line-height: 1.75rem;
   margin: 0;
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css.orig b/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css.orig
deleted file mode 100755
index 3be4d4e705c52eb53510e058046230974ed74c51..0000000000000000000000000000000000000000
--- a/web/modules/admin_toolbar/admin_toolbar_search/css/admin.toolbar_search.css.orig
+++ /dev/null
@@ -1,20 +0,0 @@
-#admin-toolbar-search-tab .js-form-item.form-item {
-  margin-top: 0.3rem;
-  margin-bottom: 0;
-}
-
-#admin-toolbar-search-input {
-  min-height: 1rem;
-  padding: 0 0.4rem;
-  line-height: 1.75rem;
-  margin: 0;
-  color: #3b3b3b;
-  background: #fcfcfa;
-  border: 1px solid #ccc;
-  border-radius: unset;
-  font-size: 1em;
-}
-
-.ui-autocomplete .ui-menu-item span.admin-toolbar-search-url {
-  color: rgba(0, 0, 0, 0.50);
-}
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js b/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js
index 975f3b4a063bc2a095cd9ba7ed5f313f97630a1f..721da1f7c4f35cae44fc2760269e64228ec05f00 100755
--- a/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js
+++ b/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js
@@ -58,7 +58,7 @@
       }).data("ui-autocomplete")._renderItem = (function (ul, item) {
         ul.addClass('admin-toolbar-search-autocomplete-list');
         return $("<li>")
-          .append('<div>' + item.labelRaw + ' <span class="admin-toolbar-search-url">' + item.value + '</span></div>')
+          .append('<div>' + item.labelRaw + '<span class="admin-toolbar-search-url">' + '</span></div>')
           .appendTo(ul);
       });
 
@@ -124,7 +124,7 @@
             $self.links.push({
               'value': this.href,
               'label': label + ' ' + this.href,
-              'labelRaw': label
+              'labelRaw': Drupal.checkPlain(label)
             });
           }
         });
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js.orig b/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js.orig
deleted file mode 100755
index 110040741ea91404621840804871188603cbdacc..0000000000000000000000000000000000000000
--- a/web/modules/admin_toolbar/admin_toolbar_search/js/admin_toolbar_search.js.orig
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
- * @file
- * Behaviors for the search widget in the admin toolbar.
- */
-
-(function ($, Drupal) {
-
-  'use strict';
-
-  Drupal.behaviors.adminToolbarSearch = {
-
-    // If extra links have been fetched.
-    extraFetched: false,
-
-    attach: function (context) {
-      if (context != document) {
-        return;
-      }
-
-      var $self = this;
-      this.links = [];
-
-      $("#admin-toolbar-search-input").autocomplete({
-        minLength: 2,
-        source: function (request, response) {
-          var data = $self.handleAutocomplete(request.term);
-          if (!$self.extraFetched && drupalSettings.adminToolbarSearch.loadExtraLinks) {
-            $.getJSON( "/admin/admin-toolbar-search", function( data ) {
-              $(data).each(function() {
-                var item = this;
-                item.label = this.labelRaw + ' ' + this.value;
-                $self.links.push(item);
-              });
-
-              $self.extraFetched = true;
-
-              var results = $self.handleAutocomplete(request.term);
-              response(results);
-            });
-          }
-          else {
-            response(data);
-          }
-        },
-        open: function () {
-          var zIndex = $('#toolbar-item-administration-tray')
-            .css("z-index") + 1;
-          $(this).autocomplete('widget').css('z-index', zIndex);
-
-          return false;
-        },
-        select: function (event, ui) {
-          if (ui.item.value) {
-            location.href = ui.item.value;
-            return false;
-          }
-        }
-      }).data("ui-autocomplete")._renderItem = (function (ul, item) {
-        return $("<li>")
-          .append('<div>' + item.labelRaw + ' <span class="admin-toolbar-search-url">' + item.value + '</span></div>')
-          .appendTo(ul);
-      });
-
-      // Populate the links for search results when the input is pressed.
-      $(context).find('#admin-toolbar-search-input')
-        .once('admin_toolbar_search')
-        .each(function () {
-          $(this).focus(function() {
-            Drupal.behaviors.adminToolbarSearch.populateLinks($self);
-          });
-        });
-    },
-    getItemLabel: function (item) {
-      var breadcrumbs = [];
-      $(item).parents().each(function () {
-        if ($(this).hasClass('menu-item')) {
-          var $link = $(this).find('a:first');
-          if ($link.length && !$link.hasClass('admin-toolbar-search-ignore')) {
-            breadcrumbs.unshift($link.text());
-          }
-        }
-      });
-      return breadcrumbs.join(' > ');
-    },
-    handleAutocomplete: function (term) {
-      var $self = this;
-      var keywords = term.split(" "); // Split search terms into list.
-
-      var suggestions = [];
-      $self.links.forEach(function (element) {
-        var label = element.label.toLowerCase();
-
-        // Add exact matches.
-        if (label.indexOf(term.toLowerCase()) >= 0) {
-          suggestions.push(element);
-        }
-        else {
-          // Add suggestions where it matches all search terms.
-          var matchCount = 0;
-          keywords.forEach(function (keyword) {
-            if (label.indexOf(keyword.toLowerCase()) >= 0) {
-              matchCount++;
-            }
-          });
-          if (matchCount == keywords.length) {
-            suggestions.push(element);
-          }
-        }
-      });
-      return suggestions;
-    },
-    /**
-     * Populates the links in admin toolbar search.
-     */
-    populateLinks: function ($self) {
-      // Populate only when links array is empty (only the first time).
-      if ($self.links.length === 0) {
-        var getUrl = window.location;
-        var baseUrl = getUrl.protocol + "//" + getUrl.host + "/";
-        $('.toolbar-tray a[data-drupal-link-system-path]').each(function () {
-          if (this.href !== baseUrl) {
-            var label = $self.getItemLabel(this);
-            $self.links.push({
-              'value': this.href,
-              'label': label + ' ' + this.href,
-              'labelRaw': label
-            });
-          }
-        });
-      }
-    },
-  };
-
-})(jQuery, Drupal);
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/src/SearchLinks.php b/web/modules/admin_toolbar/admin_toolbar_search/src/SearchLinks.php
index e36dba37a9617b3de26c7728fa4dc198f9dc3b9c..cff509f40d479d623175bcadba70719504bb1e12 100644
--- a/web/modules/admin_toolbar/admin_toolbar_search/src/SearchLinks.php
+++ b/web/modules/admin_toolbar/admin_toolbar_search/src/SearchLinks.php
@@ -2,10 +2,10 @@
 
 namespace Drupal\admin_toolbar_search;
 
-use Drupal\admin_toolbar_tools\Plugin\Derivative\ExtraLinks;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Cache\Context\CacheContextsManager;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Language\LanguageInterface;
@@ -56,6 +56,13 @@ class SearchLinks {
    */
   protected $toolbarCache;
 
+  /**
+   * The admin toolbar tools configuration.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config;
+
   /**
    * Constructs a SearchLinks object.
    *
@@ -69,13 +76,16 @@ class SearchLinks {
    *   The cache contexts manager.
    * @param \Drupal\Core\Cache\CacheBackendInterface $toolbar_cache
    *   Cache backend instance to use.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   Config factory mservice.
    */
-  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, CacheContextsManager $cache_context_manager, CacheBackendInterface $toolbar_cache) {
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, CacheContextsManager $cache_context_manager, CacheBackendInterface $toolbar_cache, ConfigFactoryInterface $config_factory) {
     $this->entityTypeManager = $entity_type_manager;
     $this->moduleHandler = $module_handler;
     $this->routeProvider = $route_provider;
     $this->cacheContextManager = $cache_context_manager;
     $this->toolbarCache = $toolbar_cache;
+    $this->config = $config_factory->get('admin_toolbar_tools.settings');
   }
 
   /**
@@ -88,6 +98,7 @@ public function __construct(EntityTypeManagerInterface $entity_type_manager, Mod
    * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
    */
   public function getLinks() {
+    $max_bundle_number = $this->config->get('max_bundle_number');
     $additional_keys = $this->cacheContextManager->convertTokensToKeys([
       'languages:' . LanguageInterface::TYPE_INTERFACE,
       'user.permissions',
@@ -107,9 +118,9 @@ public function getLinks() {
     foreach ($content_entities as $entities) {
       $content_entity_bundle = $entities['content_entity_bundle'];
       $content_entity = $entities['content_entity'];
-      // Start at offset 10, since the toolbar has already loaded the first 10.
+      // Load the remaining items that were not loaded by the toolbar.
       $content_entity_bundle_storage = $this->entityTypeManager->getStorage($content_entity_bundle);
-      $bundles_ids = $content_entity_bundle_storage->getQuery()->range(ExtraLinks::MAX_BUNDLE_NUMBER)->execute();
+      $bundles_ids = $content_entity_bundle_storage->getQuery()->range($max_bundle_number)->execute();
       if (!empty($bundles_ids)) {
         $bundles = $this->entityTypeManager
           ->getStorage($content_entity_bundle)
@@ -126,62 +137,75 @@ public function getLinks() {
             // Some bundles have an overview/list form that make a better root
             // link.
             $url = Url::fromRoute('entity.' . $content_entity_bundle . '.overview_form', $params);
-            $url_string = $url->toString();
-            $links[] = [
-              'labelRaw' => $label_base,
-              'value' => $url_string,
-            ];
+            if ($url->access()) {
+              $url_string = $url->toString();
+              $links[] = [
+                'labelRaw' => $label_base,
+                'value' => $url_string,
+              ];
+            }
           }
           if ($this->routeExists('entity.' . $content_entity_bundle . '.edit_form')) {
             $url = Url::fromRoute('entity.' . $content_entity_bundle . '.edit_form', $params);
-            $url_string = $url->toString();
-            $links[] = [
-              'labelRaw' => $label_base . ' > ' . $this->t('Edit'),
-              'value' => $url_string,
-            ];
-          }
-          if ($this->moduleHandler->moduleExists('field_ui')) {
-            if ($this->routeExists('entity.' . $content_entity . '.field_ui_fields')) {
-              $url = Url::fromRoute('entity.' . $content_entity . '.field_ui_fields', $params);
+            if ($url->access()) {
               $url_string = $url->toString();
               $links[] = [
-                'labelRaw' => $label_base . ' > ' . $this->t('Manage fields'),
+                'labelRaw' => $label_base . ' > ' . $this->t('Edit'),
                 'value' => $url_string,
               ];
             }
+          }
+          if ($this->moduleHandler->moduleExists('field_ui')) {
+            if ($this->routeExists('entity.' . $content_entity . '.field_ui_fields')) {
+              $url = Url::fromRoute('entity.' . $content_entity . '.field_ui_fields', $params);
+              if ($url->access()) {
+                $url_string = $url->toString();
+                $links[] = [
+                  'labelRaw' => $label_base . ' > ' . $this->t('Manage fields'),
+                  'value' => $url_string,
+                ];
+              }
+            }
 
             if ($this->routeExists('entity.entity_form_display.' . $content_entity . '.default')) {
               $url = Url::fromRoute('entity.entity_form_display.' . $content_entity . '.default', $params);
-              $url_string = $url->toString();
-              $links[] = [
-                'labelRaw' => $label_base . ' > ' . $this->t('Manage form display'),
-                'value' => $url_string,
-              ];
-
+              if ($url->access()) {
+                $url_string = $url->toString();
+                $links[] = [
+                  'labelRaw' => $label_base . ' > ' . $this->t('Manage form display'),
+                  'value' => $url_string,
+                ];
+              }
             }
             if ($this->routeExists('entity.entity_view_display.' . $content_entity . '.default')) {
               $url = Url::fromRoute('entity.entity_view_display.' . $content_entity . '.default', $params);
-              $url_string = $url->toString();
-              $links[] = [
-                'labelRaw' => $label_base . ' > ' . $this->t('Manage display'),
-                'value' => $url_string,
-              ];
+              if ($url->access()) {
+                $url_string = $url->toString();
+                $links[] = [
+                  'labelRaw' => $label_base . ' > ' . $this->t('Manage display'),
+                  'value' => $url_string,
+                ];
+              }
             }
             if ($this->moduleHandler->moduleExists('devel') && $this->routeExists('entity.' . $content_entity_bundle . '.devel_load')) {
               $url = Url::fromRoute($route_name = 'entity.' . $content_entity_bundle . '.devel_load', $params);
-              $url_string = $url->toString();
-              $links[] = [
-                'labelRaw' => $label_base . ' > ' . $this->t('Devel'),
-                'value' => $url_string,
-              ];
+              if ($url->access()) {
+                $url_string = $url->toString();
+                $links[] = [
+                  'labelRaw' => $label_base . ' > ' . $this->t('Devel'),
+                  'value' => $url_string,
+                ];
+              }
             }
             if ($this->routeExists('entity.' . $content_entity_bundle . '.delete_form')) {
               $url = Url::fromRoute('entity.' . $content_entity_bundle . '.delete_form', $params);
-              $url_string = $url->toString();
-              $links[] = [
-                'labelRaw' => $label_base . ' > ' . $this->t('Delete'),
-                'value' => $url_string,
-              ];
+              if ($url->access()) {
+                $url_string = $url->toString();
+                $links[] = [
+                  'labelRaw' => $label_base . ' > ' . $this->t('Delete'),
+                  'value' => $url_string,
+                ];
+              }
             }
           }
         }
@@ -193,29 +217,33 @@ public function getLinks() {
 
       $menus = $this->entityTypeManager->getStorage('menu')->loadMultiple();
       uasort($menus, [Menu::class, 'sort']);
-      $menus = array_slice($menus, ExtraLinks::MAX_BUNDLE_NUMBER);
+      $menus = array_slice($menus, $max_bundle_number);
 
       $cache_tags = Cache::mergeTags($cache_tags, ['config:menu_list']);
       foreach ($menus as $menu_id => $menu) {
         $route_name = 'entity.menu.edit_form';
         $params = ['menu' => $menu_id];
         $url = Url::fromRoute($route_name, $params);
-        $url_string = $url->toString();
+        if ($url->access()) {
+          $url_string = $url->toString();
 
-        $links[] = [
-          'labelRaw' => $this->t('Menus') . ' > ' . $menu->label(),
-          'value' => $url_string,
-        ];
+          $links[] = [
+            'labelRaw' => $this->t('Menus > @menu_label', ['@menu_label' => $menu->label()]),
+            'value' => $url_string,
+          ];
+        }
 
         $route_name = 'entity.menu.add_link_form';
         $params = ['menu' => $menu_id];
         $url = Url::fromRoute($route_name, $params);
-        $url_string = $url->toString();
+        if ($url->access()) {
+          $url_string = $url->toString();
 
-        $links[] = [
-          'labelRaw' => $this->t('Menus') . ' > ' . $menu->label() . ' > ' . $this->t('Add link'),
-          'value' => $url_string,
-        ];
+          $links[] = [
+            'labelRaw' => $this->t('Menus > @menu_label > ', ['@menu_label' => $menu->label()]) . $this->t('Add link'),
+            'value' => $url_string,
+          ];
+        }
 
         $menus = ['admin', 'devel', 'footer', 'main', 'tools', 'account'];
         if (!in_array($menu_id, $menus)) {
@@ -223,23 +251,27 @@ public function getLinks() {
           $route_name = 'entity.menu.delete_form';
           $params = ['menu' => $menu_id];
           $url = Url::fromRoute($route_name, $params);
-          $url_string = $url->toString();
+          if ($url->access()) {
+            $url_string = $url->toString();
 
-          $links[] = [
-            'labelRaw' => $this->t('Menus') . ' > ' . $menu->label() . ' > ' . $this->t('Delete'),
-            'value' => $url_string,
-          ];
+            $links[] = [
+              'labelRaw' => $this->t('Menus > @menu_label > ', ['@menu_label' => $menu->label()]) . $this->t('Delete'),
+              'value' => $url_string,
+            ];
+          }
         }
         if ($this->moduleHandler->moduleExists('devel') && $this->routeExists('entity.menu.devel_load')) {
           $route_name = 'entity.menu.devel_load';
           $params = ['menu' => $menu_id];
           $url = Url::fromRoute($route_name, $params);
-          $url_string = $url->toString();
+          if ($url->access()) {
+            $url_string = $url->toString();
 
-          $links[] = [
-            'labelRaw' => $this->t('Menus') . ' > ' . $menu->label() . ' > ' . $this->t('Devel'),
-            'value' => $url_string,
-          ];
+            $links[] = [
+              'labelRaw' => $this->t('Menus > @menu_label > ', ['@menu_label' => $menu->label()]) . $this->t('Devel'),
+              'value' => $url_string,
+            ];
+          }
         }
       }
     }
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarSearchTestBase.php b/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarSearchTestBase.php
index 6a16c5882e0f863a4a4ca078a6f163fc3e911859..87387810512ecebcd4c437a59d1f46772241887f 100755
--- a/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarSearchTestBase.php
+++ b/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarSearchTestBase.php
@@ -21,7 +21,7 @@ abstract class AdminToolbarSearchTestBase extends WebDriverTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = [
+  protected static $modules = [
     'admin_toolbar_search',
     'node',
     'media',
@@ -47,7 +47,7 @@ abstract class AdminToolbarSearchTestBase extends WebDriverTestBase {
   /**
    * {@inheritdoc}
    */
-  public function setUp() {
+  public function setUp(): void {
     parent::setUp();
 
     $baby_names = [
@@ -119,7 +119,7 @@ protected function assertSuggestionContains($search, $contains) {
       return ($page->find('css', 'ul.ui-autocomplete')->isVisible() === TRUE);
     });
     $suggestions_markup = $page->find('css', 'ul.ui-autocomplete')->getHtml();
-    $this->assertContains($contains, $suggestions_markup);
+    $this->assertStringContainsString($contains, $suggestions_markup);
   }
 
   /**
diff --git a/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php b/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php
index 84604bc0770d4e855487c7066081ffbebfc2af6e..b1bf1173efe728e92d215e97c19982c40000b8b3 100755
--- a/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php
+++ b/web/modules/admin_toolbar/admin_toolbar_search/tests/src/FunctionalJavascript/AdminToolbarToolsSearchTest.php
@@ -18,7 +18,7 @@ class AdminToolbarToolsSearchTest extends AdminToolbarSearchTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = [
+  protected static $modules = [
     'admin_toolbar_tools',
     'admin_toolbar_search',
     'node',
@@ -38,7 +38,7 @@ class AdminToolbarToolsSearchTest extends AdminToolbarSearchTestBase {
   /**
    * {@inheritdoc}
    */
-  public function setUp() {
+  public function setUp(): void {
     parent::setUp();
 
     $this->drupalCreateContentType([
@@ -67,6 +67,16 @@ public function setUp() {
       'ruby' => 'Ruby',
       'teddy' => 'Teddy',
       'toby' => 'Toby',
+      'tonga' => 'Tonga',
+      'tracey' => 'Tracey',
+      'tuna' => 'Tuna',
+      'uno' => 'Uno',
+      'venus' => 'Venus',
+      'vicky' => 'Vicky',
+      'wimpy' => 'Wimpy',
+      'yellow' => 'Yellow',
+      'zac' => 'zac',
+      'zora' => 'zora',
     ];
 
     foreach ($dog_names as $machine_name => $label) {
@@ -118,15 +128,6 @@ public function testToolbarSearch() {
     $this->drupalGet('/admin/admin-toolbar-search');
 
     $search_menus = [
-      'cora',
-      'eleanor',
-      'eloise',
-      'felix',
-      'freya',
-      'genevieve',
-      'isla',
-      'jasper',
-      'luna',
       'maeve',
       'milo',
       'nora',
@@ -184,12 +185,12 @@ public function testToolbarSearch() {
     // Test that bundle within admin toolbar appears in search.
     $this->assertSuggestionContains('lola', 'admin/structure/media/manage/lola/fields');
 
-    // Assert that a link after the limit (10) doesn't appear in admin toolbar.
-    $toby_url = '/admin/structure/media/manage/toby/fields';
-    $assert_session->elementNotContains('css', '#toolbar-administration', $toby_url);
+    // Assert that a link after the limit doesn't appear in admin toolbar.
+    $zora_url = '/admin/structure/media/manage/zora/fields';
+    $assert_session->elementNotContains('css', '#toolbar-administration', $zora_url);
 
     // Assert that a link excluded from admin toolbar appears in search.
-    $this->assertSuggestionContains('toby', $toby_url);
+    $this->assertSuggestionContains('zora', $zora_url);
 
     // Test that adding a new bundle updates the extra links loaded from
     // admin_toolbar.search route.
@@ -204,12 +205,12 @@ public function testToolbarSearch() {
 
     // Test that deleting a bundle updates the extra links loaded from
     // admin_toolbar.search route.
-    $toby = MediaType::load('toby');
-    $toby->delete();
+    $zora = MediaType::load('zora');
+    $zora->delete();
 
     $this->getSession()->reload();
     $assert_session->waitForElementVisible('css', $search_tray);
-    $this->assertSuggestionNotContains('toby', $toby_url);
+    $this->assertSuggestionNotContains('zora', $zora);
   }
 
 }
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.info.yml b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.info.yml
index 73cc5d7b0ad64e002c4859de77bb0d02536221c1..1bfd11c27a7aec2721ec43f68db0390d14866ad4 100644
--- a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.info.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.info.yml
@@ -1,14 +1,13 @@
 name: Admin Toolbar Extra Tools
 description: Adds menu links like Flush cache, Run cron, Run updates, and Logout under Drupal icon.
 package: Administration
-
+configure: admin_toolbar_tools.settings
 type: module
 core_version_requirement: ^8.8.0 || ^9.0
-
 dependencies:
   - admin_toolbar:admin_toolbar
 
-# Information added by Drupal.org packaging script on 2020-10-06
-version: '8.x-2.4'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '3.0.2'
 project: 'admin_toolbar'
-datestamp: 1601998855
+datestamp: 1629882676
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.install b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.install
index 1cc14c73d3d9d84970e7f3beefcb04087de69cbf..fae84ba5cdcf813857f7e038b5af4d8f12549b22 100644
--- a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.install
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.install
@@ -12,3 +12,23 @@ function admin_toolbar_tools_update_8001() {
   // Installing the Admin Toolbar Search module.
   \Drupal::service('module_installer')->install(['admin_toolbar_search']);
 }
+
+/**
+ * Default setting for maximum number of bundles per entity type to display.
+ */
+function admin_toolbar_tools_update_8201() {
+  \Drupal::service('config.factory')
+    ->getEditable('admin_toolbar_tools.settings')
+    ->set('max_bundle_number', 20)
+    ->save(TRUE);
+}
+
+/**
+ * Default setting for enable hoverintent.
+ */
+function admin_toolbar_tools_update_8202() {
+  \Drupal::service('config.factory')
+    ->getEditable('admin_toolbar_tools.settings')
+    ->set('hoverintent_functionality', TRUE)
+    ->save(TRUE);
+}
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml
index 670a4f76c6219fbffba857c4047554a17dfdf197..7b006bae4fbdf3b72756a45408b7213290f32929 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.links.menu.yml
@@ -40,7 +40,7 @@ admin_toolbar_tools.flush:
   menu_name: admin
 
 admin_toolbar_tools.cssjs:
-  title: 'Flush CSS and Javascript'
+  title: 'Flush CSS and JavaScript'
   route_name: admin_toolbar_tools.cssjs
   parent: admin_toolbar_tools.flush
   menu_name: admin
@@ -84,3 +84,9 @@ admin_toolbar_tools.theme_rebuild:
 admin_toolbar_tools.extra_links:
   deriver: \Drupal\admin_toolbar_tools\Plugin\Derivative\ExtraLinks
   menu_name: admin
+
+admin_toolbar_tools.settings:
+  title: 'Admin Toolbar Tools'
+  description: 'Configure the Admin Toolbar Tools module.'
+  route_name: admin_toolbar_tools.settings
+  parent: system.admin_config_ui
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.routing.yml b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.routing.yml
index bcae9db1b7b37b7fa0eaf8c3d7b94c5f30c74bca..e5a0bfd5dc64c7482e5ab3fcac4923d161c823b1 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.routing.yml
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/admin_toolbar_tools.routing.yml
@@ -11,7 +11,7 @@ admin_toolbar_tools.cssjs:
   path: '/admin/flush/cssjs'
   defaults:
     _controller: '\Drupal\admin_toolbar_tools\Controller\ToolbarController::flushJsCss'
-    _title: 'Flush Css and Javascript'
+    _title: 'Flush CSS and JavaScript'
   requirements:
     _permission: 'administer site configuration'
     _csrf_token: 'TRUE'
@@ -87,3 +87,11 @@ admin_toolbar.run.cron:
   requirements:
     _permission: 'administer site configuration'
     _csrf_token: 'TRUE'
+
+admin_toolbar_tools.settings:
+  path: '/admin/config/user-interface/admin-toolbar-tools'
+  defaults:
+    _form: '\Drupal\admin_toolbar_tools\Form\AdminToolbarToolsSettingsForm'
+    _title: 'Admin Toolbar Tools settings'
+  requirements:
+    _permission: 'administer site configuration'
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/config/install/admin_toolbar_tools.settings.yml b/web/modules/admin_toolbar/admin_toolbar_tools/config/install/admin_toolbar_tools.settings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2f4de2018d6f6331b799e51a2ed226764cab1cd0
--- /dev/null
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/config/install/admin_toolbar_tools.settings.yml
@@ -0,0 +1,2 @@
+max_bundle_number: 20
+hoverintent_functionality: true
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/config/schema/admin_toolbar_tools.schema.yml b/web/modules/admin_toolbar/admin_toolbar_tools/config/schema/admin_toolbar_tools.schema.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1280d38fb0411acaad638373114587ab800d2f75
--- /dev/null
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/config/schema/admin_toolbar_tools.schema.yml
@@ -0,0 +1,10 @@
+admin_toolbar_tools.settings:
+  type: config_object
+  label: 'Admin Toolbar Tools settings'
+  mapping:
+    max_bundle_number:
+      type: integer
+      label: 'Number of bundles per entity type to display'
+    hoverintent_functionality:
+      type: boolean
+      label: 'Enable or disable hoverintent functionality'
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/css/tools.css b/web/modules/admin_toolbar/admin_toolbar_tools/css/tools.css
index 708ea38fc650705fc21bb0f3470654742d596f5d..9233a708dac64ea14e1914c002759d67b15c7f94 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/css/tools.css
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/css/tools.css
@@ -18,6 +18,7 @@
 }
 
 .toolbar-icon-8 .toolbar-icon-admin-toolbar-tools-help:before {
+  box-sizing: content-box;
   background-image: url(../misc/icons/ffffff/drupal-8-logo.svg);
   padding-bottom: 0;
   padding-left: 4px;
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/src/Controller/ToolbarController.php b/web/modules/admin_toolbar/admin_toolbar_tools/src/Controller/ToolbarController.php
index 22ccded1fcf6600e3bd414f562d92effa89a61e7..dcb9d2b8835a2f00d19d57b3e5c5d19e4cab53c9 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/src/Controller/ToolbarController.php
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/src/Controller/ToolbarController.php
@@ -193,7 +193,7 @@ public function reloadPage() {
       return $request->server->get('HTTP_REFERER');
     }
     else {
-      return '/';
+      return base_path();
     }
   }
 
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/src/Form/AdminToolbarToolsSettingsForm.php b/web/modules/admin_toolbar/admin_toolbar_tools/src/Form/AdminToolbarToolsSettingsForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..ecdb03fe5e8d96efae0c2c1f28317b6a02400d5e
--- /dev/null
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/src/Form/AdminToolbarToolsSettingsForm.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace Drupal\admin_toolbar_tools\Form;
+
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\MenuLinkManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Class AdminToolbarToolsSettingsForm.
+ *
+ * @package Drupal\admin_toolbar_tools\Form
+ */
+class AdminToolbarToolsSettingsForm extends ConfigFormBase {
+
+  /**
+   * The cache menu instance.
+   *
+   * @var \Drupal\Core\Cache\CacheBackendInterface
+   */
+  protected $cacheMenu;
+
+  /**
+   * The menu link manager instance.
+   *
+   * @var \Drupal\Core\Menu\MenuLinkManagerInterface
+   */
+  protected $menuLinkManager;
+
+  /**
+   * AdminToolbarToolsSettingsForm constructor.
+   *
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $configFactory
+   *   The factory for configuration objects.
+   * @param \Drupal\Core\Menu\MenuLinkManagerInterface $menuLinkManager
+   *   A menu link manager instance.
+   * @param \Drupal\Core\Cache\CacheBackendInterface $cacheMenu
+   *   A cache menu instance.
+   */
+  public function __construct(ConfigFactoryInterface $configFactory, MenuLinkManagerInterface $menuLinkManager, CacheBackendInterface $cacheMenu) {
+    parent::__construct($configFactory);
+    $this->cacheMenu = $cacheMenu;
+    $this->menuLinkManager = $menuLinkManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+      $container->get('plugin.manager.menu.link'),
+      $container->get('cache.menu')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEditableConfigNames() {
+    return [
+      'admin_toolbar_tools.settings',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'admin_toolbar_tools_settings';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config('admin_toolbar_tools.settings');
+    $form['max_bundle_number'] = [
+      '#type' => 'number',
+      '#title' => $this->t('Maximum number of bundle sub-menus to display'),
+      '#description' => $this->t('Loading a large number of items can cause performance issues.'),
+      '#default_value' => $config->get('max_bundle_number'),
+    ];
+
+    $form['hoverintent_functionality'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Enable/Disable the hoverintent functionality'),
+      '#description' => $this->t('Check it if you want to enable the hoverintent feature.'),
+      '#default_value' => $config->get('hoverintent_functionality'),
+    ];
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $this->config('admin_toolbar_tools.settings')
+      ->set('max_bundle_number', $form_state->getValue('max_bundle_number'))
+      ->set('hoverintent_functionality', $form_state->getValue('hoverintent_functionality'))
+      ->save();
+    parent::submitForm($form, $form_state);
+    $this->cacheMenu->invalidateAll();
+    $this->menuLinkManager->rebuild();
+  }
+
+}
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Derivative/ExtraLinks.php b/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Derivative/ExtraLinks.php
index e9d6de8f576e964fd9d5b71598db59610b999088..4d98f3e2b753f3f7d0ea57adce7c96466605f1a2 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Derivative/ExtraLinks.php
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Derivative/ExtraLinks.php
@@ -3,6 +3,7 @@
 namespace Drupal\admin_toolbar_tools\Plugin\Derivative;
 
 use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Extension\ThemeHandlerInterface;
@@ -19,8 +20,6 @@ class ExtraLinks extends DeriverBase implements ContainerDeriverInterface {
 
   use StringTranslationTrait;
 
-  const MAX_BUNDLE_NUMBER = 10;
-
   /**
    * The entity type manager.
    *
@@ -49,14 +48,22 @@ class ExtraLinks extends DeriverBase implements ContainerDeriverInterface {
    */
   protected $themeHandler;
 
+  /**
+   * The admin toolbar tools configuration.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config;
+
   /**
    * {@inheritdoc}
    */
-  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, ThemeHandlerInterface $theme_handler) {
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory) {
     $this->entityTypeManager = $entity_type_manager;
     $this->moduleHandler = $module_handler;
     $this->routeProvider = $route_provider;
     $this->themeHandler = $theme_handler;
+    $this->config = $config_factory->get('admin_toolbar_tools.settings');
   }
 
   /**
@@ -67,7 +74,8 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
       $container->get('entity_type.manager'),
       $container->get('module_handler'),
       $container->get('router.route_provider'),
-      $container->get('theme_handler')
+      $container->get('theme_handler'),
+      $container->get('config.factory')
     );
   }
 
@@ -76,6 +84,7 @@ public static function create(ContainerInterface $container, $base_plugin_id) {
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
     $links = [];
+    $max_bundle_number = $this->config->get('max_bundle_number');
     $entity_types = $this->entityTypeManager->getDefinitions();
     $content_entities = [];
     foreach ($entity_types as $key => $entity_type) {
@@ -91,11 +100,10 @@ public function getDerivativeDefinitions($base_plugin_definition) {
     foreach ($content_entities as $entities) {
       $content_entity_bundle = $entities['content_entity_bundle'];
       $content_entity = $entities['content_entity'];
-      // We do not display more than 10 different bundles per entity type.
       $content_entity_bundle_storage = $this->entityTypeManager->getStorage($content_entity_bundle);
-      $bundles_ids = $content_entity_bundle_storage->getQuery()->pager(self::MAX_BUNDLE_NUMBER)->execute();
+      $bundles_ids = $content_entity_bundle_storage->getQuery()->pager($max_bundle_number)->execute();
       $bundles = $this->entityTypeManager->getStorage($content_entity_bundle)->loadMultiple($bundles_ids);
-      if (count($bundles) == self::MAX_BUNDLE_NUMBER && $this->routeExists('entity.' . $content_entity_bundle . '.collection')) {
+      if (count($bundles) == $max_bundle_number && $this->routeExists('entity.' . $content_entity_bundle . '.collection')) {
         $links[$content_entity_bundle . '.collection'] = [
           'title' => $this->t('All types'),
           'route_name' => 'entity.' . $content_entity_bundle . '.collection',
@@ -111,22 +119,33 @@ public function getDerivativeDefinitions($base_plugin_definition) {
           // link.
           $content_entity_bundle_root = 'entity.' . $content_entity_bundle . '.overview_form.' . $machine_name;
           $links[$content_entity_bundle_root] = [
-            'title' => $this->t('@label', ['@label' => $bundle->label()]),
             'route_name' => 'entity.' . $content_entity_bundle . '.overview_form',
             'parent' => 'entity.' . $content_entity_bundle . '.collection',
             'route_parameters' => [$content_entity_bundle => $machine_name],
+            'class' => 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity',
+            'metadata' => [
+              'entity_type' => $bundle->getEntityTypeId(),
+              'entity_id' => $bundle->id(),
+            ],
           ] + $base_plugin_definition;
         }
         if ($this->routeExists('entity.' . $content_entity_bundle . '.edit_form')) {
           $key = 'entity.' . $content_entity_bundle . '.edit_form.' . $machine_name;
           $links[$key] = [
-            'title' => $this->t('@label', ['@label' => $bundle->label()]),
             'route_name' => 'entity.' . $content_entity_bundle . '.edit_form',
             'parent' => 'entity.' . $content_entity_bundle . '.collection',
             'route_parameters' => [$content_entity_bundle => $machine_name],
           ] + $base_plugin_definition;
           if (empty($content_entity_bundle_root)) {
             $content_entity_bundle_root = $key;
+            $links[$key]['parent'] = 'entity.' . $content_entity_bundle . '.collection';
+
+            // When not grouped by bundle, use bundle name as title.
+            $links[$key]['class'] = 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity';
+            $links[$key]['metadata'] = [
+              'entity_type' => $bundle->getEntityTypeId(),
+              'entity_id' => $bundle->id(),
+            ];
           }
           else {
             $links[$key]['parent'] = $base_plugin_definition['id'] . ':' . $content_entity_bundle_root;
@@ -209,7 +228,7 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       'title' => $this->t('Add role'),
       'route_name' => 'user.role_add',
       'parent' => $base_plugin_definition['id'] . ':entity.user_role.collection',
-      'weight' => -5,
+      'weight' => -50,
     ] + $base_plugin_definition;
     // Adds sub-links to Account settings link.
     if ($this->moduleHandler->moduleExists('field_ui')) {
@@ -235,10 +254,15 @@ public function getDerivativeDefinitions($base_plugin_definition) {
 
     foreach ($this->entityTypeManager->getStorage('user_role')->loadMultiple() as $role) {
       $links['entity.user_role.edit_form.' . $role->id()] = [
-        'title' => $this->t('@label', ['@label' => $role->label()]),
         'route_name' => 'entity.user_role.edit_form',
         'parent' => $base_plugin_definition['id'] . ':entity.user_role.collection',
+        'weight' => $role->getWeight(),
         'route_parameters' => ['user_role' => $role->id()],
+        'class' => 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity',
+        'metadata' => [
+          'entity_type' => $role->getEntityTypeId(),
+          'entity_id' => $role->id(),
+        ],
       ] + $base_plugin_definition;
       $links['entity.user_role.edit_permissions_form.' . $role->id()] = [
         'title' => $this->t('Edit permissions'),
@@ -279,10 +303,14 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       // Adds node links for each content type.
       foreach ($this->entityTypeManager->getStorage('node_type')->loadMultiple() as $type) {
         $links['node.add.' . $type->id()] = [
-          'title' => $this->t('@label', ['@label' => $type->label()]),
           'route_name' => 'node.add',
           'parent' => $base_plugin_definition['id'] . ':node.add',
           'route_parameters' => ['node_type' => $type->id()],
+          'class' => 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity',
+          'metadata' => [
+            'entity_type' => $type->getEntityTypeId(),
+            'entity_id' => $type->id(),
+          ],
         ] + $base_plugin_definition;
       }
     }
@@ -317,11 +345,10 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         'weight' => -2,
       ] + $base_plugin_definition;
       // Adds links to /admin/structure/menu.
-      // We do not display more than 10 different menus.
       $menus = $this->entityTypeManager->getStorage('menu')->loadMultiple();
       uasort($menus, [Menu::class, 'sort']);
-      $menus = array_slice($menus, 0, self::MAX_BUNDLE_NUMBER);
-      if (count($menus) == self::MAX_BUNDLE_NUMBER) {
+      $menus = array_slice($menus, 0, $max_bundle_number);
+      if (count($menus) == $max_bundle_number) {
         $links['entity.menu.collection'] = [
           'title' => $this->t('All menus'),
           'route_name' => 'entity.menu.collection',
@@ -332,11 +359,15 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       $weight = 0;
       foreach ($menus as $menu_id => $menu) {
         $links['entity.menu.edit_form.' . $menu_id] = [
-          'title' => $menu->label(),
           'route_name' => 'entity.menu.edit_form',
           'parent' => 'entity.menu.collection',
           'route_parameters' => ['menu' => $menu_id],
           'weight' => $weight,
+          'class' => 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity',
+          'metadata' => [
+            'entity_type' => $menu->getEntityTypeId(),
+            'entity_id' => $menu->id(),
+          ],
         ] + $base_plugin_definition;
         $links['entity.menu.add_link_form.' . $menu_id] = [
           'title' => $this->t('Add link'),
@@ -554,6 +585,13 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         'route_name' => 'entity.media.collection',
         'parent' => 'system.admin_content',
       ] + $base_plugin_definition;
+      if ($this->moduleHandler->moduleExists('media_library')) {
+        $links['media_library'] = [
+            'title' => $this->t('Media library'),
+            'route_name' => 'view.media_library.page',
+            'parent' => $base_plugin_definition['id'] . ':media_page',
+          ] + $base_plugin_definition;
+      }
       $links['add_media'] = [
         'title' => $this->t('Add media'),
         'route_name' => 'entity.media.add_page',
@@ -562,10 +600,14 @@ public function getDerivativeDefinitions($base_plugin_definition) {
       // Adds links for each media type.
       foreach ($this->entityTypeManager->getStorage('media_type')->loadMultiple() as $type) {
         $links['media.add.' . $type->id()] = [
-          'title' => $type->label(),
           'route_name' => 'entity.media.add_form',
           'parent' => $base_plugin_definition['id'] . ':add_media',
           'route_parameters' => ['media_type' => $type->id()],
+          'class' => 'Drupal\admin_toolbar_tools\Plugin\Menu\MenuLinkEntity',
+          'metadata' => [
+            'entity_type' => $type->getEntityTypeId(),
+            'entity_id' => $type->id(),
+          ],
         ] + $base_plugin_definition;
       }
     }
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Menu/MenuLinkEntity.php b/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Menu/MenuLinkEntity.php
new file mode 100644
index 0000000000000000000000000000000000000000..195837a1985e9bddd6ae082b5f0b4dcbcb4e94a6
--- /dev/null
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/src/Plugin/Menu/MenuLinkEntity.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace Drupal\admin_toolbar_tools\Plugin\Menu;
+
+use Drupal\Core\Entity\EntityDescriptionInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Menu\MenuLinkDefault;
+use Drupal\Core\Menu\StaticMenuLinkOverridesInterface;
+use Drupal\node\NodeTypeInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a menu link plugins for configuration entities.
+ */
+class MenuLinkEntity extends MenuLinkDefault {
+
+  /**
+   * The entity represented in the menu link.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  protected $entity;
+
+  /**
+   * Constructs a new MenuLinkEntity.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Menu\StaticMenuLinkOverridesInterface $static_override
+   *   The static override storage.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, StaticMenuLinkOverridesInterface $static_override, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $static_override);
+    $this->entity = $entity_type_manager->getStorage($this->pluginDefinition['metadata']['entity_type'])->load($this->pluginDefinition['metadata']['entity_id']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('menu_link.static.overrides'),
+      $container->get('entity_type.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTitle() {
+    if ($this->entity) {
+      return (string) $this->entity->label();
+    }
+    return $this->pluginDefinition['title'] ?: $this->t('Missing');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    // @todo Remove node_type special handling.
+    if ($this->entity instanceof EntityDescriptionInterface || $this->entity instanceof NodeTypeInterface) {
+      return $this->entity->getDescription();
+    }
+    return parent::getDescription();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    if ($this->entity) {
+      return $this->entity->getCacheContexts();
+    }
+    return parent::getCacheContexts();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheTags() {
+    if ($this->entity) {
+      return $this->entity->getCacheTags();
+    }
+    return parent::getCacheTags();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheMaxAge() {
+    if ($this->entity) {
+      return $this->entity->getCacheMaxAge();
+    }
+    return parent::getCacheMaxAge();
+  }
+
+}
diff --git a/web/modules/admin_toolbar/admin_toolbar_tools/tests/src/Functional/AdminToolbarToolsAlterTest.php b/web/modules/admin_toolbar/admin_toolbar_tools/tests/src/Functional/AdminToolbarToolsAlterTest.php
index 9669a49a5f06eaed8aad6ef1dd6481a1914b5836..3e9a7cdcd7898d3ca5383b088dba038f6363660f 100755
--- a/web/modules/admin_toolbar/admin_toolbar_tools/tests/src/Functional/AdminToolbarToolsAlterTest.php
+++ b/web/modules/admin_toolbar/admin_toolbar_tools/tests/src/Functional/AdminToolbarToolsAlterTest.php
@@ -37,7 +37,7 @@ class AdminToolbarToolsAlterTest extends BrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  protected function setUp() {
+  protected function setUp(): void {
     parent::setUp();
     // Create and log in an administrative user.
     $this->adminUser = $this->drupalCreateUser([
diff --git a/web/modules/admin_toolbar/css/admin.toolbar.css b/web/modules/admin_toolbar/css/admin.toolbar.css
index a04575263aae8ca621a169a01d19e35addeb0c36..a04b1721257fcfacb451f6290d36755600c37022 100755
--- a/web/modules/admin_toolbar/css/admin.toolbar.css
+++ b/web/modules/admin_toolbar/css/admin.toolbar.css
@@ -8,7 +8,7 @@
 
 .toolbar-tray-horizontal .toolbar-menu:not(:first-child) li.menu-item--expanded > a:focus {
   background-position: center right;
-  background-image: url('../misc/icons/0074bd/chevron-right.svg');
+  background-image: url(../misc/icons/0074bd/chevron-right.svg);
   background-repeat: no-repeat;
 }
 
@@ -24,18 +24,18 @@
 
 .toolbar-tray-horizontal ul li li.menu-item {
   border-top: none transparent;
-  border-right: 1px solid #dddddd;
-  border-bottom: 1px solid #dddddd;
-  border-left: 1px solid #dddddd;
+  border-right: 1px solid #ddd;
+  border-bottom: 1px solid #ddd;
+  border-left: 1px solid #ddd;
 }
 
 .toolbar .toolbar-tray-horizontal .menu-item:last-child {
-  border-left: 1px solid #dddddd;
-  border-right: 1px solid #dddddd;
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
 }
 
 .toolbar .toolbar-tray-horizontal ul ul li.menu-item:first-child {
-  border-top: 1px solid #dddddd;
+  border-top: 1px solid #ddd;
 }
 
 .toolbar-tray-horizontal li.menu-item--expanded.hover-intent ul ul,
@@ -65,7 +65,7 @@
   display: block;
   position: absolute;
   width: 200px;
-  box-shadow: 2px 2px 3px hsla(0, 0%, 0%, 0.4);
+  box-shadow: 2px 2px 3px hsla(0, 0, 0, 0.4);
   z-index: 1;
 }
 
@@ -75,7 +75,7 @@
 
 .toolbar-tray-horizontal ul li.menu-item--expanded ul li.menu-item--expanded {
   background-position: center right;
-  background-image: url('../misc/icons/0074bd/chevron-right.svg');
+  background-image: url(../misc/icons/0074bd/chevron-right.svg);
   background-repeat: no-repeat;
 }
 
@@ -121,7 +121,7 @@
 
 [dir="rtl"] .toolbar-tray-horizontal .toolbar-menu:not(:first-child) li.menu-item--expanded > a:focus {
   background-position: center right;
-  background-image: url('../misc/icons/0074bd/chevron-right.svg');
+  background-image: url(../misc/icons/0074bd/chevron-right.svg);
   background-repeat: no-repeat;
 }
 
@@ -137,18 +137,18 @@
 
 [dir="rtl"] .toolbar-tray-horizontal ul li li.menu-item {
   border-top: none transparent;
-  border-right: 1px solid #dddddd;
-  border-bottom: 1px solid #dddddd;
-  border-left: 1px solid #dddddd;
+  border-right: 1px solid #ddd;
+  border-bottom: 1px solid #ddd;
+  border-left: 1px solid #ddd;
 }
 
 [dir="rtl"] .toolbar .toolbar-tray-horizontal .menu-item:last-child {
-  border-left: 1px solid #dddddd;
-  border-right: 1px solid #dddddd;
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
 }
 
 [dir="rtl"] .toolbar .toolbar-tray-horizontal ul ul li.menu-item:first-child {
-  border-top: 1px solid #dddddd;
+  border-top: 1px solid #ddd;
 }
 
 [dir="rtl"] .toolbar-tray-horizontal li.menu-item--expanded.hover-intent ul ul,
@@ -178,7 +178,7 @@
   display: block;
   position: absolute;
   width: 200px;
-  box-shadow: 2px 2px 3px hsla(0, 0%, 0%, 0.4);
+  box-shadow: 2px 2px 3px hsla(0, 0, 0, 0.4);
   z-index: 1;
 }
 
@@ -188,7 +188,7 @@
 
 [dir="rtl"] .toolbar-tray-horizontal ul li.menu-item--expanded ul li.menu-item--expanded {
   background-position: center left;
-  background-image: url('../misc/icons/0074bd/chevron-left.svg');
+  background-image: url(../misc/icons/0074bd/chevron-left.svg);
   background-repeat: no-repeat;
 }
 
diff --git a/web/modules/admin_toolbar/css/admin.toolbar_search.css b/web/modules/admin_toolbar/css/admin.toolbar_search.css
index bd99553855a90df5edaf42dc1fb09c127aaef075..115c0c2fde4b8560f320d74eed0c3f8963136cf6 100755
--- a/web/modules/admin_toolbar/css/admin.toolbar_search.css
+++ b/web/modules/admin_toolbar/css/admin.toolbar_search.css
@@ -3,17 +3,17 @@
 }
 
 #admin-toolbar-search-tab .toolbar-item:before {
-  background-image: url('../misc/icons/bebebe/loupe.svg');
+  background-image: url(../misc/icons/bebebe/loupe.svg);
 }
 
 #admin-toolbar-search-tab .toolbar-item:active:before,
 #admin-toolbar-search-tab .toolbar-item.is-active:before {
-  background-image: url('../misc/icons/ffffff/loupe.svg');
+  background-image: url(../misc/icons/ffffff/loupe.svg);
 }
 
 #toolbar-item-administration-search-tray label {
   display: inline-block;
-  color: #000000;
+  color: #000;
   margin-right: .5em;
   font-weight: bold;
 }
@@ -29,5 +29,5 @@
 }
 
 .ui-autocomplete .ui-menu-item span.admin-toolbar-search-url {
-  color: rgba(0, 0, 0, 0.50);
+  color: rgba(0, 0, 0, 0.5);
 }
diff --git a/web/modules/admin_toolbar/js/admin_toolbar.hover.js b/web/modules/admin_toolbar/js/admin_toolbar.hover.js
new file mode 100644
index 0000000000000000000000000000000000000000..11da3cd84416eeef4e3ee1b720cb6e1262c03329
--- /dev/null
+++ b/web/modules/admin_toolbar/js/admin_toolbar.hover.js
@@ -0,0 +1,13 @@
+(function ($) {
+  $(document).ready(function () {
+    $('.toolbar-tray.is-active.toolbar-tray-horizontal .menu-item.menu-item--expanded').hover(function () {
+      // At the current depth, we should delete all "hover-intent" classes.
+      // Other wise we get unwanted behaviour where menu items are expanded while already in hovering other ones.
+      $(this).parent().find('li').removeClass('hover-intent');
+      $(this).addClass('hover-intent');
+    },
+      function () {
+        $(this).removeClass('hover-intent');
+      });
+  });
+})(jQuery);
diff --git a/web/modules/admin_toolbar/js/admin_toolbar.hoverintent.js b/web/modules/admin_toolbar/js/admin_toolbar.hoverintent.js
new file mode 100644
index 0000000000000000000000000000000000000000..955e3bcbab97d6e9b8e9e216f343527f0d5d8ce8
--- /dev/null
+++ b/web/modules/admin_toolbar/js/admin_toolbar.hoverintent.js
@@ -0,0 +1,16 @@
+(function ($) {
+  $(document).ready(function () {
+    $('.toolbar-tray-horizontal li.menu-item--expanded, .toolbar-tray-horizontal ul li.menu-item--expanded .menu-item').hoverIntent({
+      over: function () {
+        // At the current depth, we should delete all "hover-intent" classes.
+        // Other wise we get unwanted behaviour where menu items are expanded while already in hovering other ones.
+        $(this).parent().find('li').removeClass('hover-intent');
+        $(this).addClass('hover-intent');
+      },
+      out: function () {
+        $(this).removeClass('hover-intent');
+      },
+      timeout: 250
+    });
+  });
+})(jQuery);
diff --git a/web/modules/admin_toolbar/js/admin_toolbar.js b/web/modules/admin_toolbar/js/admin_toolbar.js
index 2458c32d8657eee64e03550156595205f832c284..6e2a7af17159dd5734559fc720d3c67900672e7a 100755
--- a/web/modules/admin_toolbar/js/admin_toolbar.js
+++ b/web/modules/admin_toolbar/js/admin_toolbar.js
@@ -4,19 +4,6 @@
 
       $('a.toolbar-icon', context).removeAttr('title');
 
-      $('.toolbar-tray li.menu-item--expanded, .toolbar-tray ul li.menu-item--expanded .menu-item', context).hoverIntent({
-        over: function () {
-          // At the current depth, we should delete all "hover-intent" classes.
-          // Other wise we get unwanted behaviour where menu items are expanded while already in hovering other ones.
-          $(this).parent().find('li').removeClass('hover-intent');
-          $(this).addClass('hover-intent');
-        },
-        out: function () {
-          $(this).removeClass('hover-intent');
-        },
-        timeout: 250
-      });
-
       // Make the toolbar menu navigable with keyboard.
       $('ul.toolbar-menu li.menu-item--expanded a', context).on('focusin', function () {
         $('li.menu-item--expanded', context).removeClass('hover-intent');
diff --git a/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarAlterTest.php b/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarAlterTest.php
index c17f575ee5135a42040e5336a096d0a855a500d3..28ba1831fda8ad0bf2a221d1ba1d55ded7c17494 100755
--- a/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarAlterTest.php
+++ b/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarAlterTest.php
@@ -37,7 +37,7 @@ class AdminToolbarAlterTest extends BrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  protected function setUp() {
+  protected function setUp(): void {
     parent::setUp();
 
     // Create and log in an administrative user.
diff --git a/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarToolsSortTest.php b/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarToolsSortTest.php
index 8da6ca9ae27324dc9341d4152bc94910b2ff1af4..4a54a79de1292f7c3f4d25831d2afd62d51ef9f2 100644
--- a/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarToolsSortTest.php
+++ b/web/modules/admin_toolbar/tests/src/Functional/AdminToolbarToolsSortTest.php
@@ -120,18 +120,23 @@ public function testMenuSorting() {
     ]);
 
     $menus = [
-      'aaa' => 'lll',
-      'bbb' => 'kkk',
-      'ccc' => 'jjj',
-      'ddd' => 'iii',
-      'eee' => 'hhh',
-      'fff' => 'ggg',
-      'ggg' => 'fff',
-      'hhh' => 'eee',
-      'iii' => 'ddd',
-      'jjj' => 'ccc',
-      'kkk' => 'bbb',
-      'lll' => 'aaa',
+      'aaa' => 'qqq',
+      'bbb' => 'ppp',
+      'ccc' => 'ooo',
+      'ddd' => 'nnn',
+      'eee' => 'mmm',
+      'fff' => 'lll',
+      'ggg' => 'kkk',
+      'hhh' => 'jjj',
+      'iii' => 'iii',
+      'jjj' => 'hhh',
+      'kkk' => 'ggg',
+      'lll' => 'fff',
+      'mmm' => 'eee',
+      'nnn' => 'ddd',
+      'ooo' => 'ccc',
+      'ppp' => 'bbb',
+      'qqq' => 'aaa',
     ];
 
     foreach ($menus as $machine_name => $label) {
@@ -155,39 +160,68 @@ public function testMenuSorting() {
     }
 
     $expected = [
-      0 => '/admin/structure/menu/manage/lll',
-      1 => '/admin/structure/menu/manage/lll/add',
-      2 => '/admin/structure/menu/manage/lll/delete',
+      0 => '/admin/structure/menu/manage/qqq',
+      1 => '/admin/structure/menu/manage/qqq/add',
+      2 => '/admin/structure/menu/manage/qqq/delete',
       3 => '/admin/structure/menu/manage/admin',
       4 => '/admin/structure/menu/manage/admin/add',
-      5 => '/admin/structure/menu/manage/kkk',
-      6 => '/admin/structure/menu/manage/kkk/add',
-      7 => '/admin/structure/menu/manage/kkk/delete',
-      8 => '/admin/structure/menu/manage/jjj',
-      9 => '/admin/structure/menu/manage/jjj/add',
-      10 => '/admin/structure/menu/manage/jjj/delete',
-      11 => '/admin/structure/menu/manage/iii',
-      12 => '/admin/structure/menu/manage/iii/add',
-      13 => '/admin/structure/menu/manage/iii/delete',
-      14 => '/admin/structure/menu/manage/hhh',
-      15 => '/admin/structure/menu/manage/hhh/add',
-      16 => '/admin/structure/menu/manage/hhh/delete',
-      17 => '/admin/structure/menu/manage/ggg',
-      18 => '/admin/structure/menu/manage/ggg/add',
-      19 => '/admin/structure/menu/manage/ggg/delete',
+      5 => '/admin/structure/menu/manage/ppp',
+      6 => '/admin/structure/menu/manage/ppp/add',
+      7 => '/admin/structure/menu/manage/ppp/delete',
+      8 => '/admin/structure/menu/manage/ooo',
+      9 => '/admin/structure/menu/manage/ooo/add',
+      10 => '/admin/structure/menu/manage/ooo/delete',
+      11 => '/admin/structure/menu/manage/nnn',
+      12 => '/admin/structure/menu/manage/nnn/add',
+      13 => '/admin/structure/menu/manage/nnn/delete',
+      14 => '/admin/structure/menu/manage/mmm',
+      15 => '/admin/structure/menu/manage/mmm/add',
+      16 => '/admin/structure/menu/manage/mmm/delete',
+      17 => '/admin/structure/menu/manage/lll',
+      18 => '/admin/structure/menu/manage/lll/add',
+      19 => '/admin/structure/menu/manage/lll/delete',
       20 => '/admin/structure/menu/manage/footer',
       21 => '/admin/structure/menu/manage/footer/add',
-      22 => '/admin/structure/menu/manage/fff',
-      23 => '/admin/structure/menu/manage/fff/add',
-      24 => '/admin/structure/menu/manage/fff/delete',
-      25 => '/admin/structure/menu/manage/eee',
-      26 => '/admin/structure/menu/manage/eee/add',
-      27 => '/admin/structure/menu/manage/eee/delete',
+      22 => '/admin/structure/menu/manage/kkk',
+      23 => '/admin/structure/menu/manage/kkk/add',
+      24 => '/admin/structure/menu/manage/kkk/delete',
+      25 => '/admin/structure/menu/manage/jjj',
+      26 => '/admin/structure/menu/manage/jjj/add',
+      27 => '/admin/structure/menu/manage/jjj/delete',
+      28 => '/admin/structure/menu/manage/iii',
+      29 => '/admin/structure/menu/manage/iii/add',
+      30 => '/admin/structure/menu/manage/iii/delete',
+      31 => '/admin/structure/menu/manage/hhh',
+      32 => '/admin/structure/menu/manage/hhh/add',
+      33 => '/admin/structure/menu/manage/hhh/delete',
+      34 => '/admin/structure/menu/manage/ggg',
+      35 => '/admin/structure/menu/manage/ggg/add',
+      36 => '/admin/structure/menu/manage/ggg/delete',
+      37 => '/admin/structure/menu/manage/fff',
+      38 => '/admin/structure/menu/manage/fff/add',
+      39 => '/admin/structure/menu/manage/fff/delete',
+      40 => '/admin/structure/menu/manage/main',
+      41 => '/admin/structure/menu/manage/main/add',
+      42 => '/admin/structure/menu/manage/eee',
+      43 => '/admin/structure/menu/manage/eee/add',
+      44 => '/admin/structure/menu/manage/eee/delete',
+      45 => '/admin/structure/menu/manage/ddd',
+      46 => '/admin/structure/menu/manage/ddd/add',
+      47 => '/admin/structure/menu/manage/ddd/delete',
+      48 => '/admin/structure/menu/manage/ccc',
+      49 => '/admin/structure/menu/manage/ccc/add',
+      50 => '/admin/structure/menu/manage/ccc/delete',
+      51 => '/admin/structure/menu/manage/bbb',
+      52 => '/admin/structure/menu/manage/bbb/add',
+      53 => '/admin/structure/menu/manage/bbb/delete',
+      54 => '/admin/structure/menu/manage/aaa',
+      55 => '/admin/structure/menu/manage/aaa/add',
+      56 => '/admin/structure/menu/manage/aaa/delete',
     ];
 
     foreach ($links as $key => $link) {
       // Using assert contains because prefaces the urls with "/subdirectory".
-      $this->assertContains($expected[$key], $link);
+      $this->assertStringContainsString($expected[$key], $link);
     }
   }
 
diff --git a/web/modules/webform/composer.json b/web/modules/webform/composer.json
index 19ab81753a5e7a9ea17e6d52f3977666b29fcbe6..1c25939c05db3e721e7a380d0153619e9990acab 100644
--- a/web/modules/webform/composer.json
+++ b/web/modules/webform/composer.json
@@ -31,7 +31,7 @@
   "extra": {
     "drush": {
       "services": {
-        "drush.services.yml": "^9"
+        "drush.services.yml": "^9 || ^10"
       }
     }
   },
diff --git a/web/modules/webform/composer.libraries.json b/web/modules/webform/composer.libraries.json
index 16c9dec4a13cd2af7f821c560d517c10a60c52fd..efbccb97aaa770ef1476c683b9d316b64f4c5ad5 100644
--- a/web/modules/webform/composer.libraries.json
+++ b/web/modules/webform/composer.libraries.json
@@ -101,13 +101,13 @@
             "type": "package",
             "package": {
                 "name": "ckeditor/autogrow",
-                "version": "4.14.1",
+                "version": "4.16.2",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "ckeditor.autogrow"
                 },
                 "dist": {
-                    "url": "https://download.ckeditor.com/autogrow/releases/autogrow_4.14.1.zip",
+                    "url": "https://download.ckeditor.com/autogrow/releases/autogrow_4.16.2.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -137,13 +137,13 @@
             "type": "package",
             "package": {
                 "name": "ckeditor/fakeobjects",
-                "version": "4.14.1",
+                "version": "4.16.2",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "ckeditor.fakeobjects"
                 },
                 "dist": {
-                    "url": "https://download.ckeditor.com/fakeobjects/releases/fakeobjects_4.14.1.zip",
+                    "url": "https://download.ckeditor.com/fakeobjects/releases/fakeobjects_4.16.2.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -155,13 +155,13 @@
             "type": "package",
             "package": {
                 "name": "ckeditor/image",
-                "version": "4.14.1",
+                "version": "4.16.2",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "ckeditor.image"
                 },
                 "dist": {
-                    "url": "https://download.ckeditor.com/image/releases/image_4.14.1.zip",
+                    "url": "https://download.ckeditor.com/image/releases/image_4.16.2.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -173,13 +173,13 @@
             "type": "package",
             "package": {
                 "name": "ckeditor/link",
-                "version": "4.14.1",
+                "version": "4.16.2",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "ckeditor.link"
                 },
                 "dist": {
-                    "url": "https://download.ckeditor.com/link/releases/link_4.14.1.zip",
+                    "url": "https://download.ckeditor.com/link/releases/link_4.16.2.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -191,13 +191,13 @@
             "type": "package",
             "package": {
                 "name": "codemirror/codemirror",
-                "version": "5.53.2",
+                "version": "5.61.1",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "codemirror"
                 },
                 "dist": {
-                    "url": "https://github.com/components/codemirror/archive/5.53.2.zip",
+                    "url": "https://github.com/components/codemirror/archive/5.61.1.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -299,13 +299,13 @@
             "type": "package",
             "package": {
                 "name": "jquery/inputmask",
-                "version": "5.0.5",
+                "version": "5.0.6",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "jquery.inputmask"
                 },
                 "dist": {
-                    "url": "https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.5.zip",
+                    "url": "https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.6.zip",
                     "type": "zip"
                 },
                 "require": {
@@ -389,13 +389,13 @@
             "type": "package",
             "package": {
                 "name": "jquery/timepicker",
-                "version": "1.13.14",
+                "version": "1.13.18",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "jquery.timepicker"
                 },
                 "dist": {
-                    "url": "https://github.com/jonthornton/jquery-timepicker/archive/1.13.14.zip",
+                    "url": "https://github.com/jonthornton/jquery-timepicker/archive/1.13.18.zip",
                     "type": "zip"
                 },
                 "require": {
diff --git a/web/modules/webform/docs/RELEASE-NOTES.md b/web/modules/webform/docs/RELEASE-NOTES.md
index 096399d5d808cb6f2b7bd54c7d2022ba4ac4b314..73f65724f46cd742bc689daec08998c8f17bd935 100644
--- a/web/modules/webform/docs/RELEASE-NOTES.md
+++ b/web/modules/webform/docs/RELEASE-NOTES.md
@@ -28,6 +28,15 @@ Steps for creating a new release
     phpcs --standard=DrupalPractice --extensions=php,module,inc,install,test,profile,theme,js,css,info modules/sandbox/webform > ~/webform-php-best-practice.txt
     cat ~/webform-php-best-practice.txt
 
+    # Install PHP version compatibility (One-time)
+    cd /var/www/sites/d8_webform
+    composer require --dev phpcompatibility/php-compatibility
+
+    # Check PHP version compatibility
+    cd /var/www/sites/d8_webform/web
+    phpcs --runtime-set testVersion 8.0 --standard=../vendor/phpcompatibility/php-compatibility/PHPCompatibility --extensions=php,module,inc,install,test,profile,theme modules/sandbox/webform > ~/webform-php-compatibility.txt
+    cat ~/webform-php-compatibility.txt
+
 [JavaScript](https://www.drupal.org/node/2873849)
 
     # Install Eslint. (One-time)
diff --git a/web/modules/webform/drush/webform.drush.inc b/web/modules/webform/drush/webform.drush.inc
index b54b4a296a3fed45396678d350ee6b74de57754f..57dba355a01809bc82f6b5a4d2f1e5a6c165dc76 100644
--- a/web/modules/webform/drush/webform.drush.inc
+++ b/web/modules/webform/drush/webform.drush.inc
@@ -3,7 +3,7 @@
 // @codingStandardsIgnoreFile
 
 /**
- * This is file was generated using Drush. DO NOT EDIT. 
+ * This is file was generated using Drush. DO NOT EDIT.
  *
  * @see drush webform-generate-commands
  * @see \Drupal\webform\Commands\DrushCliServiceBase::generate_commands_drush8
@@ -135,20 +135,6 @@ function webform_drush_command() {
         'webform:libraries:status',
       ),
     ),
-    'webform-libraries-make' => array(
-      'description' => 'Generates libraries YAML to be included in a drush.make.yml files.',
-      'core' => array(
-        '8+',
-      ),
-      'bootstrap' => 1,
-      'examples' => array(
-        'webform-libraries-make' => 'Generates libraries YAML to be included in a drush.make.yml file.',
-      ),
-      'aliases' => array(
-        'wflm',
-        'webform:libraries:make',
-      ),
-    ),
     'webform-libraries-composer' => array(
       'description' => "Generates the Webform module's composer.json with libraries as repositories.",
       'core' => array(
@@ -370,17 +356,6 @@ function drush_webform_libraries_status() {
   return call_user_func_array([\Drupal::service('webform.cli_service'), 'drush_webform_libraries_status'], func_get_args());
 }
 
-/******************************************************************************/
-// drush webform-libraries-make. DO NOT EDIT.
-/******************************************************************************/
-
-/**
- * Implements drush_hook_COMMAND().
- */
-function drush_webform_libraries_make() {
-  return call_user_func_array([\Drupal::service('webform.cli_service'), 'drush_webform_libraries_make'], func_get_args());
-}
-
 /******************************************************************************/
 // drush webform-libraries-composer. DO NOT EDIT.
 /******************************************************************************/
diff --git a/web/modules/webform/includes/webform.editor.inc b/web/modules/webform/includes/webform.editor.inc
index 4af0de3f3277b995ef16f9196f4916748b101d9b..0eca85961ae0c907bd4f639db7afc6d7d3a0abc2 100644
--- a/web/modules/webform/includes/webform.editor.inc
+++ b/web/modules/webform/includes/webform.editor.inc
@@ -243,15 +243,24 @@ function _webform_parse_file_uuids($text) {
     return [];
   }
 
-  $dom = Html::load($text);
-  $xpath = new \DOMXPath($dom);
-
   $uuids = [];
 
-  // Find all <img> and <a> tags which reference uploaded files.
-  $nodes = $xpath->query('//*[@data-entity-type="file" and @data-entity-uuid]');
-  foreach ($nodes as $node) {
-    $uuids[] = $node->getAttribute('data-entity-uuid');
+  // Look through all images and hyperlinks for files.
+  if (preg_match_all('/<[^>]+data-entity-type[^>]+>/', $text, $matches)) {
+    foreach ($matches[0] as $match) {
+      // Cleanup quotes escaped via YAML.
+      // Please note, calling stripslashes() twice because elements are
+      // double escaped.
+      $match = stripslashes(stripslashes($match));
+
+      // Look for a file and record UUID when found.
+      $dom = Html::load($match);
+      $xpath = new \DOMXPath($dom);
+      $nodes = $xpath->query('//*[@data-entity-type="file" and @data-entity-uuid]');
+      if (count($nodes) && $nodes->item(0)) {
+        $uuids[] = $nodes->item(0)->getAttribute('data-entity-uuid');
+      }
+    }
   }
 
   // Use array_unique() to collect one uuid per uploaded file.
diff --git a/web/modules/webform/includes/webform.install.update.inc b/web/modules/webform/includes/webform.install.update.inc
index 216ebf1672ce90e0b980f2949cbdc46988a08b76..a9b831dcd9b7ebcaf86f5ead25d16111a95a50e1 100644
--- a/web/modules/webform/includes/webform.install.update.inc
+++ b/web/modules/webform/includes/webform.install.update.inc
@@ -1439,15 +1439,15 @@ function webform_update_8071() {
     foreach ($handlers as $handler) {
       if ($handler instanceof RemotePostWebformHandler) {
         $has_remote_post = TRUE;
-        $configuration = $handler->getConfiguration();
-        foreach ($configuration['settings'] as $key => $value) {
+        $configuration = $handler->getSettings();
+        foreach ($configuration as $key => $value) {
           if (isset($settings_mapping[$key])) {
-            $configuration['settings'][$settings_mapping[$key]] = $value;
-            unset($configuration['settings'][$key]);
+            $configuration[$settings_mapping[$key]] = $value;
+            unset($configuration[$key]);
           }
         }
-        $configuration['settings'] += $handler->defaultConfiguration();
-        $handler->setConfiguration($configuration);
+        $configuration += $handler->defaultConfiguration();
+        $handler->getSettings($configuration);
       }
     }
     if ($has_remote_post) {
@@ -1918,12 +1918,10 @@ function webform_update_8100() {
     foreach ($handlers as $handler) {
       if ($handler instanceof RemotePostWebformHandler) {
         $has_handler = TRUE;
-        $configuration = $handler->getConfiguration();
-        $settings = $configuration['settings'];
+        $settings = $handler->getSettings();
         if ($settings['excluded_data']) {
           $settings['excluded_data']['locked'] = 'locked';
-          $configuration['settings'] = $settings;
-          $handler->setConfiguration($configuration);
+          $handler->setSettings($settings);
         }
       }
     }
diff --git a/web/modules/webform/includes/webform.theme.inc b/web/modules/webform/includes/webform.theme.inc
index 20081bf2d79b3c84863a021320dd2c844858b9fa..410ae7a917fece938632617c2772fd1d824f25f4 100644
--- a/web/modules/webform/includes/webform.theme.inc
+++ b/web/modules/webform/includes/webform.theme.inc
@@ -441,6 +441,10 @@ function webform_preprocess_fieldset(&$variables) {
 
   $element = &$variables['element'];
 
+  // @todo [Drupal 9.3] Remove the below code
+  // Fieldset elements now respect the #description_display option
+  // @see https://www.drupal.org/node/3143489
+  //
   // If the description is displayed 'before' we need to move it to the
   // fieldset's prefix.
   // @see fieldset.html.twig
diff --git a/web/modules/webform/includes/webform.theme.template.inc b/web/modules/webform/includes/webform.theme.template.inc
index afee030df95a9082f7e2b82e93c48f9dae00596c..4c38f82517685df0255936cc192869c8ca50d418 100644
--- a/web/modules/webform/includes/webform.theme.template.inc
+++ b/web/modules/webform/includes/webform.theme.template.inc
@@ -376,6 +376,11 @@ function template_preprocess_webform_submission_information(array &$variables) {
     else {
       $base_route_name = 'webform_submission.delete_form';
     }
+    // Append token to delete URL.
+    $token = \Drupal::request()->query->get('token');
+    if ($webform->getSetting('token_delete') && $token === $webform_submission->getToken()) {
+      $route_options['query']['token'] = $token;
+    }
     $url = $request_handler->getUrl($webform_submission, $source_entity, $base_route_name, $route_options);
     $variables['delete'] = [
       '#type' => 'link',
@@ -715,6 +720,7 @@ function template_preprocess_webform_section(array &$variables) {
   $variables['title_display'] = isset($element['#title_display']) ? $element['#title_display'] : NULL;
   $variables['title_tag'] = isset($element['#title_tag']) ? $element['#title_tag'] : 'h2';
   $variables['title_attributes'] = isset($element['#title_attributes']) ? $element['#title_attributes'] : [];
+  $variables['description_display'] = isset($element['#description_display']) ? $element['#description_display'] : 'before';
   $variables['children'] = $element['#children'];
   $variables['required'] = !empty($element['#required']) ? $element['#required'] : NULL;
 
diff --git a/web/modules/webform/js/webform.element.inputmask.js b/web/modules/webform/js/webform.element.inputmask.js
index 193214405cdfe9063c598a3f90bd6b8e9db59ed5..2aa6b55f5ec770379fa877246eeaa1be694daeae 100644
--- a/web/modules/webform/js/webform.element.inputmask.js
+++ b/web/modules/webform/js/webform.element.inputmask.js
@@ -20,6 +20,26 @@
         digits: 2,
         digitsOptional: false,
         clearMaskOnLostFocus: false
+      },
+      currency_negative: {
+        prefix: '$ ',
+        groupSeparator: ',',
+        alias: 'numeric',
+        placeholder: '0',
+        autoGroup: true,
+        digits: 2,
+        digitsOptional: false,
+        clearMaskOnLostFocus: false
+      },
+      currency_positive_negative: {
+        prefix: '$ ',
+        groupSeparator: ',',
+        alias: 'numeric',
+        placeholder: '0',
+        autoGroup: true,
+        digits: 2,
+        digitsOptional: false,
+        clearMaskOnLostFocus: false
       }
     });
   }
diff --git a/web/modules/webform/js/webform.element.telephone.js b/web/modules/webform/js/webform.element.telephone.js
index cf23d9ef5cbe7c060a24cbcc134b20a6fe2b9ac5..9812b455885cb72086469013760e67c1be3e44f3 100644
--- a/web/modules/webform/js/webform.element.telephone.js
+++ b/web/modules/webform/js/webform.element.telephone.js
@@ -58,7 +58,14 @@
           if ($.trim($telephone.val())) {
             if (!$telephone.intlTelInput('isValidNumber')) {
               $telephone.addClass('error');
-              var message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': $telephone.attr('placeholder')});
+              var placeholder = $telephone.attr('placeholder');
+              var message;
+              if (placeholder) {
+                message = Drupal.t('The phone number is not valid. (e.g. @example)', {'@example': placeholder});
+              }
+              else {
+                message = Drupal.t('The phone number is not valid.');
+              }
               $error.html(message).show();
               return false;
             }
@@ -79,6 +86,13 @@
           if (!validate()) {
             $telephone.focus();
             event.preventDefault();
+
+            // On validation error make sure to clear submit the once behavior.
+            // @see Drupal.behaviors.webformSubmitOnce
+            // @see webform.form.submit_once.js
+            if (Drupal.behaviors.webformSubmitOnce) {
+              Drupal.behaviors.webformSubmitOnce.clear();
+            }
           }
         });
       });
diff --git a/web/modules/webform/js/webform.form.tabs.js b/web/modules/webform/js/webform.form.tabs.js
index 6e709f0b65e39864c9c5dd2462677c4890a42e99..75be86feff2c570d721f4414294403a7ea14671d 100644
--- a/web/modules/webform/js/webform.form.tabs.js
+++ b/web/modules/webform/js/webform.form.tabs.js
@@ -32,7 +32,7 @@
         // Set active tab and clear the location hash once it is set.
         var tabIndex = 0;
         if (location.hash) {
-          tabIndex = $('a[href="' + location.hash + '"]').data('tab-index');
+          tabIndex = $('a[href="' + Drupal.checkPlain(location.hash) + '"]').data('tab-index');
           if (typeof tabIndex !== 'undefined') {
             location.hash = '';
           }
diff --git a/web/modules/webform/js/webform.states.js b/web/modules/webform/js/webform.states.js
index bf9e91fbd6bd628d873335d6ea29451276fea61f..314f7f793c6379a57f8e01b6f6d81382f2943fcd 100644
--- a/web/modules/webform/js/webform.states.js
+++ b/web/modules/webform/js/webform.states.js
@@ -38,7 +38,7 @@
    *   TRUE if element is within the webform.
    */
   $.fn.isWebform = function () {
-    return $(this).closest('form[id^="webform"], form[data-is-webform]').length ? true : false;
+    return $(this).closest('form.webform-submission-form, form[id^="webform"], form[data-is-webform]').length ? true : false;
   };
 
   /**
@@ -157,9 +157,10 @@
       // @see Issue #2860529: Conditional required File upload field don't work.
       toggleRequired($target.find('input[type="file"]'), e.value);
 
-      // Fix #required for radios.
+      // Fix #required for radios and likert.
       // @see Issue #2856795: If radio buttons are required but not filled form is nevertheless submitted.
-      if ($target.is('.js-form-type-radios, .js-form-type-webform-radios-other, .js-webform-type-radios, .js-webform-type-webform-radios-other')) {
+      if ($target.is('.js-form-type-radios, .js-form-type-webform-radios-other, .js-webform-type-radios, .js-webform-type-webform-radios-other, .js-webform-type-webform-entity-radios, .webform-likert-table')) {
+        $target.toggleClass('required', e.value);
         toggleRequired($target.find('input[type="radio"]'), e.value);
       }
 
@@ -167,6 +168,7 @@
       // @see Issue #2938414: Checkboxes don't support #states required.
       // @see checkboxRequiredhandler
       if ($target.is('.js-form-type-checkboxes, .js-form-type-webform-checkboxes-other, .js-webform-type-checkboxes, .js-webform-type-webform-checkboxes-other')) {
+        $target.toggleClass('required', e.value);
         var $checkboxes = $target.find('input[type="checkbox"]');
         if (e.value) {
           // Add event handler.
@@ -182,6 +184,33 @@
         }
       }
 
+      // Fix #required for tableselect.
+      // @see Issue #3212581: Table select does not trigger client side validation
+      if ($target.is('.js-webform-tableselect')) {
+        $target.toggleClass('required', e.value);
+        var isMultiple = $target.is('[multiple]');
+        if (isMultiple) {
+          // Checkboxes.
+          var $tbody = $target.find('tbody');
+          var $checkboxes = $tbody.find('input[type="checkbox"]');
+          copyRequireMessage($target, $checkboxes);
+          if (e.value) {
+            $checkboxes.on('click change', statesCheckboxesRequiredEventHandler);
+            checkboxesRequired($tbody);
+          }
+          else {
+            $checkboxes.off('click change ', statesCheckboxesRequiredEventHandler);
+            toggleRequired($tbody, false);
+          }
+        }
+        else {
+          // Radios.
+          var $radios = $target.find('input[type="radio"]');
+          copyRequireMessage($target, $radios);
+          toggleRequired($radios, e.value);
+        }
+      }
+
       // Fix required label for elements without the for attribute.
       // @see Issue #3145300: Conditional Visible Select Other not working.
       if ($target.is('.js-form-type-webform-select-other, .js-webform-type-webform-select-other')) {
@@ -314,7 +343,7 @@
    */
   Drupal.behaviors.webformRadiosRequired = {
     attach: function (context) {
-      $('.js-form-type-radios, .js-form-type-webform-radios-other, .js-webform-type-radios, .js-webform-type-webform-radios-other', context)
+      $('.js-form-type-radios, .js-form-type-webform-radios-other, .js-webform-type-radios, .js-webform-type-webform-radios-other, .js-webform-type-webform-entity-radios, .js-webform-type-webform-scale', context)
         .once('webform-radios-required')
         .each(function () {
           var $element = $(this);
@@ -323,6 +352,38 @@
     }
   };
 
+ /**
+   * Adds HTML5 validation to required table select.
+   *
+   * @type {Drupal~behavior}
+   *
+   * @see https://www.drupal.org/project/webform/issues/2856795
+   */
+  Drupal.behaviors.webformTableSelectRequired = {
+    attach: function (context) {
+      $('.js-webform-tableselect.required', context)
+        .once('webform-tableselect-required')
+        .each(function () {
+          var $element = $(this);
+          var $tbody = $element.find('tbody');
+          var isMultiple = $element.is('[multiple]');
+
+          if (isMultiple) {
+            // Check all checkbox triggers checkbox 'change' event on
+            // select and deselect all.
+            // @see Drupal.tableSelect
+            $tbody.find('input[type="checkbox"]').on('click change', function () {
+              checkboxesRequired($tbody);
+            });
+          }
+
+          setTimeout(function () {
+            isMultiple ? checkboxesRequired($tbody) : radiosRequired($element);
+          });
+        });
+    }
+  };
+
   /**
    * Add HTML5 multiple checkboxes required validation.
    *
@@ -551,11 +612,22 @@
    *   Is input required.
    */
   function toggleRequired($input, required) {
+    var isCheckboxOrRadio = ($input.attr('type') === 'radio' || $input.attr('type') === 'checkbox');
     if (required) {
-      $input.attr({'required': 'required', 'aria-required': 'true'});
+      if (isCheckboxOrRadio) {
+        $input.attr({'required': 'required'});
+      }
+      else {
+        $input.attr({'required': 'required', 'aria-required': 'true'});
+      }
     }
     else {
-      $input.removeAttr('required aria-required');
+      if (isCheckboxOrRadio) {
+        $input.removeAttr('required');
+      }
+      else {
+        $input.removeAttr('required aria-required');
+      }
     }
   }
 
diff --git a/web/modules/webform/modules/webform_access/webform_access.info.yml b/web/modules/webform/modules/webform_access/webform_access.info.yml
index cf7b206548603b7e48a6b0254962bdc51ed3488b..db78ff1c2429fcf799d8b600291a11ac79543344 100644
--- a/web/modules/webform/modules/webform_access/webform_access.info.yml
+++ b/web/modules/webform/modules/webform_access/webform_access.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
index c0676fcc0ae270f0dc5ec446b1730e9417c943a3..8df158a8d4971a68ef5a4f0183b4918047d94421 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/webform_attachment_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_attachment'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
index 586a91b83825285b9fea4388cf0c9ffc4f670fea..eda9e2c2d14f4e89b1da01541ad0e00a826ce1d2 100644
--- a/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
+++ b/web/modules/webform/modules/webform_attachment/webform_attachment.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
index 873a9966425ef025bf44e0afd5254029505b1438..3c72ea12150b76234bdca30650f2bf9e18533c7d 100644
--- a/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/tests/modules/webform_bootstrap_test_module/webform_bootstrap_test_module.info.yml
@@ -9,7 +9,7 @@ dependencies:
 # Issue #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the Webform module's (optional) dependencies.
 #  - 'styleguide:styleguide'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
index 29464e3070c6ba5b2225aa1fbeab059aed6fd079..5caf152c3fe787fd8a87c2961771944a74da5ae7 100644
--- a/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/tests/themes/webform_bootstrap_test_theme/webform_bootstrap_test_theme.info.yml
@@ -22,7 +22,7 @@ regions:
 libraries:
   - 'webform_bootstrap_test_theme/global-styling'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
index fcf3df5892bb797483cfb563d49807acc33cec8f..5b99bb1d8e1335ae2bfe04179671776fdeb3ce68 100644
--- a/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
+++ b/web/modules/webform/modules/webform_bootstrap/webform_bootstrap.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_cards/src/Plugin/WebformElement/WebformCard.php b/web/modules/webform/modules/webform_cards/src/Plugin/WebformElement/WebformCard.php
index 5d7b0b844154c15128fb65d83456eec2ca46ef32..74023131c61ae0122f62e1835088ba0d2a9d90d0 100644
--- a/web/modules/webform/modules/webform_cards/src/Plugin/WebformElement/WebformCard.php
+++ b/web/modules/webform/modules/webform_cards/src/Plugin/WebformElement/WebformCard.php
@@ -96,6 +96,13 @@ protected function formatHtmlItem(array $element, WebformSubmissionInterface $we
     return $build;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function preview() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/modules/webform_cards/templates/webform-card.html.twig b/web/modules/webform/modules/webform_cards/templates/webform-card.html.twig
index f03588d9dee7c1d5d290cb8ff50746f2cf004acb..5d563dfd5389b214a9fc89c5ac21b83b2af7369d 100644
--- a/web/modules/webform/modules/webform_cards/templates/webform-card.html.twig
+++ b/web/modules/webform/modules/webform_cards/templates/webform-card.html.twig
@@ -16,7 +16,7 @@
  *
  * Copied from: fieldset.html.twig
  *
- * @see template_preprocess_webform_section()
+ * @see template_preprocess_webform_card()
  *
  * @ingroup themeable
  */
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
index 1b1655672c003544ea70fd22656f48447d7c8aec..c04500b1781381d3a6dd7a4624c0864702923a6e 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/webform_cards_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_cards'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.info.yml b/web/modules/webform/modules/webform_cards/webform_cards.info.yml
index ecb06d99575c239a88f14c89546d72348f546d3f..3812074fdc31e1ed06d2b72463f7db6bfcf12fc1 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.info.yml
+++ b/web/modules/webform/modules/webform_cards/webform_cards.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform_clientside_validation'
   - 'drupal:inline_form_errors'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.module b/web/modules/webform/modules/webform_cards/webform_cards.module
index f78d6964749bf8b862f5d42d56c829a8795a9175..d6fe0e50b4ebf00c6da11b3699f34d06fb4ff11b 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.module
+++ b/web/modules/webform/modules/webform_cards/webform_cards.module
@@ -45,7 +45,7 @@ function webform_cards_entity_base_field_info(EntityTypeInterface $entity_type)
  */
 function webform_cards_menu_local_actions_alter(&$local_actions) {
   if (!\Drupal::moduleHandler()->moduleExists('webform_ui')) {
-    $local_actions['entity.webform_ui.element.card'];
+    unset($local_actions['entity.webform_ui.element.card']);
   }
 }
 
@@ -389,7 +389,7 @@ function webform_cards_form_webform_settings_form_alter(array &$form, FormStateI
 }
 
 /**
- * Implements hook_form_FORM_ID_alter() for webform settings:form.
+ * Implements hook_form_FORM_ID_alter() for webform settings form.
  *
  * @see \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm
  * @see /admin/structure/webform/manage/{webform}/settings/form
@@ -459,6 +459,37 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
   ]);
 }
 
+/**
+ * Implements hook_form_FORM_ID_alter() for webform settings submissions.
+ *
+ * @see \Drupal\webform\EntitySettings\WebformEntitySettingsSubmissionsForm
+ * @see /admin/structure/webform/manage/{webform}/settings/form
+ */
+function webform_cards_form_webform_settings_submissions_form_alter(array &$form, FormStateInterface $form_state) {
+  /** @var \Drupal\webform\EntitySettings\WebformEntitySettingsSubmissionsForm $form_object */
+  $form_object = $form_state->getFormObject();
+  $webform = $form_object->getEntity();
+
+  /** @var \Drupal\webform_cards\WebformCardsManagerInterface $webform_cards_manager */
+  $webform_cards_manager = \Drupal::service('webform_cards.manager');
+
+  // Check if the webform has cards.
+  if ($webform_cards_manager->hasCards($webform)) {
+    $form['draft_settings']['draft_container']['draft_auto_save']['#default_value'] = 0;
+    $form['draft_settings']['draft_container']['draft_auto_save']['#disabled'] = TRUE;
+    $form['draft_settings']['draft_container']['draft_multiple']['#weight'] = -1;
+    $form['draft_settings']['draft_container']['draft_auto_save_message'] = [
+      '#type' => 'webform_message',
+      '#message_message' => t('The automatic saving of drafts is not supported by cards. Please try using the <a href=":href">Webform autosave module</a>.', [':href' => 'https://www.drupal.org/project/webformautosave']),
+      '#message_type' => 'info',
+      '#message_close' => TRUE,
+      '#message_storage' => WebformMessage::STORAGE_SESSION,
+      '#message_id' => 'webform_card_draft_auto_save',
+      '#weight' => 0,
+    ];
+  }
+}
+
 /**
  * Alter webform wizard configuration and settings form elements.
  *
diff --git a/web/modules/webform/modules/webform_clientside_validation/js/webform_clientside_validation.ife.js b/web/modules/webform/modules/webform_clientside_validation/js/webform_clientside_validation.ife.js
index 897668ccdbf64564f53853cc6ffe3c28421e091d..f0f8a07b16ba4752818e46b44d9dd2031d1c81ca 100644
--- a/web/modules/webform/modules/webform_clientside_validation/js/webform_clientside_validation.ife.js
+++ b/web/modules/webform/modules/webform_clientside_validation/js/webform_clientside_validation.ife.js
@@ -50,19 +50,51 @@
       // Add '.form-item--error-message' class to all errors.
       $(this.currentForm).find('strong.error').addClass('form-item--error-message');
 
-      // Move all radios, checkbox, and datelist errors to parent container.
-      $(this.currentForm).find('.form-checkboxes, .form-radios, .form-type-datelist .container-inline, .form-type-tel, .webform-type-webform-height .form--inline').each(function () {
+      // Move all radios, checkboxes, and datelist errors to appear after
+      // the parent container.
+      $(this.currentForm).find('.form-checkboxes, .form-radios, .form-type-datelist .container-inline, .form-type-tel, .webform-type-webform-height .form--inline, .js-webform-tableselect').each(function () {
         var $container = $(this);
         var $errorMessages = $container.find('strong.error.form-item--error-message');
         $errorMessages.insertAfter($container);
       });
 
+      // Move checkbox errors to appear as the last item in the
+      // parent container.
+      $(this.currentForm).find('.form-type-checkbox').each(function () {
+        var $container = $(this);
+        var $errorMessages = $container.find('strong.error.form-item--error-message');
+        $container.append($errorMessages);
+      });
+      
+      // Move all likert errors to question <label>.
+      $(this.currentForm).find('.webform-likert-table tbody tr').each(function () {
+        var $row = $(this);
+        var $errorMessages = $row.find('strong.error.form-item--error-message');
+        $errorMessages.appendTo($row.find('td:first-child'));
+      });
+
       // Move error after field suffix.
       $(this.currentForm).find('strong.error.form-item--error-message ~ .field-suffix').each(function () {
         var $fieldSuffix = $(this);
         var $errorMessages = $fieldSuffix.prev('strong.error.form-item--error-message');
         $errorMessages.insertAfter($fieldSuffix);
       });
+
+      // Add custom clear error handling to checkboxes to remove the
+      // error message, when any checkbox is checked.
+      $(this.currentForm).find('.form-checkboxes').once('webform-clientside-validation-form-checkboxes').each(function () {
+        var $container = $(this);
+        $container.find('input:checkbox').click( function () {
+          var state = $container.find('input:checkbox:checked').length ? 'hide' : 'show';
+          var $message = $container.next('strong.error.form-item--error-message');
+          $message[state]();
+
+          // Ensure the message is set. This code addresses an expected bug
+          // where the error message is emptied when it is toggled.
+          var message = $container.find('[data-msg-required]').data('msg-required');
+          $message.html(message);
+        });
+      });
     };
   });
 
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
index 7fef9e3ad23e76a58a27c8ae32812ff96301fb90..cfa4ca3eaadeb4a60d10d1901d7500796b77ac9b 100644
--- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation.yml
@@ -50,6 +50,18 @@ elements: |
         two: Two
         three: Three
       '#required': true
+    select_other:
+      '#type': webform_select_other
+      '#title': select_other
+      '#options':
+        1: first_option
+        2: second_option
+      '#other__required_error': 'Custom select_other required message.'
+      '#required': true
+    checkbox:
+      '#type': checkbox
+      '#title': checkbox
+      '#required': true
     checkboxes:
       '#type': checkboxes
       '#title': checkboxes
@@ -66,6 +78,14 @@ elements: |
         two: Two
         three: Three
       '#required': true
+    radios_other:
+      '#type': webform_radios_other
+      '#title': radios_other
+      '#options':
+        1: first_option
+        2: second_option
+      '#other__required_error': 'Custom radios_other required message.'
+      '#required': true
     checkboxes_two_columns:
       '#type': checkboxes
       '#title': checkboxes_two_columns
@@ -76,6 +96,14 @@ elements: |
         three: Three
         four: Four
       '#required': true
+    checkboxes_other:
+      '#type': webform_checkboxes_other
+      '#title': checkboxes_other
+      '#options':
+        1: option_1
+        2: option_2
+      '#other__required_error': 'Custom checkboxes_other required message.'
+      '#required': true
   date_elements:
     '#type': details
     '#title': 'Date elements'
@@ -92,6 +120,31 @@ elements: |
       '#type': webform_time
       '#title': time
       '#required': true
+  tableselect_elements:
+    '#type': details
+    '#title': 'Table select elements'
+    '#open': true
+    tableselect_checkboxes:
+      '#type': tableselect
+      '#title': tableselect_checkboxes
+      '#required': true
+      '#options':
+        one: One
+        two: Two
+        three: Three
+        four: Four
+        five: Five
+    tableselect_radios:
+      '#type': tableselect
+      '#title': tableselect_radios
+      '#multiple': false
+      '#required': true
+      '#options':
+        one: One
+        two: Two
+        three: Three
+        four: Four
+        five: Five
   advanced_elements:
     '#type': details
     '#title': 'Advanced elements'
@@ -182,7 +235,7 @@ elements: |
       '#type': webform_signature
       '#title': signature
       '#required': true
-  
+
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation_state.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation_state.yml
new file mode 100644
index 0000000000000000000000000000000000000000..53f20cea373eefc5620d17c6bc36b05788b3f211
--- /dev/null
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/config/install/webform.webform.test_clientside_validation_state.yml
@@ -0,0 +1,401 @@
+uuid: null
+langcode: en
+status: open
+dependencies:
+  enforced:
+    module:
+      - webform_clientside_validation_test
+open: null
+close: null
+weight: 0
+uid: null
+template: false
+archive: false
+id: test_clientside_validation_state
+
+title: 'Test: Clientside Validation #states'
+description: 'Test webform clientside validation with conditional logic (#states).'
+category: 'Test: Clientside Validation'
+elements: |
+  trigger:
+    '#type': checkbox
+    '#title': trigger
+  container:
+    '#type': container
+    '#title': container
+    '#states':
+      visible:
+        ':input[name="trigger"]':
+          checked: true
+    basic_elements:
+      '#type': details
+      '#title': 'Basic elements'
+      '#open': true
+      textfield:
+        '#type': textfield
+        '#title': textfield
+        '#required': true
+      textfield_prefix_suffix:
+        '#type': textfield
+        '#title': textfield_prefix_suffix
+        '#field_prefix': '{field_prefix}'
+        '#field_suffix': '{field_suffix}'
+        '#required': true
+      pattern:
+        '#type': textfield
+        '#title': 'pattern (^[a-z]+$)'
+        '#pattern': '^[a-z]+$'
+      input_mask:
+        '#type': textfield
+        '#title': 'input_mask - (999) 999-9999'
+        '#input_mask': '(999) 999-9999'
+      textarea:
+        '#type': textarea
+        '#title': textarea
+        '#required': true
+      select:
+        '#type': select
+        '#title': select
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#required': true
+      checkboxes:
+        '#type': checkboxes
+        '#title': checkboxes
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#required': true
+      radios:
+        '#type': radios
+        '#title': radios
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#required': true
+      checkboxes_two_columns:
+        '#type': checkboxes
+        '#title': checkboxes_two_columns
+        '#options_display': two_columns
+        '#options':
+          one: One
+          two: Two
+          three: Three
+          four: Four
+        '#required': true
+    date_elements:
+      '#type': details
+      '#title': 'Date elements'
+      '#open': true
+      date:
+        '#type': date
+        '#title': date
+        '#required': true
+      datelist:
+        '#type': datelist
+        '#title': datelist
+        '#required': true
+      time:
+        '#type': webform_time
+        '#title': time
+        '#required': true
+    tableselect_elements:
+      '#type': details
+      '#title': 'Table select elements'
+      '#open': true
+      tableselect_checkboxes:
+        '#type': tableselect
+        '#title': tableselect_checkboxes
+        '#required': true
+        '#options':
+          one: One
+          two: Two
+          three: Three
+          four: Four
+          five: Five
+      tableselect_radios:
+        '#type': tableselect
+        '#title': tableselect_radios
+        '#multiple': false
+        '#required': true
+        '#options':
+          one: One
+          two: Two
+          three: Three
+          four: Four
+          five: Five
+    advanced_elements:
+      '#type': details
+      '#title': 'Advanced elements'
+      '#open': true
+      email:
+        '#type': email
+        '#title': email
+        '#required': true
+      email_multiple:
+        '#type': webform_email_multiple
+        '#title': email_multiple
+        '#required': true
+      email_confirm:
+        '#type': webform_email_confirm
+        '#title': email_confirm
+        '#required': true
+      tel:
+        '#type': tel
+        '#title': Telephone
+        '#required': true
+      tel_international:
+        '#type': tel
+        '#title': tel_international
+        '#international': true
+        '#telephone_validation_format': '0'
+        '#required': true
+      url:
+        '#type': url
+        '#title': url
+        '#required': true
+      number:
+        '#type': number
+        '#title': number
+        '#min': 0
+        '#max': 10
+        '#step': 1
+        '#required': true
+      range:
+        '#type': range
+        '#title': range
+        '#min': 0
+        '#max': 100
+        '#step': 1
+        '#output': right
+        '#output__field_prefix': $
+        '#output__field_suffix': '.00'
+        '#required': true
+      color:
+        '#type': color
+        '#title': color
+        '#required': true
+    custom_elements:
+      '#type': details
+      '#title': 'Custom elements'
+      '#open': true
+      autocomplete:
+        '#type': webform_autocomplete
+        '#title': autocomplete
+        '#autocomplete_items': country_names
+      image_select:
+        '#type': webform_image_select
+        '#title': image_select
+        '#show_label': true
+        '#images':
+          kitten_1:
+            text: 'Cute Kitten 1'
+            src: 'http://placekitten.com/220/200'
+          kitten_2:
+            text: 'Cute Kitten 2'
+            src: 'http://placekitten.com/180/200'
+          kitten_3:
+            text: 'Cute Kitten 3'
+            src: 'http://placekitten.com/130/200'
+        '#required': true
+      rating:
+        '#type': webform_rating
+        '#title': rating
+        '#required': true
+      scale:
+        '#type': webform_scale
+        '#title': scale
+        '#min': 1
+        '#max': 10
+        '#min_text': '1 = disagree'
+        '#max_text': '10 = agree'
+        '#required': true
+      signature:
+        '#type': webform_signature
+        '#title': signature
+        '#required': true
+
+css: ''
+javascript: ''
+settings:
+  ajax: false
+  ajax_scroll_top: form
+  ajax_progress_type: ''
+  ajax_effect: ''
+  ajax_speed: null
+  page: true
+  page_submit_path: ''
+  page_confirm_path: ''
+  page_theme_name: ''
+  form_title: both
+  form_submit_once: false
+  form_exception_message: ''
+  form_open_message: ''
+  form_close_message: ''
+  form_previous_submissions: true
+  form_confidential: false
+  form_confidential_message: ''
+  form_disable_remote_addr: false
+  form_convert_anonymous: false
+  form_prepopulate: false
+  form_prepopulate_source_entity: false
+  form_prepopulate_source_entity_required: false
+  form_prepopulate_source_entity_type: ''
+  form_reset: false
+  form_disable_autocomplete: false
+  form_novalidate: false
+  form_disable_inline_errors: false
+  form_required: false
+  form_unsaved: false
+  form_disable_back: false
+  form_submit_back: false
+  form_autofocus: false
+  form_details_toggle: false
+  form_access_denied: default
+  form_access_denied_title: ''
+  form_access_denied_message: ''
+  form_access_denied_attributes: {  }
+  form_file_limit: ''
+  share: false
+  share_node: false
+  share_theme_name: ''
+  share_title: true
+  share_page_body_attributes: {  }
+  submission_label: ''
+  submission_log: false
+  submission_views: {  }
+  submission_views_replace: {  }
+  submission_user_columns: {  }
+  submission_user_duplicate: false
+  submission_access_denied: default
+  submission_access_denied_title: ''
+  submission_access_denied_message: ''
+  submission_access_denied_attributes: {  }
+  submission_exception_message: ''
+  submission_locked_message: ''
+  submission_excluded_elements: {  }
+  submission_exclude_empty: false
+  submission_exclude_empty_checkbox: false
+  previous_submission_message: ''
+  previous_submissions_message: ''
+  autofill: false
+  autofill_message: ''
+  autofill_excluded_elements: {  }
+  wizard_progress_bar: true
+  wizard_progress_pages: false
+  wizard_progress_percentage: false
+  wizard_progress_link: false
+  wizard_progress_states: false
+  wizard_auto_forward: true
+  wizard_auto_forward_hide_next_button: false
+  wizard_keyboard: true
+  wizard_start_label: ''
+  wizard_preview_link: false
+  wizard_confirmation: true
+  wizard_confirmation_label: ''
+  wizard_track: ''
+  wizard_prev_button_label: ''
+  wizard_next_button_label: ''
+  wizard_toggle: false
+  wizard_toggle_show_label: ''
+  wizard_toggle_hide_label: ''
+  preview: 0
+  preview_label: ''
+  preview_title: ''
+  preview_message: ''
+  preview_attributes: {  }
+  preview_excluded_elements: {  }
+  preview_exclude_empty: true
+  preview_exclude_empty_checkbox: false
+  draft: none
+  draft_multiple: false
+  draft_auto_save: false
+  draft_saved_message: ''
+  draft_loaded_message: ''
+  draft_pending_single_message: ''
+  draft_pending_multiple_message: ''
+  confirmation_type: page
+  confirmation_title: ''
+  confirmation_message: ''
+  confirmation_url: ''
+  confirmation_attributes: {  }
+  confirmation_back: true
+  confirmation_back_label: ''
+  confirmation_back_attributes: {  }
+  confirmation_exclude_query: false
+  confirmation_exclude_token: false
+  confirmation_update: false
+  limit_total: null
+  limit_total_interval: null
+  limit_total_message: ''
+  limit_total_unique: false
+  limit_user: null
+  limit_user_interval: null
+  limit_user_message: ''
+  limit_user_unique: false
+  entity_limit_total: null
+  entity_limit_total_interval: null
+  entity_limit_user: null
+  entity_limit_user_interval: null
+  purge: none
+  purge_days: null
+  results_disabled: false
+  results_disabled_ignore: false
+  results_customize: false
+  token_view: false
+  token_update: false
+  token_delete: false
+  serial_disabled: false
+access:
+  create:
+    roles:
+      - anonymous
+      - authenticated
+    users: {  }
+    permissions: {  }
+  view_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  purge_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  view_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  administer:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  test:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  configuration:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+handlers: {  }
+variants: {  }
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
index 59f0b8e48acf6d0a37d3a4281506d9ddb3b66a41..3e4f36d4de0b5593596e2fc86944c9597d925d5b 100644
--- a/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/modules/webform_clientside_validation_test/webform_clientside_validation_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_clientside_validation'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_clientside_validation/tests/src/FunctionalJavascript/Validation/WebformClientSideValidationJavaScriptTest.php b/web/modules/webform/modules/webform_clientside_validation/tests/src/FunctionalJavascript/Validation/WebformClientSideValidationJavaScriptTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8109f750860078ccfc6adc0102e29c7cc8ffb72
--- /dev/null
+++ b/web/modules/webform/modules/webform_clientside_validation/tests/src/FunctionalJavascript/Validation/WebformClientSideValidationJavaScriptTest.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace Drupal\Tests\webform_clientside_validation\FunctionalJavascript\Validation;
+
+use Drupal\Tests\webform\FunctionalJavascript\WebformWebDriverTestBase;
+
+/**
+ * Tests for webform submission with client side validation.
+ *
+ * @group webform_javascript
+ */
+class WebformClientSideValidationJavaScriptTest extends WebformWebDriverTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['webform', 'file', 'webform_clientside_validation_test', 'webform_clientside_validation'];
+
+  /**
+   * Webforms to load.
+   *
+   * @var array
+   */
+  protected static $testWebforms = [
+    'test_clientside_validation',
+    'test_clientside_validation_state',
+  ];
+
+  /**
+   * Tests custom states.
+   */
+  public function testClientSideValidation() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    /**************************************************************************/
+    // Table select.
+    /**************************************************************************/
+
+    // Check that all radios and checkbox tables triggers client side validation.
+    $this->drupalGet('/webform/test_clientside_validation');
+    $this->assertCssSelect('#edit-tableselect-checkboxes.required');
+    $this->assertCssSelect('#edit-tableselect-checkboxes-one[required]');
+    $this->assertCssSelect('#edit-tableselect-radios.required');
+    $this->assertCssSelect('#edit-tableselect-radios-one[required]');
+    $this->submitForm([], 'Submit');
+    $this->assertRaw('This field is required.');
+    $assert_session->waitForText('tableselect_radios field is required.');
+
+    // Check that all radios and checkbox tables triggers client side validation
+    // with conditional logic.
+    $this->drupalGet('/webform/test_clientside_validation_state');
+    $this->assertNoCssSelect('#edit-tableselect-checkboxes.required');
+    $this->assertNoCssSelect('#edit-tableselect-checkboxes-one[required]');
+    $this->assertNoCssSelect('#edit-tableselect-radios.required');
+    $this->assertNoCssSelect('#edit-tableselect-radios-one[required]');
+
+    $this->click('#edit-trigger');
+    $this->assertCssSelect('#edit-tableselect-checkboxes.required');
+    $this->assertCssSelect('#edit-tableselect-checkboxes-one[required]');
+    $this->assertCssSelect('#edit-tableselect-radios.required');
+    $this->assertCssSelect('#edit-tableselect-radios-one[required]');
+
+    /**************************************************************************/
+    // Other elements.
+    /**************************************************************************/
+
+    // Check that custom 'other' error messages work.
+    $this->drupalGet('/webform/test_clientside_validation');
+    $page->findById('edit-select-other-select')->selectOption('_other_');
+    $page->findById('edit-radios-other-radios-other-')->selectOption('_other_');
+    $page->findById('edit-checkboxes-other-checkboxes-other-')->check();
+    $this->submitForm([], 'Submit');
+    $custom_errors = [
+      'select-other' => 'Custom select_other required message.',
+      'checkboxes-other' => 'Custom checkboxes_other required message.',
+      'radios-other' => 'Custom radios_other required message.',
+    ];
+    foreach ($custom_errors as $element_type => $expected_error) {
+      $element = $page->find('css', "#edit-$element_type-other-error.error");
+      static::assertNotNull($element);
+      static::assertEquals($expected_error, $element->getText());
+    }
+
+  }
+
+}
diff --git a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
index b96e449a2bd3201c59ac64dc1deb6dece6e257d8..be8e8ee3eb1facce9b351ad720f83bdb3500b0e5 100644
--- a/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
+++ b/web/modules/webform/modules/webform_clientside_validation/webform_clientside_validation.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'clientside_validation:clientside_validation'
   - 'clientside_validation:clientside_validation_jquery'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
index 339ddc3a57a8315f683b14c35c41f747600bbab2..88f25e2cdb38dcf37b8bbc16b2039a75381d8273 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
index f08579ef620a216f1e2bd2d4b0bc0916d5fa81cc..109a4f1977c3eb2e0718066486a5a7abcef9b732 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.info.yml
@@ -13,7 +13,7 @@ dependencies:
   - 'webform:webform_scheduled_email'
   - 'webform:webform_share'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
index fb62cd9f2fb150b2fb8ef5f3081beded34dd41c6..797079016753d74a8ac0cd3f7bd61eebb0f77cf0 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_group/webform_demo_group.info.yml
@@ -11,7 +11,7 @@ dependencies:
   - 'webform:webform_node'
   - 'webform:webform_group'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
index 463d7701fdc190c63b58ea021a9c9f7603e4c6a4..9e90b64e32aecc869d8148b415c5fb863bea19b4 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'webform:webform_node'
   - 'webform:webform_access'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_devel/webform_devel.drush.inc b/web/modules/webform/modules/webform_devel/webform_devel.drush.inc
index dbfb74a3e69931bde60c27de64d8b4249d725e4f..093b3fd140bb119c8163ae410479355d53b6a328 100644
--- a/web/modules/webform/modules/webform_devel/webform_devel.drush.inc
+++ b/web/modules/webform/modules/webform_devel/webform_devel.drush.inc
@@ -5,6 +5,8 @@
  * Webform module drush commands.
  */
 
+use Drush\Drush;
+
 /**
  * Implements hook_drush_command().
  */
@@ -54,9 +56,9 @@ function drush_webform_devel_reset() {
     return drush_user_abort();
   }
 
-  drush_print(dt('Resetting message closed via State API…'));
+  Drush::output()->writeln(dt('Resetting message closed via State API…'));
   \Drupal::state()->delete('webform.element.message');
 
-  drush_print(dt('Resetting message closed via User Data…'));
+  Drush::output()->writeln(dt('Resetting message closed via User Data…'));
   \Drupal::service('user.data')->delete('webform', NULL, 'webform.element.message');
 }
diff --git a/web/modules/webform/modules/webform_devel/webform_devel.info.yml b/web/modules/webform/modules/webform_devel/webform_devel.info.yml
index f55da4776cdbdd2c03295089d5056a516cacae34..c4a21fdbd995205574cf530bb1e16ada300f65ee 100644
--- a/web/modules/webform/modules/webform_devel/webform_devel.info.yml
+++ b/web/modules/webform/modules/webform_devel/webform_devel.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'devel:devel'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
index ddb1786181ed6179d68e6fba57ba9cd909aafeb9..239ac9cb036052c2839c2a11f7e651cec63fe7ac 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/webform_entity_print_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_entity_print'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
index 727aaec12f7f39ef922d43bf0e48364a24d30827..07aff781ba7f296ed84156db66f88f2df8733b52 100644
--- a/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
+++ b/web/modules/webform/modules/webform_entity_print/webform_entity_print.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'entity_print:entity_print'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
index 93abb292871a4f641c7f3e1ccad291e6c6e95185..df904f475b7b2365b037c7403e9ca904d07b3a20 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/webform_entity_print_attachment_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_entity_print_attachment'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
index 735bcd0731ddcf18297ce339061e1c00c74ab464..7e1cfb17ffd21041f1d76e6533d2f8ec3864679c 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/webform_entity_print_attachment.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_attachment'
   - 'webform:webform_entity_print'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
index 10977c27c9e75d41ce87ff8d6088a3b8313f2790..ef04dd023e5c768fb1ea677b4800b628ee2473d4 100644
--- a/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
+++ b/web/modules/webform/modules/webform_example_composite/webform_example_composite.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
index 479a18f70fd8daf13e5188464bb88d894b781520..b1da53e01d4836332a1230a838f34572a2c1a85a 100644
--- a/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
+++ b/web/modules/webform/modules/webform_example_custom_form/webform_example_custom_form.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_devel'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
index 423a44509fd53682f889afe2da81dc72390310f8..ead20fcba80e694628697582010ca92c722b12b3 100644
--- a/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
+++ b/web/modules/webform/modules/webform_example_element/webform_example_element.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
index 76d53d3de4a743df662f1440cb158b9012c1effe..7f10ac9e8101dd7f5842d12080648564244b4815 100644
--- a/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
+++ b/web/modules/webform/modules/webform_example_element_properties/webform_example_element_properties.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_ui'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
index 43a8f8a2c68b7bff415d5adc44d8a86a04e59ada..ef40fd33fada513a794cc4ad61e340189b18eae3 100644
--- a/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
+++ b/web/modules/webform/modules/webform_example_handler/webform_example_handler.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
index 5c29b95591115fba8ece8ac9784d790125343379..af336869c15cbdf2365eaa674ef495225a8d41dd 100644
--- a/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
+++ b/web/modules/webform/modules/webform_example_remote_post/webform_example_remote_post.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'token:token'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
index 15fc6fae38b8eb4114dd71fe70862148a16a0a2c..4a3c3c69b1b060a806901bb13485da2e2c43cbb1 100644
--- a/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
+++ b/web/modules/webform/modules/webform_example_variant/webform_example_variant.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_examples/webform_examples.info.yml b/web/modules/webform/modules/webform_examples/webform_examples.info.yml
index 145a7b84219c4a8c6cf92bb31cfac0c5021fc3a3..4283f43d66a959ff1aafb2086a85bbf096814a3c 100644
--- a/web/modules/webform/modules/webform_examples/webform_examples.info.yml
+++ b/web/modules/webform/modules/webform_examples/webform_examples.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
index db1bc9e1d37a160e62d34be3873badcb1dabecad..d715482fc703b51aa13e793536fae9a05b1fcc07 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/webform_examples_accessibility.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'drupal:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
index 980194a1f42751b1087e51e6900c9afdd701c864..dbad33b3245d6b44b9efebc1a4ff59e06c215f97 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/webform_group_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_group'
   - 'group:group_test_config'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_group/webform_group.info.yml b/web/modules/webform/modules/webform_group/webform_group.info.yml
index aaf8787f2a26a1df912ed1f886f38a0f561a66b7..021fb28ba52bf7c16db1eb620b4d9d277bb15b1e 100644
--- a/web/modules/webform/modules/webform_group/webform_group.info.yml
+++ b/web/modules/webform/modules/webform_group/webform_group.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'group:group'
   - 'group:gnode'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
index c97d65ddba3bb26b1c7692517bc5d421a3f0a171..0a77fccafe6944c8dfb7dc199086e55a9ace430f 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/webform_icheck_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_icheck'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
index 6096986e6c87b94ae9386afa618dcf77a81aea69..6363663a30106b6589efd9d352bce47ce9bf7c3f 100644
--- a/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
+++ b/web/modules/webform/modules/webform_icheck/webform_icheck.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
index 1cdd9dbeb281c9c26dd9640dd46c67ffdc3369a7..f7f9e899f796cc5e41fb5adf4802c2131dda464d 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/webform_image_select_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_image_select'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
index 08c03de8d6f0584ab04e5d6c749ef772b1d2606d..ebaae2d4f05ea8d842680c5377ac38bcf87433ff 100644
--- a/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
+++ b/web/modules/webform/modules/webform_image_select/webform_image_select.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
index 9e3bb7605a1ee0a0a183b91d2e6074f70d8c941f..700da050445d56746573f7cebde870c6954d2aed 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/webform_jqueryui_buttons_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_jqueryui_buttons'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
index e2c1198faa98fd6dca7672cf5486375464cdd243..27a6f9b7d481b340846d00f1fe49450758b270b6 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/webform_jqueryui_buttons.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'jquery_ui_checkboxradio:jquery_ui_checkboxradio'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
index e682e8480a32089ba478d0198358cbd40c4721a7..d0cf3888435889994ecd992b3e6fb33d67a0d0fc 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/webform_location_geocomplete_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_location_geocomplete'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
index b7296aced9037a9392107c82b1aaa06349fa3911..7208ef95f8a1bf6e5e88ed316091bbb3fbfba069 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/webform_location_geocomplete.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
index f181ab3ebcd8bb1af4a7c0c594c453f86c142a2a..01250577e2380965d9724de4cae0daf527b7f4dd 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.info.yml
@@ -13,7 +13,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_node'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
index 9f34b2afb230822d4f3674243871fff0f3e2c59a..9927f1668e949774b2a1d6c7670d587821f526bc 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/webform_node_test_translation.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'webform:webform_test_translation'
   - 'drupal:content_translation'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_node/tests/src/Unit/WebformNodeUninstallValidatorTest.php b/web/modules/webform/modules/webform_node/tests/src/Unit/WebformNodeUninstallValidatorTest.php
index 0483361db4899e5cccd7902464aed95714e14be1..4a32b436c8a8e9402bd2ebe7a504d416c15e4f49 100644
--- a/web/modules/webform/modules/webform_node/tests/src/Unit/WebformNodeUninstallValidatorTest.php
+++ b/web/modules/webform/modules/webform_node/tests/src/Unit/WebformNodeUninstallValidatorTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\webform_node\Unit;
 
-use Drupal\Tests\AssertHelperTrait;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -11,8 +10,6 @@
  */
 class WebformNodeUninstallValidatorTest extends UnitTestCase {
 
-  use AssertHelperTrait;
-
   /**
    * A mock webform node uninstall validator.
    *
@@ -42,7 +39,7 @@ public function testValidateNotWebformNode() {
     $module = 'not_webform_node';
     $expected = [];
     $reasons = $this->webformNodeUninstallValidator->validate($module);
-    $this->assertSame($expected, $this->castSafeStrings($reasons));
+    $this->assertEquals($expected, $reasons);
   }
 
   /**
@@ -56,7 +53,7 @@ public function testValidateEntityQueryWithoutResults() {
     $module = 'webform_node';
     $expected = [];
     $reasons = $this->webformNodeUninstallValidator->validate($module);
-    $this->assertSame($expected, $this->castSafeStrings($reasons));
+    $this->assertEquals($expected, $reasons);
   }
 
   /**
@@ -70,7 +67,7 @@ public function testValidateEntityQueryWithResults() {
     $module = 'webform_node';
     $expected = ['To uninstall Webform node, delete all content that has the Webform content type.'];
     $reasons = $this->webformNodeUninstallValidator->validate($module);
-    $this->assertSame($expected, $this->castSafeStrings($reasons));
+    $this->assertEquals($expected, $reasons);
   }
 
 }
diff --git a/web/modules/webform/modules/webform_node/webform_node.info.yml b/web/modules/webform/modules/webform_node/webform_node.info.yml
index 7973b72fccc207cca8e5760d2d1d843d82a85923..a979dbd35d2987ad124fd33a2b21973313eb7609 100644
--- a/web/modules/webform/modules/webform_node/webform_node.info.yml
+++ b/web/modules/webform/modules/webform_node/webform_node.info.yml
@@ -11,7 +11,7 @@ dependencies:
   - 'drupal:user'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
index 475f22355d76c29e571ea7f700341b1e848a0fee..feb8d7e6f737a30b74c0288db173191778e80e77 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/webform_options_custom_entity_test.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'webform:webform_options_limit'
   - 'webform:webform_options_custom'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
index e6e56201e05c9eed1dea6a0dfa75daa034f31be8..c94ff1eb4d8b4ac11f346f8b663776b36b4e9e59 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/webform_options_custom_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_options_custom'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
index 054cb982f42ec7d1df866a3c4a61f84dbb0c91e8..b8d230b560741d0cace6cd4ee3d782bfaa17d892 100644
--- a/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
+++ b/web/modules/webform/modules/webform_options_custom/webform_options_custom.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_options_limit/src/Access/WebformOptionsLimitAccess.php b/web/modules/webform/modules/webform_options_limit/src/Access/WebformOptionsLimitAccess.php
index 4d84aeebda4da8c5bef37d7b7a7e8a433edfe32b..8f6547aa7590dc545d261c5f17d74b3d9149835e 100644
--- a/web/modules/webform/modules/webform_options_limit/src/Access/WebformOptionsLimitAccess.php
+++ b/web/modules/webform/modules/webform_options_limit/src/Access/WebformOptionsLimitAccess.php
@@ -77,8 +77,8 @@ protected static function hasOptionsLimit(WebformInterface $webform) {
     $handlers = $webform->getHandlers();
     foreach ($handlers as $handler) {
       if ($handler instanceof WebformOptionsLimitHandlerInterface) {
-        $configuration = $handler->getConfiguration();
-        if (empty($configuration['settings']['limit_user'])) {
+        $limit_user = $handler->getSetting('limit_user');
+        if (empty($limit_user)) {
           return TRUE;
         }
       }
diff --git a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
index feae39a01cb18b8997957d79332e2d9d3bc7cdcc..f67f407a19e8d43a7e17b45406d0161b6cb6726c 100644
--- a/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
+++ b/web/modules/webform/modules/webform_options_limit/src/Plugin/WebformHandler/OptionsLimitWebformHandler.php
@@ -143,8 +143,7 @@ public function defaultConfiguration() {
    * {@inheritdoc}
    */
   public function getSummary() {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
+    $settings = $this->getSettings();
 
     $element = $this->getWebform()->getElement($settings['element_key']);
     if ($element) {
@@ -1104,8 +1103,8 @@ protected function getElements() {
     foreach ($handlers as $handler) {
       if ($handler instanceof WebformOptionsLimitHandlerInterface
         && $handler->getHandlerId() !== $this->getHandlerId()) {
-        $configuration = $handler->getConfiguration();
-        unset($options[$configuration['settings']['element_key']]);
+        $element_key = $handler->getSetting('element_key');
+        unset($options[$element_key]);
       }
     }
 
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
index 1e2822a6a3a6e672c5616dbd33989a50231a0fe3..ee037c7f4bc83c20c740f50d0f3fb7d74c674508 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/webform_options_limit_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_options_limit'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitSourceEntityTest.php b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitSourceEntityTest.php
index 7a02a97f3df386355891dda66964ad712097b522..a604eebe9929c44f5fb2d315a2b93768a6f08c4a 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitSourceEntityTest.php
+++ b/web/modules/webform/modules/webform_options_limit/tests/src/Functional/WebformOptionsLimitSourceEntityTest.php
@@ -26,6 +26,7 @@ class WebformOptionsLimitSourceEntityTest extends WebformNodeBrowserTestBase {
    * Test options limit source entity.
    */
   public function testSourceEnity() {
+    /** @var \Drupal\webform\WebformInterface $webform */
     $webform = Webform::load('test_handler_options_limit');
     $node = $this->createWebformNode('test_handler_options_limit');
 
@@ -60,10 +61,8 @@ public function testSourceEnity() {
     $this->purgeSubmissions();
 
     // Disable source entity support for the handler.
-    $handler = $webform->getHandler('options_limit_default');
-    $configuration = $handler->getConfiguration();
-    $configuration['settings']['limit_source_entity'] = FALSE;
-    $handler->setConfiguration($configuration);
+    $webform->getHandler('options_limit_default')
+      ->setSetting('limit_source_entity', FALSE);
     $webform->save();
 
     // Check that the webform node option A and webform option A are both open.
diff --git a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
index 039b025177671feee41c2ad4de29eb0f7b411d8f..43489d281c96fed67d5d8b75f91f528bf14a5a65 100644
--- a/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
+++ b/web/modules/webform/modules/webform_options_limit/webform_options_limit.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_scheduled_email/drush/webform_scheduled_email.drush.inc b/web/modules/webform/modules/webform_scheduled_email/drush/webform_scheduled_email.drush.inc
index 7c52d7632a883839549ce4b5f87ebfe9b20248b2..bd260b15b782e0c9a0b7663c474a8afd58a9f2f1 100644
--- a/web/modules/webform/modules/webform_scheduled_email/drush/webform_scheduled_email.drush.inc
+++ b/web/modules/webform/modules/webform_scheduled_email/drush/webform_scheduled_email.drush.inc
@@ -7,6 +7,7 @@
 
 use Drupal\webform\Entity\Webform;
 use Drupal\webform_scheduled_email\Plugin\WebformHandler\ScheduleEmailWebformHandler;
+use Drush\Drush;
 
 /**
  * Implements hook_drush_command().
@@ -96,5 +97,5 @@ function webform_scheduled_email_cron_process($webform_id = NULL, $handler_id =
   /** @var \Drupal\webform_scheduled_email\WebformScheduledEmailManagerInterface $webform_scheduled_email_manager */
   $webform_scheduled_email_manager = \Drupal::service('webform_scheduled_email.manager');
   $stats = $webform_scheduled_email_manager->cron($webform, $handler_id, $schedule_limit, $send_limit);
-  drush_print(dt($stats['_message'], $stats['_context']));
+  Drush::output()->writeln(dt($stats['_message'], $stats['_context']));
 }
diff --git a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
index dd4daca40883ad6622afb6c1b979e54197a33515..93a2386517e4907433e382a2b204cfd24f48fc1d 100644
--- a/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
+++ b/web/modules/webform/modules/webform_scheduled_email/src/WebformScheduledEmailManager.php
@@ -165,14 +165,13 @@ public function getSendDate(WebformSubmissionInterface $webform_submission, $han
     /** @var \Drupal\webform_scheduled_email\Plugin\WebformHandler\ScheduleEmailWebformHandler $handler */
     $handler = $webform->getHandler($handler_id);
 
-    $configuration = $handler->getConfiguration();
-    if (empty($configuration['settings']['send'])) {
+    $send = $handler->getSetting('send');
+    if (empty($send)) {
       return FALSE;
     }
 
     // Get send +/- days.
-    $send = $configuration['settings']['send'];
-    $days = (!empty($configuration['settings']['days'])) ? $configuration['settings']['days'] : 0;
+    $days = $handler->getSetting('days') ?: 0;
 
     // ISSUE:
     // [webform_submission:completed:html_date] token is not being replaced
@@ -214,7 +213,7 @@ public function schedule(EntityInterface $entity, $handler_id) {
       $webform = $webform_submission->getWebform();
       /** @var \Drupal\webform_scheduled_email\Plugin\WebformHandler\ScheduleEmailWebformHandler $handler */
       $handler = $webform->getHandler($handler_id);
-      $handler_configuration = $handler->getConfiguration();
+      $handler_settings = $handler->getSettings();
 
       // Check send date and set timestamp.
       $send_iso_date = $this->getSendDate($webform_submission, $handler_id);
@@ -226,13 +225,13 @@ public function schedule(EntityInterface $entity, $handler_id) {
 
       // Check submission state and unschedule.
       $state = $webform_submission->getState();
-      if (!in_array($state, $handler_configuration['settings']['states']) && $handler_configuration['settings']['unschedule']) {
+      if (!in_array($state, $handler_settings['states']) && $handler_settings['unschedule']) {
         $this->unschedule($webform_submission, $handler_id);
         return WebformScheduledEmailManagerInterface::EMAIL_UNSCHEDULED;
       }
 
       // Check if action should be triggered in the past.
-      if (!empty($handler_configuration['settings']['ignore_past']) && $send_timestamp < $this->time->getRequestTime()) {
+      if (!empty($handler_settings['ignore_past']) && $send_timestamp < $this->time->getRequestTime()) {
         $this->unschedule($webform_submission, $handler_id);
         return WebformScheduledEmailManagerInterface::EMAIL_IGNORED;
       }
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
index 33b40d23e9d70fd6f5509f2965e006db304d8882..b2e917525b47573bf95f973da9213399a042c4f9 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/webform_scheduled_email_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_scheduled_email'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
index 692e982855db6939ec028eb57dd24d170c2c933b..72b68623c10a53c2ec32b8b45ad6e41936235b25 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/webform_scheduled_email_test_translation.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_scheduled_email'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
index 2ee45b4fa5c7547c3144caead4397884dd11a746..d6e247f3d74bbc5cf9f5e617f0a8a2d1ffba4dd8 100644
--- a/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/webform_scheduled_email.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_share/webform_share.info.yml b/web/modules/webform/modules/webform_share/webform_share.info.yml
index b410557603744adf2b9b950f5f1e36923defa1ce..bbce9eb673d0e4d5cb2471f06bb674f6238d2792 100644
--- a/web/modules/webform/modules/webform_share/webform_share.info.yml
+++ b/web/modules/webform/modules/webform_share/webform_share.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
index 3d6f15f59a16ad7814ef361544b29729bf4f361d..d5fed9955f226d05adf4a316d53dd0695470c769 100644
--- a/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
+++ b/web/modules/webform/modules/webform_shortcuts/webform_shortcuts.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_ui'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_submission_export_import/src/Form/WebformSubmissionExportImportUploadForm.php b/web/modules/webform/modules/webform_submission_export_import/src/Form/WebformSubmissionExportImportUploadForm.php
index 475a596bfccc85fa6a0a319e65bea8c351b36dc1..a3c677d665a2842582bfdf6129352e1ed84a8577 100644
--- a/web/modules/webform/modules/webform_submission_export_import/src/Form/WebformSubmissionExportImportUploadForm.php
+++ b/web/modules/webform/modules/webform_submission_export_import/src/Form/WebformSubmissionExportImportUploadForm.php
@@ -150,7 +150,7 @@ protected function buildUploadForm(array $form, FormStateInterface $form_state)
           $this->t('File uploads must use publicly access URLs which begin with http:// or https://.'),
           $this->t('Entity references can use UUIDs or entity IDs.'),
           $this->t('Composite (single) values are annotated using double underscores. (e.g. ELEMENT_KEY__SUB_ELEMENT_KEY)'),
-          $this->t('Multiple values are comma delimited with any nested commas URI escaped (%2E).'),
+          $this->t('Multiple values are comma delimited with any nested commas URI escaped (%2C).'),
           $this->t('Multiple composite values are formatted using <a href=":href">inline YAML</a>.', [':href' => 'https://en.wikipedia.org/wiki/YAML#Basic_components']),
           $this->t('Import maximum execution time limit is @time.', ['@time' => $this->dateFormatter->formatInterval($temporary_maximum_age)]),
         ],
diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
index ef7060ed7e7a99d9bccb28b25e0c6c079bc09400..69e44d4fbe20de73b6164e87de0f5ea235be3bb3 100644
--- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/webform_submission_export_import_test.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'webform:webform_submission_export_import'
   - 'webform:webform_image_select'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
index 52829a4843d0c45807e057aff8bf0cc61dadeff8..971fe0d7abbcf0d14bdb809710b33f725ef5600d 100644
--- a/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/webform_submission_export_import.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
index c5c159b13314091e26b3f9e17fe89df2dc10fdbc..5a1ac323740d938f7a03e05c93351d24aeae79d6 100644
--- a/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
+++ b/web/modules/webform/modules/webform_submission_log/webform_submission_log.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_templates/webform_templates.info.yml b/web/modules/webform/modules/webform_templates/webform_templates.info.yml
index 0206b881cecd29509806119f4049a8f4cb732bec..671f51461159aeac46c41a701e4fc3f3716e2f31 100644
--- a/web/modules/webform/modules/webform_templates/webform_templates.info.yml
+++ b/web/modules/webform/modules/webform_templates/webform_templates.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
index 6f4d83e925d6a47f851eebee7c74b2835f94184a..90bf2f439513e8bf3fd1c49c2e1df2680ddd5afe 100644
--- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
+++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/webform_toggles_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform_toggles'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
index 2e0f7943f2d262baa2275743704e04672c077df6..29b53cf933da8d4bbe5e5f3da30c777fcc426b62 100644
--- a/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
+++ b/web/modules/webform/modules/webform_toggles/webform_toggles.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/modules/webform_ui/css/webform_ui.module.css b/web/modules/webform/modules/webform_ui/css/webform_ui.module.css
index f1603122b7222051267434e82777cd78b3ce11de..d3e5105e27d6896c4e0fd465791d745c2bfb8aab 100644
--- a/web/modules/webform/modules/webform_ui/css/webform_ui.module.css
+++ b/web/modules/webform/modules/webform_ui/css/webform_ui.module.css
@@ -166,7 +166,7 @@ thead th .dropbutton {
   white-space: nowrap;
 }
 
-.webform-ui-element-type-table tr td:first-child .tippy-tooltip /** Allow tippy tooltip to wrap */ {
+.webform-ui-element-type-table tr td:first-child .tippy-content /** Allow tippy tooltip to wrap */ {
   white-space: normal;
 }
 
diff --git a/web/modules/webform/modules/webform_ui/webform_ui.info.yml b/web/modules/webform/modules/webform_ui/webform_ui.info.yml
index 1db0e81b8ff8421ab548e08311ba8bd2f83a8e3e..c8e2f17f8ace6f19cae26b04e2d02e27e2700bfd 100644
--- a/web/modules/webform/modules/webform_ui/webform_ui.info.yml
+++ b/web/modules/webform/modules/webform_ui/webform_ui.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/src/Cache/WebformBubbleableMetadata.php b/web/modules/webform/src/Cache/WebformBubbleableMetadata.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b4984533256aa8738e2e846b5e2bd829eee2082
--- /dev/null
+++ b/web/modules/webform/src/Cache/WebformBubbleableMetadata.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\webform\Cache;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Render\BubbleableMetadata;
+
+/**
+ * Value object used for bubbleable rendering metadata for webforms.
+ */
+class WebformBubbleableMetadata extends BubbleableMetadata {
+
+  /**
+   * Appends the values of this bubbleable metadata object to a render array.
+   *
+   * We can't use \Drupal\Core\Render\BubbleableMetadata::applyTo because it
+   * replaces all existing cache contexts and tags.
+   *
+   * @param array $build
+   *   A render array
+   *
+   * @see \Drupal\Core\Render\BubbleableMetadata::applyTo
+   * @see \Drupal\webform\WebformSubmissionForm::buildForm
+   * @see \Drupal\webform\Plugin\WebformElementBase::replaceTokens
+   */
+  public function appendTo(array &$build) {
+    $contexts = $this->getCacheContexts();
+    $tags = $this->getCacheTags();
+    $max_age = $this->getCacheMaxAge();
+    $attachments = $this->getAttachments();
+
+    // Make sure cache metadata has been set.
+    if (empty($contexts)
+      && empty($tags)
+      && empty($attachments)
+      && $max_age === Cache::PERMANENT) {
+      return;
+    }
+
+    // The below code is copied from Renderer::mergeBubbleableMetadata.
+    // @see \Drupal\Core\Render\Renderer::mergeBubbleableMetadata
+    $meta_a = BubbleableMetadata::createFromRenderArray($build);
+    $meta_b = BubbleableMetadata::createFromRenderArray([
+      '#cache' => [
+        'contexts' => $contexts,
+        'tags' => $tags,
+        'max-age' => $max_age,
+        'attachments' => $attachments,
+      ],
+    ]);
+    $meta_a->merge($meta_b)->applyTo($build);
+  }
+
+}
diff --git a/web/modules/webform/src/Commands/WebformCliService.php b/web/modules/webform/src/Commands/WebformCliService.php
index 28b3513935d5823a3325e2f6b80efef5cad6a409..842543448ae34ae9551de2126d127e5701432ee8 100644
--- a/web/modules/webform/src/Commands/WebformCliService.php
+++ b/web/modules/webform/src/Commands/WebformCliService.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\File\FileSystemInterface;
 use Drupal\Core\Mail\MailFormatHelper;
+use Drupal\Core\Render\RenderContext;
 use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\Site\Settings;
 use Drupal\webform\Controller\WebformResultsExportController;
@@ -17,6 +18,7 @@
 use Drupal\webform\Utility\WebformYaml;
 use Drupal\webform_submission_export_import\Form\WebformSubmissionExportImportUploadForm;
 use Drush\Commands\DrushCommands;
+use Drush\Drush;
 use Psr\Log\LogLevel;
 
 /**
@@ -198,16 +200,6 @@ public function webform_drush_command() {
       'aliases' => ['wfls'],
     ];
 
-    $items['webform-libraries-make'] = [
-      'description' => 'Generates libraries YAML to be included in a drush.make.yml files.',
-      'core' => ['8+'],
-      'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_ROOT,
-      'examples' => [
-        'webform-libraries-make' => 'Generates libraries YAML to be included in a drush.make.yml file.',
-      ],
-      'aliases' => ['wflm'],
-    ];
-
     $items['webform-libraries-composer'] = [
       'description' => "Generates the Webform module's composer.json with libraries as repositories.",
       'core' => ['8+'],
@@ -691,35 +683,6 @@ public function drush_webform_libraries_status() {
     $this->drush_print($description);
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function drush_webform_libraries_make() {
-    /** @var \Drupal\webform\WebformLibrariesManagerInterface $libraries_manager */
-    $libraries_manager = \Drupal::service('webform.libraries_manager');
-    $libraries = $libraries_manager->getLibraries(TRUE);
-
-    $data = [
-      'core' => '8.x',
-      'api' => 2,
-      'libraries' => [],
-    ];
-    foreach ($libraries as $library_name => $library) {
-      $url = $library['download_url']->toString();
-      $data['libraries'][$library_name] = [
-        'directory_name' => $library_name,
-        'destination' => 'libraries',
-        'download' => [
-          'type' => 'get',
-          'url' => $url,
-        ],
-      ];
-    }
-
-    $data = Yaml::encode($data);
-    $this->drush_print($data);
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -906,19 +869,34 @@ public function drush_webform_repair() {
 
     // Validate all webform elements.
     $this->drush_print($this->dt('Validating webform elements…'));
-    /** @var \Drupal\webform\WebformEntityElementsValidatorInterface $elements_validator */
-    $elements_validator = \Drupal::service('webform.elements_validator');
-
-    /** @var \Drupal\webform\WebformInterface[] $webforms */
-    $webforms = Webform::loadMultiple();
-    foreach ($webforms as $webform) {
-      if ($messages = $elements_validator->validate($webform)) {
-        $this->drush_print('  ' . $this->dt('@title (@id): Found element validation errors.', ['@title' => $webform->label(), '@id' => $webform->id()]));
-        foreach ($messages as $message) {
-          $this->drush_print('  - ' . strip_tags($message));
+
+    \Drupal::moduleHandler()->loadAll();
+
+    /** @var \Drupal\Core\Render\RendererInterface $renderer */
+    $renderer = \Drupal::service('renderer');
+    $render_context = new RenderContext();
+    $renderer->executeInRenderContext($render_context, function () {
+      /** @var \Drupal\webform\WebformEntityElementsValidatorInterface $elements_validator */
+      $elements_validator = \Drupal::service('webform.elements_validator');
+
+      /** @var \Drupal\webform\WebformInterface[] $webforms */
+      $webforms = Webform::loadMultiple();
+      foreach ($webforms as $webform) {
+        // Ignored test files.
+        // @todo Determine why these webforms are throwing error via CLI.
+        if (in_array($webform->id(), ['test_element_managed_file_limit', 'test_composite_custom_file', 'test_element_comp_file_plugin'])) {
+          continue;
+        }
+
+        $messages = $elements_validator->validate($webform);
+        if ($messages) {
+          $this->drush_print('  ' . $this->dt('@title (@id): Found element validation errors.', ['@title' => $webform->label(), '@id' => $webform->id()]));
+          foreach ($messages as $message) {
+            $this->drush_print('  - ' . strip_tags($message));
+          }
         }
       }
-    }
+    });
 
     Cache::invalidateTags(['rendered']);
     // @todo Remove when that is fixed in https://www.drupal.org/node/2773591.
@@ -1103,7 +1081,7 @@ public function drush_webform_composer_update_validate() {
       return $this->drush_user_abort();
     }
 
-    $drupal_root = $this->drush_get_context('DRUSH_DRUPAL_ROOT');
+    $drupal_root = Drush::bootstrapManager()->getRoot();
     if (file_exists($drupal_root . '/composer.json')) {
       $composer_json = $drupal_root . '/composer.json';
       $composer_directory = '';
@@ -1411,7 +1389,7 @@ protected function drush_webform_generate_commands_drush9() {
    * @hook validate $command_name
    */
   public function $validate_method(CommandData \$commandData) {
-    \$arguments = \$commandData->arguments();
+    \$arguments = array_values(\$commandData->arguments());
     array_shift(\$arguments);
     call_user_func_array([\$this->cliService, '$validate_method'], \$arguments);
   }";
diff --git a/web/modules/webform/src/Commands/WebformCliServiceInterface.php b/web/modules/webform/src/Commands/WebformCliServiceInterface.php
index 4275aa01f1dab6a9eeea177b37d76fa5e731ca62..539cf8c89aa1492e23a49a993285e0d3ac0be1e1 100644
--- a/web/modules/webform/src/Commands/WebformCliServiceInterface.php
+++ b/web/modules/webform/src/Commands/WebformCliServiceInterface.php
@@ -67,11 +67,6 @@ function drush_webform_generate($webform_id = NULL, $num = NULL);
    */
   public function drush_webform_libraries_status();
 
-  /**
-   * Implements drush_hook_COMMAND().
-   */
-  public function drush_webform_libraries_make();
-
   /**
    * Implements drush_hook_COMMAND().
    *
diff --git a/web/modules/webform/src/Commands/WebformCommands.php b/web/modules/webform/src/Commands/WebformCommands.php
index 32787d52d910b37f5bfa79474c24d103752c5717..32bbb1d957835af3791bb852d96e1a3d3c5fc901 100644
--- a/web/modules/webform/src/Commands/WebformCommands.php
+++ b/web/modules/webform/src/Commands/WebformCommands.php
@@ -24,7 +24,7 @@ class WebformCommands extends WebformCommandsBase {
    * @hook validate webform:export
    */
   public function drush_webform_export_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_export_validate'], $arguments);
   }
@@ -71,7 +71,7 @@ public function drush_webform_export($webform = NULL, array $options = ['exporte
    * @hook validate webform:import
    */
   public function drush_webform_import_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_import_validate'], $arguments);
   }
@@ -100,7 +100,7 @@ public function drush_webform_import($webform = NULL, $import_uri = NULL, array
    * @hook validate webform:purge
    */
   public function drush_webform_purge_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_purge_validate'], $arguments);
   }
@@ -133,7 +133,7 @@ public function drush_webform_purge($webform_id = NULL, array $options = ['all'
    * @hook validate webform:tidy
    */
   public function drush_webform_tidy_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_tidy_validate'], $arguments);
   }
@@ -169,22 +169,6 @@ public function drush_webform_libraries_status() {
     $this->cliService->drush_webform_libraries_status();
   }
 
-  /****************************************************************************/
-  // drush webform:libraries:make. DO NOT EDIT.
-  /****************************************************************************/
-
-  /**
-   * Generates libraries YAML to be included in a drush.make.yml files.
-   *
-   * @command webform:libraries:make
-   * @usage webform:libraries:make
-   *   Generates libraries YAML to be included in a drush.make.yml file.
-   * @aliases wflm,webform-libraries-make
-   */
-  public function drush_webform_libraries_make() {
-    $this->cliService->drush_webform_libraries_make();
-  }
-
   /****************************************************************************/
   // drush webform:libraries:composer. DO NOT EDIT.
   /****************************************************************************/
@@ -242,7 +226,7 @@ public function drush_webform_libraries_remove() {
    * @hook validate webform:generate
    */
   public function drush_webform_generate_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_generate_validate'], $arguments);
   }
@@ -303,7 +287,7 @@ public function drush_webform_remove_orphans() {
    * @hook validate webform:docs
    */
   public function drush_webform_docs_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_docs_validate'], $arguments);
   }
@@ -328,7 +312,7 @@ public function drush_webform_docs() {
    * @hook validate webform:composer:update
    */
   public function drush_webform_composer_update_validate(CommandData $commandData) {
-    $arguments = $commandData->arguments();
+    $arguments = array_values($commandData->arguments());
     array_shift($arguments);
     call_user_func_array([$this->cliService, 'drush_webform_composer_update_validate'], $arguments);
   }
@@ -362,4 +346,4 @@ public function drush_webform_generate_commands() {
     $this->cliService->drush_webform_generate_commands();
   }
 
-}
+}
\ No newline at end of file
diff --git a/web/modules/webform/src/Commands/WebformCommandsBase.php b/web/modules/webform/src/Commands/WebformCommandsBase.php
index bbbc623eaa1e1fa42caae4fb7502832e52e2f373..20ecb96ee0e9b554ae77d6f9bed76a42c553a1d4 100644
--- a/web/modules/webform/src/Commands/WebformCommandsBase.php
+++ b/web/modules/webform/src/Commands/WebformCommandsBase.php
@@ -5,6 +5,7 @@
 use Drush\Commands\DrushCommands;
 use Drush\Drush;
 use Drush\Exceptions\UserAbortException;
+use Drush\Exec\ExecTrait;
 use Psr\Log\LogLevel;
 use Symfony\Component\Filesystem\Filesystem;
 
@@ -71,16 +72,19 @@ public function drush_download_file($url, $destination) {
     // Copied from: \Drush\Commands\SyncViaHttpCommands::downloadFile
     static $use_wget;
     if ($use_wget === NULL) {
-      $use_wget = drush_shell_exec('which wget');
+      $use_wget = ExecTrait::programExists('wget');
     }
 
     $destination_tmp = drush_tempnam('download_file');
     if ($use_wget) {
-      drush_shell_exec("wget -q --timeout=30 -O %s %s", $destination_tmp, $url);
+      $args = ['wget', '-q', '--timeout=30', '-O', $destination_tmp, $url];
     }
     else {
-      drush_shell_exec("curl -s -L --connect-timeout 30 -o %s %s", $destination_tmp, $url);
+      $args = ['curl', '-s', '-L', '--connect-timeout', '30', '-o', $destination_tmp, $url];
     }
+    $process = Drush::process($args);
+    $process->mustRun();
+
     if (!drush_file_not_empty($destination_tmp) && $file = @file_get_contents($url)) {
       @file_put_contents($destination_tmp, $file);
     }
@@ -110,16 +114,27 @@ public function drush_mkdir($path) {
 
   public function drush_tarball_extract($path, $destination = FALSE) {
     $this->drush_mkdir($destination);
+    $cwd = getcwd();
     if (preg_match('/\.tgz$/', $path)) {
-      $return = drush_shell_cd_and_exec(dirname($path), "tar -xvzf %s -C %s", $path, $destination);
+      drush_op('chdir', dirname($path));
+      $process = Drush::process(['tar', '-xvzf', $path, '-C', $destination]);
+      $process->run();
+      $return = $process->isSuccessful();
+      drush_op('chdir', $cwd);
+
       if (!$return) {
-        throw new \Exception(dt('Unable to extract !filename.' . PHP_EOL . implode(PHP_EOL, drush_shell_exec_output()), ['!filename' => $path]));
+        throw new \Exception(dt('Unable to extract !filename.' . PHP_EOL . implode(PHP_EOL, $process->getOutput()), ['!filename' => $path]));
       }
     }
     else {
-      $return = drush_shell_cd_and_exec(dirname($path), "unzip %s -d %s", $path, $destination);
+      drush_op('chdir', dirname($path));
+      $process = Drush::process(['unzip', $path, '-d', $destination]);
+      $process->run();
+      $return = $process->isSuccessful();
+      drush_op('chdir', $cwd);
+
       if (!$return) {
-        throw new \Exception(dt('Unable to extract !filename.' . PHP_EOL . implode(PHP_EOL, drush_shell_exec_output()), ['!filename' => $path]));
+        throw new \Exception(dt('Unable to extract !filename.' . PHP_EOL . implode(PHP_EOL, $process->getOutput()), ['!filename' => $path]));
       }
     }
     return $return;
diff --git a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
index 5a6792ca3ef91e7942346134ac93b89fb7fcf3cb..385c8430ca6aa3cd037559b7d92b58238de1624e 100644
--- a/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
+++ b/web/modules/webform/src/Commands/WebformSanitizeSubmissionsCommands.php
@@ -71,7 +71,7 @@ public function sanitize($result, CommandData $command_data) {
         $this->database->truncate('webform_submission_log')->execute();
       }
       $this->entityTypeManager->getStorage('webform_submission')->resetCache();
-      $this->logger()->success(dt('Webform submission tables truncated.'));
+      $this->logger()->notice(dt('Webform submission tables truncated.'));
     }
   }
 
diff --git a/web/modules/webform/src/Element/WebformAddress.php b/web/modules/webform/src/Element/WebformAddress.php
index 30d4a2f43f69e5118272e098af4206fbbf4a69d3..5672b9003b03840975c9ec3f8d299b8c7a8988b2 100644
--- a/web/modules/webform/src/Element/WebformAddress.php
+++ b/web/modules/webform/src/Element/WebformAddress.php
@@ -33,7 +33,7 @@ public static function getCompositeElements(array $element) {
       '#type' => 'textfield',
       '#title' => t('City/Town'),
     ];
-    // Any webform options prefixed with 'states_province' will automatically
+    // Any webform options prefixed with 'state_province' will automatically
     // be included within the Composite Element UI.
     // @see \Drupal\webform\Plugin\WebformElement\WebformCompositeBase::getCompositeElementOptions
     $elements['state_province'] = [
diff --git a/web/modules/webform/src/Element/WebformAutocomplete.php b/web/modules/webform/src/Element/WebformAutocomplete.php
index edcd5a8c6a1c6262831f65da706808b4a15ca4d5..1d9971c5a810ebe55c820a73aef4fec3897165a6 100644
--- a/web/modules/webform/src/Element/WebformAutocomplete.php
+++ b/web/modules/webform/src/Element/WebformAutocomplete.php
@@ -38,4 +38,10 @@ public static function preRenderWebformAutocomplete($element) {
     return $element;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineTranslatableProperties() {
+    return array_merge(parent::defineTranslatableProperties(), ['autocomplete_items']);
+  }
 }
diff --git a/web/modules/webform/src/Element/WebformExcludedColumns.php b/web/modules/webform/src/Element/WebformExcludedColumns.php
index e7561fcbea8c342cecdf9c4805ca7e2b6b77dc76..71881d1379a71e947ac7555b327a68495ce92a74 100644
--- a/web/modules/webform/src/Element/WebformExcludedColumns.php
+++ b/web/modules/webform/src/Element/WebformExcludedColumns.php
@@ -29,6 +29,9 @@ public static function getWebformExcludedOptions(array $element) {
     /** @var \Drupal\webform\WebformInterface $webform */
     $webform = WebformEntity::load($element['#webform_id'])
       ?: \Drupal::service('webform.request')->getCurrentWebform();
+    if (!$webform) {
+      return [];
+    }
 
     $options = [];
 
diff --git a/web/modules/webform/src/Element/WebformLikert.php b/web/modules/webform/src/Element/WebformLikert.php
index 07bdb2703b9a206e9820caa2285398c1bac19515..4970c1ad0b0d302e919de8c71f05adf4de67b4b1 100644
--- a/web/modules/webform/src/Element/WebformLikert.php
+++ b/web/modules/webform/src/Element/WebformLikert.php
@@ -152,6 +152,15 @@ public static function processWebformLikert(&$element, FormStateInterface $form_
       }
 
       foreach ($answers as $answer_key => $answer) {
+        $answer_attributes = ['aria-labelledby' => $question_id];
+
+        // Add required attributes to input without setting the <label>
+        // to required.
+        if ($element['#required']) {
+          $answer_attributes['required'] ='required';
+          $answer_attributes['aria-required'] = 'true';
+        }
+
         $row[$answer_key] = [
           '#parents' => [$element['#name'], $question_key],
           '#type' => 'radio',
@@ -162,7 +171,7 @@ public static function processWebformLikert(&$element, FormStateInterface $form_
           // value is NULL.
           // @see \Drupal\Core\Render\Element\Radio::preRenderRadio
           '#value' => ($value === NULL) ? FALSE : (string) $value,
-          '#attributes' => ['aria-labelledby' => $question_id],
+          '#attributes' => $answer_attributes,
         ];
 
         // Wrap title in span.webform-likert-label.visually-hidden
diff --git a/web/modules/webform/src/Element/WebformOtherBase.php b/web/modules/webform/src/Element/WebformOtherBase.php
index bd13214529a3659e3a1a91d3a51dc09c2739508d..95712414ec37526321c94c8fa90c356a9622ddc3 100644
--- a/web/modules/webform/src/Element/WebformOtherBase.php
+++ b/web/modules/webform/src/Element/WebformOtherBase.php
@@ -164,6 +164,14 @@ public static function processWebformOther(&$element, FormStateInterface $form_s
       $element['other']['#parents'] = array_merge($element['#parents'], ['other']);
     }
 
+    // Add custom required error message so that clientside_validation.module
+    // can display it.
+    // @see https://www.drupal.org/project/clientside_validation/issues/3084798
+    if (\Drupal::moduleHandler()->moduleExists('clientside_validation')
+      && isset($element['other']['#required_error'])) {
+      $element['other']['#attributes']['data-msg-required'] = $element['other']['#required_error'];
+    }
+
     // Initialize the type and other elements to allow for webform enhancements.
     /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
     $element_manager = \Drupal::service('plugin.manager.webform.element');
diff --git a/web/modules/webform/src/Element/WebformSection.php b/web/modules/webform/src/Element/WebformSection.php
index 4f3d73b83bd5b4f5d94f978b7b8c8b0c979ed825..ea2007e2de67a324ba515f092f6b28fbe58595d2 100644
--- a/web/modules/webform/src/Element/WebformSection.php
+++ b/web/modules/webform/src/Element/WebformSection.php
@@ -26,6 +26,10 @@ public function getInfo() {
       ],
       '#value' => NULL,
       '#title_tag' => 'h2',
+      // Must set default description display to before to prevent it from being
+      // set to after.
+      // @see \Drupal\Core\Form\FormBuilder::doBuildForm
+      '#description_display' => 'before',
       '#theme_wrappers' => ['webform_section'],
     ];
   }
diff --git a/web/modules/webform/src/Element/WebformTermsOfService.php b/web/modules/webform/src/Element/WebformTermsOfService.php
index 7ca66c34f4571e1069752bd7d7e485a7d3f6142d..26015392529ce1c4be19845adbb92a2d889e9ad1 100644
--- a/web/modules/webform/src/Element/WebformTermsOfService.php
+++ b/web/modules/webform/src/Element/WebformTermsOfService.php
@@ -38,6 +38,25 @@ public function getInfo() {
     ] + parent::getInfo();
   }
 
+  /**
+   * Sets the #checked property of a checkbox element.
+   */
+  public static function processCheckbox(&$element, FormStateInterface $form_state, &$complete_form) {
+    $element = parent::processCheckbox($element, $form_state, $complete_form);
+
+    // Remove curly brackets from the {terms of service} title.
+    if (empty($element['#required_error'])) {
+      $title = (empty($element['#title']))
+        ? (string) t('I agree to the {terms of service}.')
+        : $element['#title'];
+      $title = str_replace('{', '', $title);
+      $title = str_replace('}', '', $title);
+      $element['#required_error'] = t('@name field is required.', ['@name' => $title]);
+    }
+
+    return $element;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Entity/Webform.php b/web/modules/webform/src/Entity/Webform.php
index 923a4082ad939c5fb2db78c4e60865de041e28b2..0197e749e081595a324f6e5771a9ac490c1b0e3f 100644
--- a/web/modules/webform/src/Entity/Webform.php
+++ b/web/modules/webform/src/Entity/Webform.php
@@ -2248,10 +2248,6 @@ public function getCacheTags() {
   public function getCacheContexts() {
     $cache_contexts = parent::getCacheContexts();
 
-    // Add paths to cache contexts since webform can be placed on multiple
-    // pages.
-    $cache_contexts[] = 'url.path';
-
     // Add all prepopulate query string parameters.
     if ($this->getSetting('form_prepopulate')) {
       $cache_contexts[] = 'url.query_args';
@@ -2259,11 +2255,11 @@ public function getCacheContexts() {
     else {
       // Add source entity type and id query string parameters.
       if ($this->getSetting('form_prepopulate_source_entity')) {
-        $cache_contexts[] = 'url.query_args:entity_type';
-        $cache_contexts[] = 'url.query_args:entity_id';
+        $cache_contexts[] = 'url.query_args:source_entity_type';
+        $cache_contexts[] = 'url.query_args:source_entity_id';
       }
       // Add webform (secure) token query string parameter.
-      if ($this->getSetting('token_view') || $this->getSetting('token_update')) {
+      if ($this->getSetting('token_view') || $this->getSetting('token_update') || $this->getSetting('token_delete')) {
         $cache_contexts[] = 'url.query_args:token';
       }
     }
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
index 3feefe1ae4a78fae19b001cc087bb6f2f5b9a7ea..f9691c83494bc71297243ff4d9bc0883453b3af4 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsSubmissionsForm.php
@@ -646,7 +646,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['draft_settings']['draft_container']['draft_multiple'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Allow users to save multiple drafts'),
-      "#description" => $this->t('If checked, users will be able save and resume multiple drafts.'),
+      "#description" => $this->t("If checked, users will be able save and resume multiple drafts. Please note: Authenticated user need to be able 'view own submissions' to access saved drafts."),
       '#return_value' => TRUE,
       '#default_value' => $settings['draft_multiple'],
     ];
diff --git a/web/modules/webform/src/EventSubscriber/WebformDefaultExceptionHtmlSubscriber.php b/web/modules/webform/src/EventSubscriber/WebformDefaultExceptionHtmlSubscriber.php
index 349d631e1fe9795e8ccea33ce73463221f900e6a..019ef2fad95ed8d437a035507c1dd60c0edca5d9 100644
--- a/web/modules/webform/src/EventSubscriber/WebformDefaultExceptionHtmlSubscriber.php
+++ b/web/modules/webform/src/EventSubscriber/WebformDefaultExceptionHtmlSubscriber.php
@@ -263,7 +263,7 @@ protected function getHandledFormats() {
   public function onException(ExceptionEvent $event) {
     // Only handle 403 exception.
     // @see \Drupal\webform\EventSubscriber\WebformExceptionHtmlSubscriber::on403
-    $exception = $event->getException();
+    $exception = $event->getThrowable();
     if ($exception instanceof HttpExceptionInterface && $exception->getStatusCode() === 403) {
       parent::onException($event);
     }
diff --git a/web/modules/webform/src/Form/WebformAjaxFormTrait.php b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
index 410b6c1eb18e1877afa365d1b8121f3e2237747e..422c53c3d2ceee5c80af793c59dd3ab86e7d22ae 100644
--- a/web/modules/webform/src/Form/WebformAjaxFormTrait.php
+++ b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
@@ -161,7 +161,7 @@ protected function buildAjaxForm(array &$form, FormStateInterface $form_state, a
     $wrapper_attributes = new Attribute($wrapper_attributes);
 
     $form['#form_wrapper_id'] = $wrapper_id;
-    $form['#prefix'] = '<a id="' . $wrapper_id . '-content" tabindex="-1" aria-hidden="true"></a>';
+    $form['#prefix'] = '<span id="' . $wrapper_id . '-content"></span>';
     $form['#prefix'] .= '<div' . $wrapper_attributes . '>';
     $form['#suffix'] = '</div>';
 
diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
index e586f9ee592e7b78a9d274e7aa4c2ddb492db49b..03f463f9b9e47df0c3e3fb832ddbc628c06f1c78 100644
--- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
+++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
@@ -237,13 +237,14 @@ protected function generateSubmissions(array $values) {
       $start = $this->time->getRequestTime();
       for ($i = 1; $i <= $values['num']; $i++) {
         $this->generateSubmission($values);
-        if (function_exists('drush_log') && $i % drush_get_option('feedback', 1000) === 0) {
+        $feedback = isset($values['feedback']) && is_int($values['feedback']) ? $values['feedback'] : 1000;
+        if ($i % $feedback === 0) {
           $now = $this->time->getRequestTime();
           $dt_args = [
-            '@feedback' => drush_get_option('feedback', 1000),
-            '@rate' => (drush_get_option('feedback', 1000) * 60) / ($now - $start),
+            '@feedback' => $feedback,
+            '@rate' => ($feedback * 60) / ($now - $start),
           ];
-          drush_log(dt('Completed @feedback submissions (@rate submissions/min)', $dt_args), 'ok');
+          \Drupal::logger('webform')->notice($this->t('Completed @feedback submissions (@rate submissions/min)', $dt_args));
           $start = $now;
         }
       }
@@ -339,26 +340,26 @@ public function _validateDrushParams($args) {
     $values = [
       'webform_ids' => $webform_ids,
       'num' => array_shift($args) ?: 50,
-      'kill' => drush_get_option('kill') ?: FALSE,
+      'kill' => empty($args['kill']) ? FALSE : TRUE,
     ];
 
     if (empty($webform_id)) {
-      return drush_set_error('DEVEL_GENERATE_INVALID_INPUT', dt('Webform id required'));
+      throw new \Exception(dt('Webform ida required'));
     }
 
     if (!$this->getWebformStorage()->load($webform_id)) {
-      return drush_set_error('DEVEL_GENERATE_INVALID_INPUT', dt('Invalid webform name: @name', ['@name' => $webform_id]));
+      throw new \Exception(dt('Invalid webform name: @name', ['@name' => $webform_id]));
     }
 
     if ($this->isNumber($values['num']) === FALSE) {
-      return drush_set_error('DEVEL_GENERATE_INVALID_INPUT', dt('Invalid number of submissions: @num', ['@num' => $values['num']]));
+      throw new \Exception(dt('Invalid number of submissions: @num', ['@num' => $values['num']]));
     }
 
-    $entity_type = drush_get_option('entity-type');
-    $entity_id = drush_get_option('entity-id');
+    $entity_type = $args['entity-type'];
+    $entity_id = $args['entity-id'];
     if ($entity_type || $entity_id) {
       if ($error = $this->validateEntity($webform_ids, $entity_type, $entity_id)) {
-        return drush_set_error('DEVEL_GENERATE_INVALID_INPUT', $error);
+        throw new \Exception($error);
       }
       else {
         $values['entity-type'] = $entity_type;
diff --git a/web/modules/webform/src/Plugin/WebformElement/BooleanBase.php b/web/modules/webform/src/Plugin/WebformElement/BooleanBase.php
index 6e8933be96986d0f2f2ed611b52efd6b9fd326de..9459493bd1b30b643de1ffb30f95f645799f8b6f 100644
--- a/web/modules/webform/src/Plugin/WebformElement/BooleanBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/BooleanBase.php
@@ -47,6 +47,15 @@ protected function formatTextItem(array $element, WebformSubmissionInterface $we
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getItemFormats() {
+    $formats = parent::getItemFormats();
+    $formats['raw'] = $this->t('Raw/return value');
+    return $formats;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformElement/EntityAutocomplete.php b/web/modules/webform/src/Plugin/WebformElement/EntityAutocomplete.php
index 0b20e31e2e55d88f17abc75d0248a46318f7f9eb..19b5a0b679671b60bdd91f1e9228a54b0fe9656c 100644
--- a/web/modules/webform/src/Plugin/WebformElement/EntityAutocomplete.php
+++ b/web/modules/webform/src/Plugin/WebformElement/EntityAutocomplete.php
@@ -172,4 +172,13 @@ protected static function getEntityIdFromItem($item) {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getExportDefaultOptions() {
+    return [
+      'entity_reference_items' => ['id', 'title', 'url'],
+    ];
+  }
+
 }
diff --git a/web/modules/webform/src/Plugin/WebformElement/Table.php b/web/modules/webform/src/Plugin/WebformElement/Table.php
index c22217cb842d89fa3d12b8fab0a9923c4d3a18d6..4c99b793b2d17362cbe26f631936a7fd9e458de7 100644
--- a/web/modules/webform/src/Plugin/WebformElement/Table.php
+++ b/web/modules/webform/src/Plugin/WebformElement/Table.php
@@ -202,6 +202,10 @@ public function form(array $form, FormStateInterface $form_state) {
       '#title' => $this->t('Empty text'),
       '#description' => $this->t('Text to display when no rows are present.'),
     ];
+
+    // Unset textarea rows to prevent any conflicts.
+    unset($form['form']['size_container']['rows']);
+
     return $form;
   }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/TextBase.php b/web/modules/webform/src/Plugin/WebformElement/TextBase.php
index 0a9dec4da79e8da36ad7b0d811e3bc59cebfe395..98d960e2203aa00dae1de6339c408d6972455f45 100644
--- a/web/modules/webform/src/Plugin/WebformElement/TextBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/TextBase.php
@@ -135,6 +135,11 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
         $element['#attributes']['data-webform-pattern-error'] = WebformHtmlHelper::toPlainText($element['#pattern_error']);
       }
     }
+
+    // Minlength attribute.
+    if (isset($element['#minlength'])) {
+      $element['#attributes']['minlength'] = $element['#minlength'];
+    }
   }
 
   /**
@@ -278,6 +283,8 @@ public static function isDefaultInputMask(array $element, $value) {
     $input_mask = $element['#input_mask'];
     $input_masks = [
       "'alias': 'currency'" => '$ 0.00',
+      "'alias': 'currency_negative'" => '-$ 0.00',
+      "'alias': 'currency_positive_negative'" => '$ 0.00',
     ];
     return (isset($input_masks[$input_mask]) && $input_masks[$input_mask] === $value) ? TRUE : FALSE;
   }
@@ -351,10 +358,20 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
   protected function getInputMasks() {
     $input_masks = [
       "'alias': 'currency'" => [
-        'title' => $this->t('Currency'),
+        'title' => $this->t('Currency (+)'),
         'example' => '$ 9.99',
         'pattern' => '^\$ [0-9]{1,3}(,[0-9]{3})*.\d\d$',
       ],
+      "'alias': 'currency_negative'" => [
+        'title' => $this->t('Currency (-)'),
+        'example' => '-$ 9.99',
+        'pattern' => '^(-\$ [0-9]{1,3}(,[0-9]{3})*.\d\d|\$ 0.00)$',
+      ],
+      "'alias': 'currency_positive_negative'" => [
+        'title' => $this->t('Currency (+/-)'),
+        'example' => '$ 9.99',
+        'pattern' => '^[-]?\$ [0-9]{1,3}(,[0-9]{3})*.\d\d$',
+      ],
       "'alias': 'datetime'" => [
         'title' => $this->t('Date'),
         'example' => '2007-06-09\'T\'17:46:21',
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformEntityOptionsTrait.php b/web/modules/webform/src/Plugin/WebformElement/WebformEntityOptionsTrait.php
index f44591766dc9268672b113911ad2792d52275112..b1097ac4b7250086472d39b1bb200fb599e1c085 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformEntityOptionsTrait.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformEntityOptionsTrait.php
@@ -71,4 +71,16 @@ public function getElementSelectorSourceValues(array $element) {
     return parent::getElementSelectorSourceValues($element);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getExportDefaultOptions() {
+    return [
+      'entity_reference_items' => ['id', 'title', 'url'],
+      'options_single_format' => 'compact',
+      'options_multiple_format' => 'compact',
+      'options_item_format' => 'label',
+    ];
+  }
+
 }
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformEntityReferenceTrait.php b/web/modules/webform/src/Plugin/WebformElement/WebformEntityReferenceTrait.php
index e02ee05940de552b7f89afaf8b46a5e0ca017df1..a4160b660134358a72a72440f17ad987c61e4a64 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformEntityReferenceTrait.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformEntityReferenceTrait.php
@@ -239,15 +239,6 @@ public function preview() {
     return $element;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getExportDefaultOptions() {
-    return [
-      'entity_reference_items' => ['id', 'title', 'url'],
-    ];
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformSection.php b/web/modules/webform/src/Plugin/WebformElement/WebformSection.php
index 7f6f110315c17661a6f44c4a95abefc4cb5ab771..91f28caa7e24e54d6065503b51a0f72f60dc1e97 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformSection.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformSection.php
@@ -32,6 +32,7 @@ protected function defineDefaultProperties() {
       'title_tag' => $this->configFactory->get('webform.settings')->get('element.default_section_title_tag'),
       'title_display' => '',
       'title_attributes' => [],
+      'description_display' => '',
       'help_display' => '',
     ] + parent::defineDefaultProperties();
   }
@@ -77,6 +78,9 @@ public function form(array $form, FormStateInterface $form_state) {
       ],
     ];
 
+    // Remove unsupported description display.
+    unset($form['form']['display_container']['description_display']['#options']['tooltip']);
+
     return $form;
   }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
index f307f25e6b40e5d38e743cbcbcb02c0d7cedf684..4e4153e4070d024fc352d02f52e1286c5d45ffab 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableRow.php
@@ -360,6 +360,13 @@ protected function hasIncrementalChildrenElements($key) {
     return TRUE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function preview() {
+    return [];
+  }
+
   /**
    * Get child elements incremented with a new index.
    *
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableTrait.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableTrait.php
index bc97a39e54ac4c6e7ee9a27d15f86cbbf8507ad1..a5b8cf911eb58c579de5319a6fc5d8aacc6c5bec 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTableTrait.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableTrait.php
@@ -140,11 +140,15 @@ public static function processTableSelect(array $element) {
     $element['#attributes']['class'][] = 'webform-tableselect';
     $element['#attributes']['class'][] = 'js-webform-tableselect';
     $element['#attached']['library'][] = 'webform/webform.element.tableselect';
+    if (!empty($element['#required'])) {
+      $element['#attributes']['class'][] = 'required';
+    }
+    $element['#attributes']['multiple'] = !empty($element['#multiple']);
     return $element;
   }
 
   /**
-   * Process table selected options and add #title to the table's options.
+   * Process table selected options.
    *
    * @param array $element
    *   An associative array containing the properties and children of
@@ -157,12 +161,26 @@ public static function processTableSelect(array $element) {
    */
   public static function processTableSelectOptions(array $element) {
     foreach ($element['#options'] as $key => $choice) {
-      if (isset($element[$key]) && empty($element[$key]['#title'])) {
+      if (!isset($element[$key])) {
+        continue;
+      }
+
+      // Add #title to the table's options.
+      if (empty($element[$key]['#title'])) {
         if ($title = static::getTableSelectOptionTitle($choice)) {
           $element[$key]['#title'] = $title;
           $element[$key]['#title_display'] = 'invisible';
         }
       }
+
+      // Suppress inline error messages from appearing below
+      // checkboxes and radios.
+      $element[$key]['#error_no_message'] = TRUE;
+
+      // Add required attribute to table select radios
+      if (!empty($element['#required']) && empty($element['#multiple'])) {
+        $element[$key]['#attributes']['required'] = TRUE;
+      }
     }
     return $element;
   }
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
index fc96553805a152377461f7b18eaed0e5c1eb1b7e..cc681f415fe5e86002fae31d828b2121ba8d3e17 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformVariant.php
@@ -257,6 +257,13 @@ public static function afterBuild(array $form, FormStateInterface $form_state) {
     return $form;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function preview() {
+    return [];
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformElementBase.php b/web/modules/webform/src/Plugin/WebformElementBase.php
index d2cd23eae20dc7a5ae35c1c637dbcdb81a6fdbc5..0f761d87994255a4b28e67ca202957299dc83104 100644
--- a/web/modules/webform/src/Plugin/WebformElementBase.php
+++ b/web/modules/webform/src/Plugin/WebformElementBase.php
@@ -16,6 +16,7 @@
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\Url;
+use Drupal\webform\Cache\WebformBubbleableMetadata;
 use Drupal\webform\Element\WebformCompositeFormElementTrait;
 use Drupal\webform\Element\WebformHtmlEditor;
 use Drupal\webform\Element\WebformMessage;
@@ -955,6 +956,8 @@ protected function checkAccessRule(array $element, $operation, AccountInterface
    * {@inheritdoc}
    */
   public function replaceTokens(array &$element, EntityInterface $entity = NULL) {
+    $bubbleable_metadata = new WebformBubbleableMetadata();
+
     foreach ($element as $key => $value) {
       // Only replace tokens in properties.
       if (Element::child($key)) {
@@ -966,8 +969,11 @@ public function replaceTokens(array &$element, EntityInterface $entity = NULL) {
         continue;
       }
 
-      $element[$key] = $this->tokenManager->replaceNoRenderContext($value, $entity);
+      $element[$key] = $this->tokenManager->replace($value, $entity, [], [], $bubbleable_metadata);
     }
+
+    // Append metadata to the element's #cache property.
+    $bubbleable_metadata->appendTo($element);
   }
 
   /**
diff --git a/web/modules/webform/src/Plugin/WebformHandler/ActionWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/ActionWebformHandler.php
index 8e4bbad1e2021da9a9c706a92b62e586c931125b..1c9fb8bf42a9bee37ddc2a58540438d5b12ce9ce 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/ActionWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/ActionWebformHandler.php
@@ -45,8 +45,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function getSummary() {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
+    $settings = $this->getSettings();
 
     // Get state labels.
     $states = [
diff --git a/web/modules/webform/src/Plugin/WebformHandler/DebugWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/DebugWebformHandler.php
index 18a074a4176b730f7803d3a5cdda7045d799c040..9aa318346caee544f4a34230d917b6c00e67495a 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/DebugWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/DebugWebformHandler.php
@@ -69,8 +69,7 @@ public function defaultConfiguration() {
    * {@inheritdoc}
    */
   public function getSummary() {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
+    $settings = $this->getSettings();
     switch ($settings['format']) {
       case static::FORMAT_JSON:
         $settings['format'] = $this->t('JSON');
@@ -125,8 +124,7 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
+    $settings = $this->getSettings();
 
     $data = ($settings['submission'])
       ? $webform_submission->toArray(TRUE)
diff --git a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
index bf5deda9bbec20384b8b2c7c02eb4220ee3b9ea1..9d4501261af690c92788fd373a19acebcffd13a8 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
@@ -275,9 +275,9 @@ protected function getDefaultConfigurationValue($name) {
    *   along with the default configuration values.
    */
   public function getEmailConfiguration() {
-    $configuration = $this->getConfiguration();
+    $settings = $this->getSettings();
     $email = [];
-    foreach ($configuration['settings'] as $key => $value) {
+    foreach ($settings as $key => $value) {
       $email[$key] = ($value === static::DEFAULT_VALUE) ? $this->getDefaultConfigurationValue($key) : $value;
     }
     return $email;
@@ -1253,7 +1253,6 @@ public function resendMessageForm(array $message) {
     $element['reply_to'] = [
       '#type' => 'email',
       '#title' => $this->t('Reply to'),
-      '#required' => TRUE,
       '#default_value' => $message['reply_to'],
     ];
     $element['message_divider'] = ['#markup' => '<hr/>'];
diff --git a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
index db66cc7ce2c5c63237cd2167d8a645b4bce02298..b2deb7b0b12617e0e439e185c6854356871dd4ec 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
@@ -122,8 +122,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function getSummary() {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
+    $settings = $this->getSettings();
 
     if (!$this->isResultsEnabled()) {
       $settings['updated_url'] = '';
@@ -509,7 +508,7 @@ protected function remotePost($state, WebformSubmissionInterface $webform_submis
     }
 
     // If debugging is enabled, display the request and response.
-    $this->debug(t('Remote post successful!'), $state, $request_url, $request_method, $request_type, $request_options, $response, 'warning');
+    $this->debug($this->t('Remote post successful!'), $state, $request_url, $request_method, $request_type, $request_options, $response, 'warning');
 
     // Replace [webform:handler] tokens in submission data.
     // Data structured for [webform:handler:remote_post:completed:key] tokens.
@@ -563,7 +562,9 @@ protected function getRequestData($state, WebformSubmissionInterface $webform_su
     // Append uploaded file name, uri, and base64 data to data.
     $webform = $this->getWebform();
     foreach ($data as $element_key => $element_value) {
-      if (empty($element_value)) {
+      // Ignore empty and not equal to zero values.
+      // @see https://stackoverflow.com/questions/732979/php-whats-an-alternative-to-empty-where-string-0-is-not-treated-as-empty
+      if (empty($element_value) && $element_value !== 0 && $element_value !== '0') {
         continue;
       }
 
diff --git a/web/modules/webform/src/Plugin/WebformHandler/SettingsWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/SettingsWebformHandler.php
index 9a1c3ae2c33ac59f59de25af82565d77d69fdb92..b6823d9f9edc8d59ecc509fd9c5a32f6b78c6254 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/SettingsWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/SettingsWebformHandler.php
@@ -55,9 +55,7 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function getSummary() {
-    $configuration = $this->getConfiguration();
-    $settings = $configuration['settings'];
-
+    $settings = $this->getSettings();
     $setting_definitions = $this->getSettingsDefinitions();
     $setting_override = $this->getSettingsOverride();
     foreach ($setting_override as $name => $value) {
diff --git a/web/modules/webform/src/Plugin/WebformHandlerBase.php b/web/modules/webform/src/Plugin/WebformHandlerBase.php
index 6ac5e7f2f7e5f2faf374ae6290ce5ab8d375429a..f3f5d8b11c74cdcae4d058331106c6c8271785ac 100644
--- a/web/modules/webform/src/Plugin/WebformHandlerBase.php
+++ b/web/modules/webform/src/Plugin/WebformHandlerBase.php
@@ -26,6 +26,7 @@ abstract class WebformHandlerBase extends PluginBase implements WebformHandlerIn
 
   use WebformEntityInjectionTrait;
   use WebformEntityStorageTrait;
+  use WebformPluginSettingsTrait;
 
   /**
    * The webform.
diff --git a/web/modules/webform/src/Plugin/WebformHandlerInterface.php b/web/modules/webform/src/Plugin/WebformHandlerInterface.php
index 30b8979324e8a1ae51dd6dbf02b762d2cd18ae1a..2ac93902a8d22535f0524b7f294e376b0df9e274 100644
--- a/web/modules/webform/src/Plugin/WebformHandlerInterface.php
+++ b/web/modules/webform/src/Plugin/WebformHandlerInterface.php
@@ -20,7 +20,7 @@
  * @see \Drupal\webform\Plugin\WebformHandlerManagerInterface
  * @see plugin_api
  */
-interface WebformHandlerInterface extends PluginInspectionInterface, ConfigurableInterface, ContainerFactoryPluginInterface, PluginFormInterface, WebformEntityInjectionInterface {
+interface WebformHandlerInterface extends PluginInspectionInterface, ConfigurableInterface, ContainerFactoryPluginInterface, PluginFormInterface, WebformEntityInjectionInterface, WebformPluginSettingsInterface {
 
   /**
    * Value indicating unlimited plugin instances are permitted.
diff --git a/web/modules/webform/src/Plugin/WebformPluginSettingsInterface.php b/web/modules/webform/src/Plugin/WebformPluginSettingsInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a8f7764bd6af0d84dd99929e3c28dcfd576c658
--- /dev/null
+++ b/web/modules/webform/src/Plugin/WebformPluginSettingsInterface.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Drupal\webform\Plugin;
+
+/**
+ * An interface for managing a plugin's settings\.
+ */
+interface WebformPluginSettingsInterface {
+
+  /**
+   * Returns the plugin's settings.
+   *
+   * @return array
+   *   A structured array containing all the plugin's settings.
+   */
+  public function getSettings();
+
+  /**
+   * Update a plugin's settings.
+   *
+   * @param array $settings
+   *   The structured array containing the plugin's settings to be updated.
+   *
+   * @return $this
+   */
+  public function setSettings(array $settings);
+
+  /**
+   * Returns the plugin setting for given key
+   *
+   * @param string $key
+   *   The key of the plugin setting to retrieve.
+   *
+   * @return mixed
+   *   The settings value, or NULL if no settings exists.
+   */
+  public function getSetting($key);
+
+  /**
+   * Sets a plugin setting for a given key.
+   *
+   * @param string $key
+   *   The key of the setting to be updated.
+   * @param mixed $value
+   *   The value for the settings..
+   *
+   * @return $this
+   */
+  public function setSetting($key, $value);
+
+}
diff --git a/web/modules/webform/src/Plugin/WebformPluginSettingsTrait.php b/web/modules/webform/src/Plugin/WebformPluginSettingsTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..6e915c81e5ab49f64ea650616ece02dfd62d457b
--- /dev/null
+++ b/web/modules/webform/src/Plugin/WebformPluginSettingsTrait.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace Drupal\webform\Plugin;
+
+/**
+ * Provides a plugin settings trait.
+ */
+trait WebformPluginSettingsTrait {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSettings() {
+    $configuration = $this->getConfiguration();
+    return $configuration['settings'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSettings(array $settings) {
+    $configuration = $this->getConfiguration();
+    $configuration['settings'] = $settings + $configuration['settings'];
+    $this->setConfiguration($configuration);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSetting($key) {
+    $configuration = $this->getConfiguration();
+    return (isset($configuration['settings'][$key])) ? $configuration['settings'][$key] : NULL;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setSetting($key, $value) {
+    $configuration = $this->getConfiguration();
+    $configuration['settings'][$key] = $value;
+    return $this->setConfiguration($configuration);
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/WebformVariantBase.php b/web/modules/webform/src/Plugin/WebformVariantBase.php
index d1533d1a566c0fad665370c1580bb7b383843d10..8e4f3384a1075455590cd6d34091afab2ec6822c 100644
--- a/web/modules/webform/src/Plugin/WebformVariantBase.php
+++ b/web/modules/webform/src/Plugin/WebformVariantBase.php
@@ -19,6 +19,7 @@
 abstract class WebformVariantBase extends PluginBase implements WebformVariantInterface {
 
   use WebformEntityInjectionTrait;
+  use WebformPluginSettingsTrait;
 
   /**
    * The webform variant ID.
diff --git a/web/modules/webform/src/Plugin/WebformVariantInterface.php b/web/modules/webform/src/Plugin/WebformVariantInterface.php
index ba17fb16e02c0651779434db41db1c959ab95523..f6cd1ff29cbbe1d932b7bbe230eacc81dbf773b4 100644
--- a/web/modules/webform/src/Plugin/WebformVariantInterface.php
+++ b/web/modules/webform/src/Plugin/WebformVariantInterface.php
@@ -17,7 +17,7 @@
  * @see \Drupal\webform\Plugin\WebformVariantManagerInterface
  * @see plugin_api
  */
-interface WebformVariantInterface extends PluginInspectionInterface, ConfigurableInterface, ContainerFactoryPluginInterface, PluginFormInterface, WebformEntityInjectionInterface {
+interface WebformVariantInterface extends PluginInspectionInterface, ConfigurableInterface, ContainerFactoryPluginInterface, PluginFormInterface, WebformEntityInjectionInterface, WebformPluginSettingsInterface {
 
   /**
    * Returns a render array summarizing the configuration of the webform variant.
diff --git a/web/modules/webform/src/WebformAddonsManager.php b/web/modules/webform/src/WebformAddonsManager.php
index e9b81c0f1eef8b3102a2f49063dc4392a6666ba6..875dafa46c6a10c43159de3fc84ce9f323f71559 100644
--- a/web/modules/webform/src/WebformAddonsManager.php
+++ b/web/modules/webform/src/WebformAddonsManager.php
@@ -449,6 +449,14 @@ protected function initProjects() {
       'category' => 'enhancement',
     ];
 
+    // Enhancement: Webform Entity Email.
+    $projects['webform_entity_email'] = [
+      'title' => $this->t('Webform Entity Email'),
+      'description' => $this->t('Allow send a node in a specific display mode.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_entity_email'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Webform Extra Field.
     $projects['webform_extra_field'] = [
       'title' => $this->t('Webform Extra Field'),
@@ -1124,10 +1132,18 @@ protected function initProjects() {
       'category' => 'mail',
     ];
 
+    // Mail: Flexmail.
+    $projects['flexmail'] = [
+      'title' => $this->t('Flexmail'),
+      'description' => $this->t('Provides Flexmail email service webform integration.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/flexmail'),
+      'category' => 'mail',
+    ];
+
     // Mail: Mailboxlayer.
     $projects['mailboxlayer'] = [
       'title' => $this->t('Mailboxlayer'),
-      'description' => $this->t('Integrates the <a href=":href">Mailboxlayer API</a> with the Webforms.', [':href' => 'https://mailboxlayer.com']),
+      'description' => $this->t('Integrates the Mailboxlayer API with the Webforms.'),
       'url' => Url::fromUri('https://www.drupal.org/project/mailboxlayer'),
       'category' => 'mail',
     ];
diff --git a/web/modules/webform/src/WebformEntityReferenceManager.php b/web/modules/webform/src/WebformEntityReferenceManager.php
index 0d6ddd4eb0d1999c9189f9bad8bc074dec5a9747..abc8842eb885e26a641dce747de53e14276f2660 100644
--- a/web/modules/webform/src/WebformEntityReferenceManager.php
+++ b/web/modules/webform/src/WebformEntityReferenceManager.php
@@ -240,8 +240,10 @@ public function getWebforms(EntityInterface $entity = NULL) {
     $field_names = $this->getFieldNames($entity);
     foreach ($field_names as $field_name) {
       foreach ($entity->$field_name as $item) {
-        $sorted_entities[$item->target_id] = (method_exists($item->entity, 'getWeight')) ? $item->entity->getWeight() : 0;
-        $target_entities[$item->target_id] = $item->entity;
+        if ($item->entity) {
+          $sorted_entities[$item->target_id] = (method_exists($item->entity, 'getWeight')) ? $item->entity->getWeight() : 0;
+          $target_entities[$item->target_id] = $item->entity;
+        }
       }
     }
 
diff --git a/web/modules/webform/src/WebformHelpManager.php b/web/modules/webform/src/WebformHelpManager.php
index 63607a1a3dcd449e289344b52bee942c8546989f..5fdeaf0f3380d3ae4b246aa8fc53af4fe9ff28d7 100644
--- a/web/modules/webform/src/WebformHelpManager.php
+++ b/web/modules/webform/src/WebformHelpManager.php
@@ -861,6 +861,18 @@ protected function initVideos() {
           ],
         ],
       ],
+      'open_collective' => [
+        'title' => $this->t("The Webform module's Open Collective"),
+        'content' => $this->t("This screencast provides details about the Webform module's Open Collective"),
+        'youtube_id' => 'MtlFTwZLKpc',
+        'presentation_id' => '1ykQtm9dBthRoK2Tt3AwiopTxTcPm355uGZEHuXcx2nU',
+        'links' => [
+          [
+            'title' => $this->t("Webform module's Open Collective"),
+            'url' => 'https://opencollective.com/webform',
+          ],
+        ],
+      ],
       'about' => [
         'title' => $this->t('About Webform & the Drupal community'),
         'content' => $this->t('This screencast introduces you to the maintainer and community behind the Webform module.'),
@@ -1760,7 +1772,6 @@ protected function initHelp() {
 
     // Configuration: Libraries.
     $t_args = [
-      '@webform-libraries-make' => 'webform-libraries-make',
       '@webform-libraries-composer' => 'webform-libraries-composer',
       '@webform-libraries-download' => 'webform-libraries-download',
       '@webform-composer-update' => 'webform-composer-update',
@@ -1786,7 +1797,7 @@ protected function initHelp() {
         '</ul>' .
         '<p><strong>' . $this->t('Alternatives') . '</strong></p>' .
         '<ul>' .
-        '<li>' . $this->t('Generate a *.make.yml or composer.json file using <code>drush @webform-libraries-make</code> or <code>drush @webform-libraries-composer</code>.', $t_args) . '</li>' .
+        '<li>' . $this->t('Generate a composer.json file using <code>drush @webform-libraries-composer</code>.', $t_args) . '</li>' .
         '<li>' . $this->t('Execute <code>drush @webform-libraries-download</code>, to download third-party libraries required by the Webform module. (OSX/Linux)', $t_args) . '</li>' .
         '<li>' . $this->t("Execute <code>drush @webform-composer-update</code>, to update your Drupal installation's composer.json to include the Webform module's selected libraries as repositories.", $t_args) . '</li>' .
         '<li>' . $this->t('Download and extract a <a href=":href">zipped archive containing all webform libraries</a> and extract the directories and files to /libraries or /web/libraries', [':href' => 'https://git.drupalcode.org/sandbox/jrockowitz-2941983/raw/6.x/libraries.zip']) . '</li>' .
diff --git a/web/modules/webform/src/WebformLibrariesManager.php b/web/modules/webform/src/WebformLibrariesManager.php
index 8348c139d6f106c9fa37bfa92ca20602d49b4706..086ba4871dc95855552772e82897f65c20828160 100644
--- a/web/modules/webform/src/WebformLibrariesManager.php
+++ b/web/modules/webform/src/WebformLibrariesManager.php
@@ -87,6 +87,15 @@ public function requirements($cli = FALSE) {
 
     $libraries = $this->getLibraries();
 
+    // Defined REQUIREMENT constants which may not be loaded.
+    // @see /private/var/www/sites/d8_webform/web/core/includes/install.inc
+    if (!defined('REQUIREMENT_OK')) {
+      define('REQUIREMENT_INFO', -1);
+      define('REQUIREMENT_OK', 0);
+      define('REQUIREMENT_WARNING', 1);
+      define('REQUIREMENT_ERROR', 2);
+    }
+
     // Track stats.
     $severity = REQUIREMENT_OK;
     $stats = [
@@ -383,9 +392,9 @@ protected function initLibraries() {
       'notes' => $this->t('Code Mirror is used to provide a text editor for YAML, HTML, CSS, and JavaScript configuration settings and messages.'),
       'homepage_url' => Url::fromUri('http://codemirror.net/'),
       // Issue #3177233: CodeMirror 5.70.0 is displaying vertical scrollbar.
-      'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.53.2.zip'),
+      'download_url' => Url::fromUri('https://github.com/components/codemirror/archive/5.61.1.zip'),
       'issues_url' => Url::fromUri('https://github.com/codemirror/codemirror/issues'),
-      'version' => '5.53.2',
+      'version' => '5.61.1',
     ];
     $libraries['algolia.places'] = [
       'title' => $this->t('Algolia Places'),
@@ -405,8 +414,8 @@ protected function initLibraries() {
       'description' => $this->t('Input masks ensures a predefined format is entered. This can be useful for dates, numerics, phone numbers, etc…'),
       'notes' => $this->t('Input masks are used to ensure predefined and custom formats for text fields.'),
       'homepage_url' => Url::fromUri('https://robinherbots.github.io/Inputmask/'),
-      'download_url' => Url::fromUri('https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.5.zip'),
-      'version' => '5.0.5',
+      'download_url' => Url::fromUri('https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.6.zip'),
+      'version' => '5.0.6',
     ];
     $libraries['jquery.intl-tel-input'] = [
       'title' => $this->t('jQuery: International Telephone Input'),
@@ -438,8 +447,8 @@ protected function initLibraries() {
       'description' => $this->t('A lightweight, customizable javascript timepicker plugin for jQuery, inspired by Google Calendar.'),
       'notes' => $this->t('Timepicker is used to provide a polyfill for HTML 5 time elements.'),
       'homepage_url' => Url::fromUri('https://github.com/jonthornton/jquery-timepicker'),
-      'download_url' => Url::fromUri('https://github.com/jonthornton/jquery-timepicker/archive/1.13.14.zip'),
-      'version' => '1.13.14',
+      'download_url' => Url::fromUri('https://github.com/jonthornton/jquery-timepicker/archive/1.13.18.zip'),
+      'version' => '1.13.18',
     ];
     $libraries['progress-tracker'] = [
       'title' => $this->t('Progress Tracker'),
diff --git a/web/modules/webform/src/WebformSubmissionForm.php b/web/modules/webform/src/WebformSubmissionForm.php
index d9cf7cf4d59d5bd326225c8defa0de3a6a8fbc1a..5e8f03606d99ac299d6a5cb1809e03190d5cbc89 100644
--- a/web/modules/webform/src/WebformSubmissionForm.php
+++ b/web/modules/webform/src/WebformSubmissionForm.php
@@ -16,6 +16,7 @@
 use Drupal\Core\Routing\TrustedRedirectResponse;
 use Drupal\Core\Template\Attribute;
 use Drupal\Core\Url;
+use Drupal\webform\Cache\WebformBubbleableMetadata;
 use Drupal\webform\Entity\WebformSubmission;
 use Drupal\webform\Form\WebformDialogFormTrait;
 use Drupal\webform\Plugin\WebformElement\Hidden;
@@ -182,6 +183,15 @@ class WebformSubmissionForm extends ContentEntityForm {
    */
   protected $originalData;
 
+  /**
+   * Bubbleable metadata.
+   *
+   * @var \Drupal\webform\Cache\WebformBubbleableMetadata
+   *
+   * @see \Drupal\webform\WebformSubmissionForm::buildForm
+   */
+  protected $bubbleableMetadata;
+
   /**
    * {@inheritdoc}
    */
@@ -261,6 +271,10 @@ protected function init(FormStateInterface $form_state) {
    * @see \Drupal\Core\Entity\EntityFormBuilder::getForm
    */
   public function setEntity(EntityInterface $entity) {
+    // Create new metadata to be applie when the form is built.
+    // @see \Drupal\webform\WebformSubmissionForm::buildForm
+    $this->bubbleableMetadata = new WebformBubbleableMetadata();
+
     /** @var \Drupal\webform\WebformSubmissionInterface $entity */
     $webform = $entity->getWebform();
 
@@ -306,7 +320,7 @@ public function setEntity(EntityInterface $entity) {
     // Handle paragraph source entity.
     if ($source_entity && $source_entity->getEntityTypeId() === 'paragraph') {
       // Disable :clear suffix to prevent webform tokens from being removed.
-      $data = $this->tokenManager->replace($data, $source_entity, [], ['suffixes' => ['clear' => FALSE]]);
+      $data = $this->tokenManager->replace($data, $source_entity, [], ['suffixes' => ['clear' => FALSE]], $this->bubbleableMetadata);
       $source_entity = WebformSourceEntityManager::getMainSourceEntity($source_entity);
     }
     // Set source entity.
@@ -408,7 +422,7 @@ public function setEntity(EntityInterface $entity) {
     // This allows computed elements to be executed and tokens
     // to be replaced using the webform's default data.
     $default_data = $webform->getElementsDefaultData();
-    $default_data = $this->tokenManager->replaceNoRenderContext($default_data, $entity);
+    $default_data = $this->tokenManager->replace($default_data, $entity, [], [], $this->bubbleableMetadata);
     $data += $default_data;
 
     // Set data and calculate computed values.
@@ -593,9 +607,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     // Server side #states API validation.
     $this->conditionsValidator->buildForm($form, $form_state);
 
+    // Append the bubbleable metadat to the form's render array.
+    // @see \Drupal\webform\WebformSubmissionForm::setEntity
+    $this->bubbleableMetadata->appendTo($form);
+
     return $form;
   }
 
+
   /**
    * {@inheritdoc}
    */
@@ -2031,7 +2050,7 @@ protected function getUploadedManagedFileIds() {
   protected function setFormPropertiesFromElements(array &$form, array &$elements) {
     foreach ($elements as $key => $value) {
       if (is_string($key) && $key[0] === '#') {
-        $value = $this->tokenManager->replace($value, $this->getEntity());
+        $value = $this->tokenManager->replace($value, $this->getEntity(), [], [], $this->bubbleableMetadata);
         if (isset($form[$key]) && is_array($form[$key]) && is_array($value)) {
           $form[$key] = NestedArray::mergeDeep($form[$key], $value);
         }
@@ -2043,7 +2062,7 @@ protected function setFormPropertiesFromElements(array &$form, array &$elements)
     }
     // Replace token in #attributes.
     if (isset($form['#attributes'])) {
-      $form['#attributes'] = $this->tokenManager->replace($form['#attributes'], $this->getEntity());
+      $form['#attributes'] = $this->tokenManager->replace($form['#attributes'], $this->getEntity(), [], [], $this->bubbleableMetadata);
     }
   }
 
@@ -2301,7 +2320,7 @@ protected function setConfirmation(FormStateInterface $form_state) {
     switch ($confirmation_type) {
       case WebformInterface::CONFIRMATION_PAGE:
         $redirect_url = $this->requestHandler->getUrl($webform, $this->sourceEntity, 'webform.confirmation', $route_options);
-        $form_state->setRedirectUrl($redirect_url);
+        $this->setTrustedRedirectUrl($form_state, $redirect_url);
         return;
 
       case WebformInterface::CONFIRMATION_URL:
@@ -2980,7 +2999,7 @@ protected function getWebformSetting($name, $default_value = NULL) {
       ?: NULL;
 
     if ($value !== NULL) {
-      return $this->tokenManager->replace($value, $this->getEntity());
+      return $this->tokenManager->replace($value, $this->getEntity(), [], [], $this->bubbleableMetadata);
     }
     else {
       return $default_value;
diff --git a/web/modules/webform/src/WebformTokenManager.php b/web/modules/webform/src/WebformTokenManager.php
index 309fc85062ccf4c8ce937021e811ac6a895b1d34..11504140753ac290891fbcd5d386a7e0d155e2b7 100644
--- a/web/modules/webform/src/WebformTokenManager.php
+++ b/web/modules/webform/src/WebformTokenManager.php
@@ -72,7 +72,11 @@ class WebformTokenManager implements WebformTokenManagerInterface {
     // Removes all HTML tags from the token's value.
     'striptags',
     // URL encodes the token's value.
+    // @see https://www.php.net/manual/en/function.urlencode.php
     'urlencode',
+    // Raw URL encodes the token's value.
+    // @see https://www.php.net/manual/en/function.rawurlencode.php
+    'rawurlencode',
     // XML encodes the token's value.
     'xmlencode',
   ];
@@ -340,7 +344,7 @@ public static function validateElement($element, FormStateInterface $form_state,
     }
 
     // Remove all suffixes which are not valid.
-    $pattern = '/\[(webform[^]]+)((?::' . implode('|:', static::$suffixes) . ')+)\]/';
+    $pattern = '/\[((?:webform|current-user)[^]]+)((?::' . implode('|:', static::$suffixes) . ')+)\]/';
     while (preg_match($pattern, $value)) {
       $value = preg_replace($pattern, '[\1]', $value);
     }
@@ -446,6 +450,9 @@ protected function processSuffixes($text) {
           if (isset($suffixes['urlencode'])) {
             $replace = urlencode($replace);
           }
+          if (isset($suffixes['rawurlencode'])) {
+            $replace = rawurlencode($replace);
+          }
           // Encode xml.
           if (isset($suffixes['xmlencode'])) {
             $replace = htmlspecialchars($replace, ENT_XML1);
diff --git a/web/modules/webform/src/WebformTranslationConfigManager.php b/web/modules/webform/src/WebformTranslationConfigManager.php
index 15339ac55cecba99775ad1a53b79632613dd213a..0652a8d42578603c81174d362cafe440c5f460a0 100644
--- a/web/modules/webform/src/WebformTranslationConfigManager.php
+++ b/web/modules/webform/src/WebformTranslationConfigManager.php
@@ -265,14 +265,14 @@ protected function alterConfigWebformForm($config_name, &$config_element, &$form
    * {@inheritdoc}
    */
   public static function validateWebformForm(&$form, FormStateInterface $form_state) {
-    if ($form_state::hasAnyErrors()) {
+    $source_elements = $form_state->get('webform_source_elements');
+    if ($form_state::hasAnyErrors() || empty($source_elements)) {
       return;
     }
 
     $values = $form_state->getValues();
 
     $config_name = $form_state->get('webform_config_name');
-    $source_elements = $form_state->get('webform_source_elements');
 
     $translation_elements = $values['translation']['config_names'][$config_name]['elements'];
     foreach ($translation_elements as $key => $element) {
@@ -319,9 +319,13 @@ public static function validateWebformForm(&$form, FormStateInterface $form_stat
    *   The current state of the form.
    */
   protected function alterConfigWebformFormHandlers($config_name, &$config_element, &$form, $form_state) {
-    $webform = $this->loadWebform($config_name);
-
     $handlers =& $config_element['handlers'];
+    // Verify if the webform has any handler.
+    if(!isset($handlers)){
+      return;
+    }
+
+    $webform = $this->loadWebform($config_name);
     foreach (Element::children($handlers) as $handler_id) {
       $handler = $webform->getHandler($handler_id);
       if (!$handler) {
@@ -331,16 +335,18 @@ protected function alterConfigWebformFormHandlers($config_name, &$config_element
       // Apply custom logic to email body which can be twig, html, or text.
       if ($handler instanceof EmailWebformHandler) {
         $body_element =& NestedArray::getValue($config_element, ['handlers', $handler_id, 'settings', 'body']);
-        $configuration = $handler->getConfiguration();
-        if (!empty($configuration['settings']['twig'])) {
-          $this->alterTextareaElement($body_element, 'twig');
-          $body_element['translation']['#access'] = WebformTwigExtension::hasEditTwigAccess();
-        }
-        elseif (!empty($configuration['settings']['html'])) {
-          $this->alterHtmlEditorElement($body_element);
-        }
-        else {
-          $this->alterTextareaElement($body_element, 'text');
+        if ($body_element) {
+          $configuration = $handler->getConfiguration();
+          if (!empty($configuration['settings']['twig'])) {
+            $this->alterTextareaElement($body_element, 'twig');
+            $body_element['translation']['#access'] = WebformTwigExtension::hasEditTwigAccess();
+          }
+          elseif (!empty($configuration['settings']['html'])) {
+            $this->alterHtmlEditorElement($body_element);
+          }
+          else {
+            $this->alterTextareaElement($body_element, 'text');
+          }
         }
       }
     }
@@ -1024,7 +1030,7 @@ protected function mergeTranslationAndSourceElementsProperties(array &$translati
       if ($translation_element === $source_element) {
         unset($translation_elements[$key]);
       }
-      elseif (is_array($translation_element)) {
+      elseif (is_array($translation_element) && is_array($source_element)) {
         $this->mergeTranslationAndSourceElementsProperties($translation_element, $source_element);
         if (empty($translation_element)) {
           unset($translation_elements[$key]);
diff --git a/web/modules/webform/templates/webform-progress-tracker.html.twig b/web/modules/webform/templates/webform-progress-tracker.html.twig
index 4d7715d164993ef054431e03e7844fddabeccc75..f4cfbb736bd61b5d062eee5a7cfc6f97abafec34 100644
--- a/web/modules/webform/templates/webform-progress-tracker.html.twig
+++ b/web/modules/webform/templates/webform-progress-tracker.html.twig
@@ -11,7 +11,7 @@
  * - current_index: The current wizard page index.
  * - max_pages: Maximum number of pages that progress text should be displayed on.
  *
- * @see template_preprocess_webform_progress_bar()
+ * @see template_preprocess_webform_progress_tracker()
  * @see https://www.w3.org/WAI/tutorials/forms/multi-page/
  *
  * @ingroup themeable
diff --git a/web/modules/webform/templates/webform-progress.html.twig b/web/modules/webform/templates/webform-progress.html.twig
index fe634fa4c069106ec2ae26887e081e0b3342593b..c55f01d567592c25ffe58329ba8c507a39a5d7f3 100644
--- a/web/modules/webform/templates/webform-progress.html.twig
+++ b/web/modules/webform/templates/webform-progress.html.twig
@@ -7,7 +7,8 @@
  * - webform: A webform.
  * - pages: Array of wizard pages.
  * - current_page: Current wizard page.
- * - total_pages: Current wizard page.
+ * - index: Index of the current page.
+ * - total: Total number of pages.
  * - summary: Summary of progress.
  * - percentage: Percentage completed.
  * - bar: A progress bar.
diff --git a/web/modules/webform/templates/webform-section.html.twig b/web/modules/webform/templates/webform-section.html.twig
index 5a1aed5ecf0098e053900e76cdc1189e5263384c..a29a8be9f85e99f1d628a3744d6b033c83a52ae2 100644
--- a/web/modules/webform/templates/webform-section.html.twig
+++ b/web/modules/webform/templates/webform-section.html.twig
@@ -13,6 +13,12 @@
  * - description: The description element containing the following properties:
  *   - content: The description content of the <fieldset>.
  *   - attributes: HTML attributes to apply to the description container.
+ * - description_display: Description display setting. It can have these values:
+ *   - before: The description is output before the element.
+ *   - after: The description is output after the element. This is the default
+ *     value.
+ *   - invisible: The description is output after the element, hidden visually
+ *     but available to screen readers.
  * - children: The rendered child elements of the <fieldset>.
  * - prefix: The content to add before the .section-wrapper children.
  * - suffix: The content to add after the .section-wrapper children.
@@ -50,7 +56,7 @@
         {{ errors }}
       </div>
     {% endif %}
-    {% if description.content %}
+    {% if description_display in ['before', 'invisible'] and description.content %}
       <div{{ description.attributes.addClass('description') }}>{{ description.content }}</div>
     {% endif %}
     {% if prefix %}
@@ -60,5 +66,8 @@
     {% if suffix %}
       <span class="field-suffix">{{ suffix }}</span>
     {% endif %}
+    {% if description_display == 'after' and description.content %}
+      <div{{ description.attributes.addClass('description') }}>{{ description.content }}</div>
+    {% endif %}
   </div>
 </section>
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
index ef42f875603e70d4d462ed40063fd2a9f2d25970..cc42a9e140adc2b93234674268cb5a86e577f3b8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#title': textfield
     '#type': textfield
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
index c77c3300773d980d9ad2de9da6b3debba500ca51..56d9088682f81e1717f6e902bda698fd7f5ff936 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_inline.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
index dfa68cbf978d8a1d9be69b51dca5e28bbb3e9458..799095930159e499fa4fd3b0b8ccd7800a993083 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_message.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
index eb75ecbe5fc7d731ce2dbb2682cce145923ece45..b835ec6e0b07ce2940c70ef262a2f448a9c83ebc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_modal.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
index 4b7ede6d681cf248f5d962c2f2925093dafb43c6..1933b14afa218c414614b9a0f01d65fe45e2a9a4 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_page.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
index 5c639a2f491a48b8b4d21a8a3a2ce0c14425adc7..98f25cc5fd5fe748d6255ef4b57544ccc4537967 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Ajax'
 elements: |
   description:
     '#markup': 'This webform will redirect to the homepage when submitted.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
index dc3f2011f9ea693865cf364ae3c39118eb913ce1..f303ac17f5e92106c76b48b29f875accb3052c3a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_ajax_confirmation_url_msg.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
index a04f93a4bac52170c55f4cadf926b9cc88cb7126..a9334e633f0b11a3c02e0f91fc2c827fae893ce8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -104,7 +103,6 @@ elements: |
         one: One
         two: Two
         three: Three
-  
 css: ''
 javascript: ''
 settings:
@@ -292,5 +290,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
index 8f0333f761af9929685ba1ab524983771c67e23e..226efaa588f5d2aa08b14b3604330683ff524229 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -66,7 +65,6 @@ elements: |
         martial_status: Single
         employment_status: Unemployed
         age: 20
-  
 css: ''
 javascript: ''
 settings:
@@ -254,5 +252,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
index f6803f5c3918f95d5770cf32cc1ac0ccf738ce2d..19ed0e88d58b279fe15a30acf43ded5f4f2bf309 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_custom_file.yml
@@ -1,4 +1,3 @@
-uuid: b754b5b4-0b50-4a42-a23c-30f95cd9870e
 langcode: en
 status: open
 dependencies:
@@ -37,7 +36,6 @@ elements: |
       managed_file:
         '#type': managed_file
         '#title': managed_file
-  
 css: ''
 javascript: ''
 settings:
@@ -225,7 +223,9 @@ handlers:
     status: true
     conditions: {  }
     weight: -49
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
   email:
     id: email
     label: Email
@@ -264,5 +264,3 @@ handlers:
       theme_name: ''
       parameters: {  }
 variants: {  }
-_core:
-  default_config_hash: l67ofWFfSw0nP4K6ZBRppS9Dv_uBzGiAeEUKwW7-IwA
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
index 3f093e151a4f46b18854230a711d5db2115799d0..288f4fa9f671cd3760b1addacf9209b6ae5952e9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -90,12 +89,6 @@ elements: |
     text_format:
       '#type': details
       '#title': 'Text format'
-      text_format_plain_text:
-        '#type': text_format
-        '#title': 'Text format (Plain text)'
-        '#default_value':
-          value: '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Negat esse eam, inquit, propter se expetendam. Primum Theophrasti, Strato, physicum se voluit; Id mihi magnum videtur. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere.</p>'
-        '#format': plain_text
       text_format_basic_html:
         '#type': text_format
         '#title': 'Text format (Basic HTML)'
@@ -108,6 +101,12 @@ elements: |
         '#default_value':
           value: '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Negat esse eam, inquit, propter se expetendam. Primum Theophrasti, Strato, physicum se voluit; Id mihi magnum videtur. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere.</p>'
         '#format': full_html
+      text_format_plain_text:
+        '#type': text_format
+        '#title': 'Text format (Plain text)'
+        '#default_value':
+          value: '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Negat esse eam, inquit, propter se expetendam. Primum Theophrasti, Strato, physicum se voluit; Id mihi magnum videtur. Itaque mihi non satis videmini considerare quod iter sit naturae quaeque progressio. Quare hoc videndum est, possitne nobis hoc ratio philosophorum dare. Est enim tanti philosophi tamque nobilis audacter sua decreta defendere.</p>'
+        '#format': plain_text
       text_format_restricted_html:
         '#type': text_format
         '#title': 'Text format (Restricted HTML)'
@@ -456,7 +455,6 @@ elements: |
           q2: 1
           q3: 1
         '#format': table
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
index d8aa9dc9785408349a531ad9f019e0fbc2ee0f5a..43975e995e4b8c55c78f9e0d668b9186d244adb7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_composite_format_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -712,7 +711,6 @@ elements: |
             phone: '+1 212-333-4444'
             ext: 0
         '#format_items': table
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
index 1423aab3576a02817c1304d9bc88462b47042c16..8a5af98181845ce721da3a3aa145901220a16cc1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_inline.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
index 89f1c51f4ca7dc78eea97827d84ceef9792ba9ec..893d866dcbcaaf3dbff63b84e088ed44870d5062 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_message.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
index 60a5c9d13649da11d47937cf0e3d0bf34061bc81..649b73ac0d1d9e2b046e86601a8c185cbaccffe4 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_modal.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
index b14794a09f0f623e45e0f6eb0154af3b95164c56..c31af3b6a0babac80e59cec9e608a6e1cd7dc86d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_none.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
index f29bd87998ff3911bd76fa2f630e5d4931343580..eaee10f06aa0065298547d405377512a4cf7a61f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
index a0f7375f3fe07fb8a50beea7cf4eb2a8497cae57..95e5d3bc56f8db4176e36d418eaed6454db4befa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_page_custom.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
index ecb2191cfb946234ba9fb94c83ab3c6f65e03697..c4739e72e94d320f282bd46db03c2319a71e90ec 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Confirmation'
 elements: |
   description:
     '#markup': 'This webform will redirect to the homepage when submitted.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
index b863824f46310293526f857835279b63fc7f521e..065b11e72018f5b573c92b19e3ae28ecd4dc46fe 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_confirmation_url_message.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': textfield
     '#title': test
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
index be113686708cb3137ce36e85744e0a7ab1657a9e..bdcdfb32cc7c163032cdbae2c02716bf1f97f964 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
index 4f1ce70da32a4b9c41b9a3e3e70422739983da24..e9426a5f1addb0e4afdf2a5c87175d61c1ade44d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_access.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -120,7 +119,6 @@ elements: |
       fieldset_textfield_access:
         '#type': textfield
         '#title': fieldset_textfield_access
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
index 6a5284985d11bcb0834f0f9d5aeebeca8bfca59b..8b619327534a68d52dec3c690cd2e9e8924c4806 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -158,7 +157,6 @@ elements: |
     '#draft_hide': true
     '#wizard_prev_hide': true
     '#wizard_next_hide': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
index 2d2d3e16ca589fc54296c255432de96b2a2939de..aeffa9c30341d0d6201b4fce85e1bfe1cdc87100 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_actions_buttons.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,7 +58,6 @@ elements: |
       class:
         - preview_next_button_attributes
       style: 'color: orange'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
index 1a763de1e9c13ce20dba73ff71bcd252f2a90252..7f9748ee9c0ffe05449844b33e2bf686a4154cad 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_address.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -71,7 +70,6 @@ elements: |
         administrative_area: CA
         country_code: US
         langcode: en
-  
 css: ''
 javascript: ''
 settings:
@@ -259,5 +257,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
index 744bc248410c3e65f4c89e99a8ef989e82b09eab..e2d00ea8febafc8ed547d819524cc9e1a8edcf2f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_allowed_tags.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': item
     '#title': 'Below markup contains HTML tags'
     '#markup': 'Hello <ignored></tag><b>…Goodbye</b>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
index 511d8d181ddb70f8a6316ca408adbe0609f24237..7e2388bf2310073dee7640e46d7235135b56381c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_attributes.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,7 +32,6 @@ elements: |
         - four
       style: 'color: red'
       custom: test
-
 css: ''
 javascript: ''
 settings:
@@ -221,5 +219,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
index 5edb86bc8675180c451a9ea79a1c59f513e54559..668ed1c857ad0c8d946deddcc48294fab0e7d447 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_autocomplete.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -38,7 +37,6 @@ elements: |
     '#autocomplete_existing': true
     '#autocomplete_limit': 5
     '#autocomplete_match': 1
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
index d633e00746772fcd834ca5546edc13b27ebdbe37..54c67447e49d81f313c2437520ea40725d8406ee 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_captcha.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,7 +40,6 @@ elements: |
   captcha_recaptcha:
     '#type': captcha
     '#captcha_type': recaptcha/reCAPTCHA
-  
 css: ''
 javascript: ''
 settings:
@@ -229,5 +227,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
index b320212f8ed78df562dc505363f7864d8d970fa7..1b0cf772e129fe7aa9aa7993eeb81ef623548792 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -32,7 +31,6 @@ elements: |
     '#title': checkbox_return_value_raw
     '#return_value': custom_return_value_raw
     '#format': raw
-  
 css: ''
 javascript: ''
 settings:
@@ -220,5 +218,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
index ac741769a5c4694e41b33b6f6f276cd7612dffec..ab1eab9ef28131cc8accd76dc58b19f4b38361da 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkbox_value.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -35,7 +34,6 @@ elements: |
         One: One
         Two: Two
         Three: Three
-  
 css: ''
 javascript: ''
 settings:
@@ -223,5 +221,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
index 07e6acb51495735552445f84ca0ee700e310ab16..ee2bf963accdbc4bc61e8bfad08686cc42ed9fca 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -103,8 +102,8 @@ elements: |
       '#options_display': buttons_horizontal
       '#options_description_display': description
       '#options':
-        one: 'One'
-        two: 'Two'
+        one: One
+        two: Two
         three: 'Three -- This is a description'
     checkboxes_buttons_vertical:
       '#type': checkboxes
@@ -139,7 +138,7 @@ elements: |
       '#type': checkboxes
       '#title': checkboxes_buttons_wrapping
       '#options':
-        one: 'OneOneOneOneOneOneOne'
+        one: OneOneOneOneOneOneOne
         two: Two
         three: Three
         four: Four
@@ -161,17 +160,17 @@ elements: |
       '#options__properties':
         two:
           '#wrapper_attributes':
-            'data-custom': 'custom wrapper data'
+            data-custom: 'custom wrapper data'
             style: 'border: red 1px solid'
             class:
               - one-custom-wrapper-class
           '#label_attributes':
-            'data-custom': 'custom label data'
+            data-custom: 'custom label data'
             style: 'border: blue 1px solid'
             class:
               - one-custom-label-class
           '#attributes':
-            'data-custom': 'custom input data'
+            data-custom: 'custom input data'
             style: 'border: yellow 1px solid'
             class:
               - one-custom-class
@@ -197,11 +196,11 @@ elements: |
           '#disabled': true
     checkboxes_other_options_properties:
       '#type': webform_checkboxes_other
-      '#title':   checkboxes_other_options_properties
+      '#title': checkboxes_other_options_properties
       '#options':
-        one: 'One'
-        two: 'Two'
-        three: 'Three'
+        one: One
+        two: Two
+        three: Three
       '#options__properties':
         one:
           '#disabled': true
@@ -209,7 +208,6 @@ elements: |
           '#disabled': true
         three:
           '#disabled': true
-  
 css: ''
 javascript: ''
 settings:
@@ -397,5 +395,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
index b7604d50df8e08807b1ebb00d802c8300353a920..c6c757da680c12817f4a64a3abfe6fbf55789aac 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_checkboxes_all_none.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,26 +20,26 @@ elements: |
     '#title': checkboxes_all
     '#options_all': true
     '#options':
-      one: 'One'
-      two: 'Two'
-      three: 'Three'
+      one: One
+      two: Two
+      three: Three
   checkboxes_none:
     '#type': checkboxes
     '#title': checkboxes_none
     '#options_none': true
     '#options':
-      one: 'One'
-      two: 'Two'
-      three: 'Three'
+      one: One
+      two: Two
+      three: Three
   checkboxes_both:
     '#type': checkboxes
     '#title': checkboxes_both
     '#options_all': true
     '#options_none': true
     '#options':
-      one: 'One'
-      two: 'Two'
-      three: 'Three'
+      one: One
+      two: Two
+      three: Three
   checkboxes_randomize:
     '#type': checkboxes
     '#title': checkboxes_randomize
@@ -48,17 +47,17 @@ elements: |
     '#options_all': true
     '#options_none': true
     '#options':
-      one: 'One'
-      two: 'Two'
-      three: 'Three'
+      one: One
+      two: Two
+      three: Three
   checkboxes_other_none:
     '#type': webform_checkboxes_other
     '#title': checkboxes_other_none
     '#options_none': true
     '#options':
-      one: 'One'
-      two: 'Two'
-      three: 'Three'
+      one: One
+      two: Two
+      three: Three
   webform_entity_checkboxes_all:
     '#type': webform_entity_checkboxes
     '#title': webform_entity_checkboxes_all
@@ -69,7 +68,6 @@ elements: |
       include_anonymous: true
     '#default_value':
       - 1
-  
 css: ''
 javascript: ''
 settings:
@@ -257,5 +255,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
index 0a3af32ec42f38af678f017b188109dc68e72b72..7fbb1c5d2b618dde76d0bbae87b8bcce7690d9ce 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_codemirror.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -32,12 +31,13 @@ elements: |
     '#title': text_basic_min_max_height
     '#wrap': false
     '#default_value': |
-        Pellentesque habitant morbi tristique senectus
-        et netus et malesuada fames ac turpis egestas.
-        Vestibulum tortor quam, feugiat vitae, ultricies
-        eget, tempor sit amet, ante.
-        Donec eu libero sit amet quam egestas semper. Aenean
-        ultricies mi vitae est. Mauris placerat eleifend leo.
+      Pellentesque habitant morbi tristique senectus
+      et netus et malesuada fames ac turpis egestas.
+      Vestibulum tortor quam, feugiat vitae, ultricies
+      eget, tempor sit amet, ante.
+      Donec eu libero sit amet quam egestas semper. Aenean
+      ultricies mi vitae est. Mauris placerat eleifend leo.
+      
     '#attributes':
       style: 'min-height:100px; max-height:200px'
   yaml_basic:
@@ -93,16 +93,15 @@ elements: |
           </script>
         </body>
       </html>
-  
+      
   twig_basic:
     '#type': webform_codemirror
     '#mode': twig
     '#title': twig_basic
     '#default_value': |
-  
+      
       {% set value = "Hello" %}
       {{ value }}
-  
 css: ''
 javascript: ''
 settings:
@@ -290,5 +289,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
index 77ab27da8ab16aea0fe022d0453d78b1b51bb4a7..78e0c3fee2cbaa5566104b0712e04ca4cf907d2d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -58,7 +57,6 @@ elements: |
         '#field_suffix': ' yrs. old'
         '#min': 1
         '#max': 125
-  
 css: ''
 javascript: ''
 settings:
@@ -246,5 +244,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
index 0fcf6e1a663ede40e048906168684369bfbe2378..5a60c0b0252af35efb4843a0ab4f501634e1dd57 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_composite_wrapper.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -134,7 +133,6 @@ elements: |
       visible:
         ':input[name="states_checkbox"]':
           checked: true
-  
 css: ''
 javascript: ''
 settings:
@@ -322,5 +320,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
index c4bbd047d34a6a3ba7c230d2cabca250bc68860a..339b4afdb02f52e35c80d8ecf61af8936cc241c0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_ajax.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -51,7 +50,7 @@ elements: |
       Please enter a value for a and b.
       {% endif %}
       {% endspaceless %}
-  
+      
   webform_computed_twig_token:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_token
@@ -66,7 +65,7 @@ elements: |
       Please enter a value for a and b.
       {% endif %}
       {% endspaceless %}
-  
+      
   horizontal_rule:
     '#type': webform_horizontal_rule
   composite:
@@ -89,9 +88,8 @@ elements: |
       Please enter a value for composite textfield.
       {% endif %}
       {% endspaceless %}
-  
+      
     '#ajax': true
-  
 css: ''
 javascript: ''
 settings:
@@ -279,5 +277,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
index 215dcfa579d7af0afd8aa4bc07543987f7d95601..ce2de257809d06d8fdc80ff7c54b5267acf41255 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_debug.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,6 +59,7 @@ elements: |
         {# data.select_other_01 #}
         {# data.datelist_01 #}
         <pre>{{ webform_debug(data|without('computed_twig_data_01', 'computed_twig_data_ajax_01', 'computed_twig_data_02', 'computed_twig_data_ajax_02', 'computed_twig_data_03', 'computed_twig_data_ajax_03') ) }}</pre>
+        
       '#ajax': true
   page_02:
     '#type': webform_wizard_page
@@ -105,6 +105,7 @@ elements: |
         {# data.select_other_02 #}
         {# data.datelist_02 #}
         <pre>{{ webform_debug(data|without('computed_twig_data_01', 'computed_twig_data_ajax_01', 'computed_twig_data_02', 'computed_twig_data_ajax_02', 'computed_twig_data_03', 'computed_twig_data_ajax_03') ) }}</pre>
+        
       '#ajax': true
   page_03:
     '#type': webform_wizard_page
@@ -141,7 +142,7 @@ elements: |
       '#type': webform_computed_twig
       '#title': computed_twig_data_03
       '#template': '<pre>{{ webform_debug(data|without(''computed_twig_data_01'', ''computed_twig_data_ajax_01'', ''computed_twig_data_02'', ''computed_twig_data_ajax_02'', ''computed_twig_data_03'', ''computed_twig_data_ajax_03'') ) }}</pre>'
-    computed_twig_data_ajax_01:
+    computed_twig_data_ajax_03:
       '#type': webform_computed_twig
       '#title': computed_twig_data_ajax_03
       '#template': |
@@ -150,8 +151,8 @@ elements: |
         {# data.select_other_03 #}
         {# data.datelist_03 #}
         <pre>{{ webform_debug(data|without('computed_twig_data_01', 'computed_twig_data_ajax_01', 'computed_twig_data_02', 'computed_twig_data_ajax_02', 'computed_twig_data_03', 'computed_twig_data_ajax_03') ) }}</pre>
+        
       '#ajax': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
index 20853c7ca0310a718ed2c23aeba9d44622821a8e..eedf757dc5284d946f1b67b1ecbc5c8252ba9e90 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_token.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,7 +29,7 @@ elements: |
     '#default_value': |
       <p>This is a <strong>text format</strong> string.</p>
       <p>It contains &quot;double&quot; and 'single' quotes with special characters like &lt;, &gt;, &lt;&gt;, and &gt;&lt;.</p>
-  
+      
   xss:
     '#type': textfield
     '#title': xss
@@ -43,7 +42,7 @@ elements: |
       <b class="webform_computed_token_auto">complex string :</b> [webform_submission:values:complex_string]<br />
       <b class="webform_computed_token_auto">text_format:</b> [webform_submission:values:text_format]<br />
       <b class="webform_computed_token_auto">xss:</b> [webform_submission:values:xss]<br />
-  
+      
   webform_computed_token_html:
     '#type': webform_computed_token
     '#title': webform_computed_token_html
@@ -53,7 +52,7 @@ elements: |
       <b class="webform_computed_token_html">complex string :</b> [webform_submission:values:complex_string]<br />
       <b class="webform_computed_token_html">text_format:</b> [webform_submission:values:text_format]<br />
       <b class="webform_computed_token_html">xss:</b> [webform_submission:values:xss]<br />
-  
+      
   webform_computed_token_text:
     '#type': webform_computed_token
     '#title': webform_computed_token_text
@@ -63,7 +62,7 @@ elements: |
       complex string : [webform_submission:values:complex_string]
       text_format: [webform_submission:values:text_format]
       xss: [webform_submission:values:xss]
-  
+      
   webform_computed_token_store:
     '#type': webform_computed_token
     '#title': webform_computed_token_store
@@ -71,7 +70,6 @@ elements: |
     '#display_on': none
     '#store': true
     '#template': 'sid: [webform_submission:sid]'
-  
 css: ''
 javascript: ''
 settings:
@@ -259,5 +257,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
index ca8000dd143290a4dcaa3e56262b068a1fd42aa3..54d19bf031f70e0dcf7e904a32b2336a518c5dab 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_computed_twig.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,7 @@ elements: |
     '#default_value': |
       <p>This is a <strong>text format</strong> string.</p>
       <p>It contains &quot;double&quot; and 'single' quotes with special characters like &lt;, &gt;, &lt;&gt;, and &gt;&lt;.</p>
-  
+      
   xss:
     '#type': textfield
     '#title': xss
@@ -48,7 +47,7 @@ elements: |
       <b class="webform_computed_twig_auto">complex string:</b> {{ webform_token('[webform_submission:values:complex_string]', webform_submission) }}<br />
       <b class="webform_computed_twig_auto">text_format:</b> {{ webform_token('[webform_submission:values:text_format]', webform_submission) }}<br />
       <b class="webform_computed_twig_auto">xss:</b> {{ webform_token('[webform_submission:values:xss]', webform_submission) }}<br />
-  
+      
   webform_computed_twig_html:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_html
@@ -59,7 +58,7 @@ elements: |
       <b class="webform_computed_twig_html">complex string:</b> {{ webform_token('[webform_submission:values:complex_string]', webform_submission) }}<br />
       <b class="webform_computed_twig_html">text_format:</b> {{ webform_token('[webform_submission:values:text_format]', webform_submission) }}<br />
       <b class="webform_computed_twig_html">xss:</b> {{ webform_token('[webform_submission:values:xss]', webform_submission) }}<br />
-  
+      
   webform_computed_twig_text:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_text
@@ -70,7 +69,7 @@ elements: |
       complex string: {{ webform_token('[webform_submission:values:complex_string]', webform_submission) }}
       text_format: {{ webform_token('[webform_submission:values:text_format]', webform_submission) }}
       xss: {{ webform_token('[webform_submission:values:xss]', webform_submission) }}
-  
+      
   webform_computed_twig_data:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_data
@@ -80,7 +79,7 @@ elements: |
       <b class="webform_computed_twig_data">complex string:</b> {{ data.complex_string }}<br />
       <b class="webform_computed_twig_data">text_format:</b> {{ data.text_format.value }}<br />
       <b class="webform_computed_twig_data">xss:</b> {{ data.xss }}<br />
-  
+      
   webform_computed_twig_store:
     '#type': webform_computed_twig
     '#title': webform_computed_twig_store
@@ -98,7 +97,6 @@ elements: |
     '#title': webform_computed_twig_spaceless
     '#whitespace': spaceless
     '#template': ' <em>This is spaceless</em>  <br/> '
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
index fd216f85447745d8ee48c4b0af54d2273e705889..fe3fb07a6377ac01b629690b33cf7bf233c10a0a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_container.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,11 +39,11 @@ elements: |
     '#description': 'This is a details_closed description.'
     '#open': false
     '#format': details-closed
-    details_value:
+    details_closed_value:
       '#markup': 'This is a details_closed value.'
-    details_textfield:
+    details_closed_textfield:
       '#type': textfield
-      '#title': details_textfield
+      '#title': details_closed_textfield
   details_title_display_invisible:
     '#type': details
     '#title': details_title_display_invisible
@@ -75,7 +74,6 @@ elements: |
     fieldset_title_display_invisible_textfield:
       '#type': textfield
       '#title': fieldset_title_display_invisible_textfield
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
index 9ea4a610764ac3f6255c144cc491c11954d41297..407f9ce5cb8f6b7f53753123c39492e39998829c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_counter.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -50,13 +49,12 @@ elements: |
       '#counter_maximum_message': '%d character(s) remaining. This is custom text'
     counter_characters_xss:
       '#type': textfield
-      '#title': 'counter_characters_xss'
+      '#title': counter_characters_xss
       '#counter_type': character
       '#counter_minimum': 5
       '#counter_maximum': 10
       '#counter_minimum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) entered.'
       '#counter_maximum_message': '<script>alert(''XSS'');</script><em>%d</em> character(s) remaining.'
-  
   counter_word:
     '#type': details
     '#title': counter_word
@@ -89,7 +87,6 @@ elements: |
       '#counter_type': word
       '#counter_maximum': 10
       '#counter_maximum_message': '%d character(s) remaining. This is custom text'
-  
 css: ''
 javascript: ''
 settings:
@@ -277,5 +274,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
index dab50fcd62c0581158992b1abae461220292fdb1..7266cf29a6103369243673db0bd4fb33698509fa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_date.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -83,7 +82,6 @@ elements: |
     '#title': date_datepicker_placeholder
     '#datepicker': true
     '#placeholder': '{date}'
-  
 css: ''
 javascript: ''
 settings:
@@ -271,5 +269,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
index 34abeabde2712648520f3004821a3a46255f7db1..258f91c533087d6798a12e68a9367d00f9a43b92 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datelist.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -96,7 +95,6 @@ elements: |
         '#title': datelist
     '#default_value':
       - datelist: '2009-08-18T01:00:00-05:00'
-  
 css: ''
 javascript: ''
 settings:
@@ -284,5 +282,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
index 7ff34363c46ce454af700575ab78d0cade0d181f..a42d67ab34bab75b73945d3cb45afe9eecc6d084 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_datetime.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -124,7 +123,7 @@ elements: |
     '#description': |
       @see <a href="https://www.drupal.org/node/2917107">Issue #2917107: Date and Time validation problem</a><br/>
       @see <a href="https://www.drupal.org/node/2723159">Issue #2723159: Datetime form element cannot validate when using a format without seconds</a><br/>
-  
+      
     '#date_date_element': datepicker
     '#date_time_element': text
     '#date_time_format': 'H:i'
@@ -154,7 +153,6 @@ elements: |
         '#autocomplete': 'off'
     '#default_value':
       - datetime: '2009-08-18T01:00:00-05:00'
-  
 css: ''
 javascript: ''
 settings:
@@ -342,5 +340,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
index bf23a1a463e08f4a146c13f9fe2b0fb8e98f078c..940b14586aa136c320b40847646c799baa951961 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description_tooltip.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -76,6 +75,11 @@ elements: |
       '#title': 'Email multiple'
       '#description': 'This is a description for the ''webform_email_multiple'' element.'
       '#description_display': tooltip
+    webform_height:
+      '#type': webform_height
+      '#title': 'Height (feet/inches)'
+      '#description': 'This is a description for the ''webform_height'' element.'
+      '#description_display': tooltip
     webform_mapping:
       '#type': webform_mapping
       '#title': Mapping
@@ -118,6 +122,18 @@ elements: |
       '#title': Rating
       '#description': 'This is a description for the ''webform_rating'' element.'
       '#description_display': tooltip
+    webform_same:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address'
+      '#description': 'This is a description for the ''webform_same'' element.'
+      '#description_display': tooltip
+    webform_scale:
+      '#type': webform_scale
+      '#title': Scale
+      '#min': 1
+      '#max': 5
+      '#description': 'This is a description for the ''webform_scale'' element.'
+      '#description_display': tooltip
     search:
       '#type': search
       '#title': Search
@@ -228,24 +244,6 @@ elements: |
     '#type': details
     '#title': 'Options elements'
     '#open': true
-    webform_buttons:
-      '#type': webform_buttons
-      '#title': Buttons
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#description': 'This is a description for the ''webform_buttons'' element.'
-      '#description_display': tooltip
-    webform_buttons_other:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#description': 'This is a description for the ''webform_buttons_other'' element.'
-      '#description_display': tooltip
     checkboxes:
       '#type': checkboxes
       '#title': Checkboxes
@@ -333,6 +331,33 @@ elements: |
         three: Three
       '#description': 'This is a description for the ''webform_select_other'' element.'
       '#description_display': tooltip
+    tableselect:
+      '#type': tableselect
+      '#title': 'Table select'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#description': 'This is a description for the ''tableselect'' element.'
+      '#description_display': tooltip
+    webform_tableselect_sort:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#description': 'This is a description for the ''webform_tableselect_sort'' element.'
+      '#description_display': tooltip
+    webform_table_sort:
+      '#type': webform_table_sort
+      '#title': 'Table sort'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#description': 'This is a description for the ''webform_table_sort'' element.'
+      '#description_display': tooltip
   computed_elements:
     '#type': details
     '#title': 'Computed Elements'
@@ -453,6 +478,28 @@ elements: |
       '#field_suffix': '{field_suffix}'
       '#description': 'This is a description for the ''item'' element.'
       '#description_display': tooltip
+    webform_section:
+      '#type': webform_section
+      '#title': Section
+      '#description': 'This is a description for the ''webform_section'' element.'
+      '#description_display': tooltip
+    webform_table:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+      '#description': 'This is a description for the ''webform_table'' element.'
+      '#description_display': tooltip
   other_elements:
     '#type': details
     '#title': 'Other elements'
@@ -467,7 +514,6 @@ elements: |
       '#title': 'Machine name'
       '#description': 'This is a description for the ''machine_name'' element.'
       '#description_display': tooltip
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
index 5dac93a9ddf80ce5752ff36ca76c7c5a4d848160..8b398240e74ebc4ce75c02a7ec094526f2076bee 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_details.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -47,7 +46,6 @@ elements: |
     '#open': true
     details_help_markup:
       '#markup': '<p>This is some markup</p>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
index 87de03c7336bce54153d66fb16ab70b04e0d24c9..8d947bd1e73ac626cd0c99788a52c68de9a6657a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_disabled.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -28,22 +27,6 @@ elements: |
     '#type': webform_autocomplete
     '#title': Autocomplete
     '#disabled': true
-  webform_buttons:
-    '#type': webform_buttons
-    '#title': Buttons
-    '#options':
-      one: One
-      two: Two
-      three: Three
-    '#disabled': true
-  webform_buttons_other:
-    '#type': webform_buttons_other
-    '#title': 'Buttons other'
-    '#options':
-      one: One
-      two: Two
-      three: Three
-    '#disabled': true
   checkbox:
     '#type': checkbox
     '#title': Checkbox
@@ -174,6 +157,10 @@ elements: |
     '#title': File
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2705471">Issue #2705471: Webform states managed file fields</a><br /><a href="https://www.drupal.org/node/2113931">Issue #2113931: File Field design update</a><br /><a href="https://www.drupal.org/node/2346893">Issue #2346893: Duplicate Ajax wrapper around a file field</a><br /><a href="https://www.drupal.org/node/2482783">Issue #2482783: File upload errors not set or shown correctly</a>'
     '#disabled': true
+  webform_height:
+    '#type': webform_height
+    '#title': 'Height (feet/inches)'
+    '#disabled': true
   webform_image_file:
     '#type': webform_image_file
     '#title': 'Image file'
@@ -271,6 +258,16 @@ elements: |
     '#type': webform_rating
     '#title': Rating
     '#disabled': true
+  webform_same:
+    '#type': webform_same
+    '#title': 'Billing address is the same as the shipping address'
+    '#disabled': true
+  webform_scale:
+    '#type': webform_scale
+    '#title': Scale
+    '#min': 1
+    '#max': 5
+    '#disabled': true
   search:
     '#type': search
     '#title': Search
@@ -292,6 +289,10 @@ elements: |
       two: Two
       three: Three
     '#disabled': true
+  webform_signature:
+    '#type': webform_signature
+    '#title': Signature
+    '#disabled': true
   tableselect:
     '#type': tableselect
     '#title': 'Table select'
@@ -364,7 +365,6 @@ elements: |
     '#type': webform_video_file
     '#title': 'Video file'
     '#disabled': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
index 0a2bdbf9da6b883cfe932dae6fbacfb81076a3b7..e30e653d0c45152f1afb213a58f31bac27378e45 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_confirm.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -38,12 +37,11 @@ elements: |
     '#title': email_confirm_required
     '#required': true
     '#required_error': 'Email address is required'
-    '#default_value': 'example@example.com'
+    '#default_value': example@example.com
   email_confirm_flexbox:
     '#type': webform_email_confirm
     '#title': email_confirm_flexbox
     '#flexbox': 1
-  
 css: ''
 javascript: ''
 settings:
@@ -231,5 +229,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
index 273cbce47fcf337a9ac9fa284e37a738c3d1f2ca..1f0938b71125055de4cbba233fcf70608a12f338 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_email_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -28,7 +27,6 @@ elements: |
     '#type': webform_email_multiple
     '#title': email_multiple_three
     '#cardinality': 3
-  
 css: ''
 javascript: ''
 settings:
@@ -216,5 +214,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
index 05350ba092884e23794ad004d881145193fbd054..4f4ee7c2d5952032ef2b7be6d412ba3ac3e333fa 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_autocomplete.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -86,7 +85,6 @@ elements: |
       auto_create: true
       auto_create_bundle: tags
     '#default_value': 1
-  
 css: ''
 javascript: ''
 settings:
@@ -274,5 +272,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
index 4ea336b2b8e67794a8fa5f642a88c89a61f909b3..027b8dc12735332d85d5f8513f99682e66bf8bdc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_entity_reference.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -63,7 +62,6 @@ elements: |
         include_anonymous: true
       '#default_value':
         - 1
-  
 css: ''
 javascript: ''
 settings:
@@ -251,5 +249,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
index 572e1e6ebf5a2e216729d014ad86fc776a59232c..4e045b14e61fdaaaaf6e012ea887a8923497841c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_columns.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,7 +29,6 @@ elements: |
     '#title': webform_excluded_columns
     '#default_value':
       webform_excluded_columns: webform_excluded_columns
-  
 css: ''
 javascript: ''
 settings:
@@ -218,5 +216,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
index 8c3e0f9564c6b497c28283fe4d4bb1b6cf725cbd..d82f2e4d39569960d74107fc70a2adf8589ee30a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_excluded_elements.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -38,7 +37,6 @@ elements: |
     '#default_value':
       webform_excluded_elements: webform_excluded_elements
       webform_excluded_elements_markup: webform_excluded_elements_markup
-  
 css: ''
 javascript: ''
 settings:
@@ -226,5 +224,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
index 0e16d86eb89e2faacb5d0813685e52aaa6efbbcb..18553ad018f08e83ca720e6868e5488882bd3fde 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_fieldset.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -61,7 +60,6 @@ elements: |
     '#field_suffix': suffix
     fieldset_markup:
       '#markup': '<p>This is some markup</p>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
index 06447995d637e5e8c45247534bbf4da6a10b2cc8..e2748475f7921e4b96fe982d0bedc63eaa27c691 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -58,6 +57,38 @@ elements: |
     flex_table_right:
       '#type': table
       '#title': 'Table 02'
+  flexbox_webform_table:
+    '#type': webform_flexbox
+    flex_webform_table_left:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+    flex_webform_table_right:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
   flexbox_webform_address:
     '#type': webform_flexbox
     flex_webform_address_left:
@@ -108,49 +139,21 @@ elements: |
       '#type': webform_markup
       '#title': 'Basic HTML 02'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2700667">Issue #2700667: Notice: Undefined index: #type in drupal_process_states()</a>'
-  flexbox_webform_buttons:
-    '#type': webform_flexbox
-    flex_webform_buttons_left:
-      '#type': webform_buttons
-      '#title': 'Buttons 01'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-    flex_webform_buttons_right:
-      '#type': webform_buttons
-      '#title': 'Buttons 02'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-  flexbox_webform_buttons_other:
-    '#type': webform_flexbox
-    flex_webform_buttons_other_left:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other 01'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-    flex_webform_buttons_other_right:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other 02'
-      '#options':
-        one: One
-        two: Two
-        three: Three
   flexbox_captcha:
     '#type': webform_flexbox
     flex_captcha_left:
       '#type': captcha
       '#title': 'CAPTCHA 01'
       '#captcha_admin_mode': true
+      '#captcha_info':
+        form_id: ''
       '#captcha_type': image_captcha/Image
     flex_captcha_right:
       '#type': captcha
       '#title': 'CAPTCHA 02'
       '#captcha_admin_mode': true
+      '#captcha_info':
+        form_id: ''
       '#captcha_type': image_captcha/Image
   flexbox_checkbox:
     '#type': webform_flexbox
@@ -432,6 +435,14 @@ elements: |
       '#type': managed_file
       '#title': 'File 02'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2705471">Issue #2705471: Webform states managed file fields</a><br /><a href="https://www.drupal.org/node/2113931">Issue #2113931: File Field design update</a><br /><a href="https://www.drupal.org/node/2346893">Issue #2346893: Duplicate Ajax wrapper around a file field</a><br /><a href="https://www.drupal.org/node/2482783">Issue #2482783: File upload errors not set or shown correctly</a>'
+  flexbox_webform_height:
+    '#type': webform_flexbox
+    flex_webform_height_left:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) 01'
+    flex_webform_height_right:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) 02'
   flexbox_webform_horizontal_rule:
     '#type': webform_flexbox
     flex_webform_horizontal_rule_left:
@@ -602,6 +613,16 @@ elements: |
       '#message_type': warning
       '#message_message': 'This is a <strong>warning</strong> message.'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/77245">Issue #77245: A place for JavaScript status messages</a>'
+  flexbox_webform_more:
+    '#type': webform_flexbox
+    flex_webform_more_left:
+      '#type': webform_more
+      '#title': 'More 01'
+      '#more': 'This is more content'
+    flex_webform_more_right:
+      '#type': webform_more
+      '#title': 'More 02'
+      '#more': 'This is more content'
   flexbox_webform_name:
     '#type': webform_flexbox
     flex_webform_name_left:
@@ -708,6 +729,26 @@ elements: |
     flex_webform_rating_right:
       '#type': webform_rating
       '#title': 'Rating 02'
+  flexbox_webform_same:
+    '#type': webform_flexbox
+    flex_webform_same_left:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address 01'
+    flex_webform_same_right:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address 02'
+  flexbox_webform_scale:
+    '#type': webform_flexbox
+    flex_webform_scale_left:
+      '#type': webform_scale
+      '#title': 'Scale 01'
+      '#min': 1
+      '#max': 5
+    flex_webform_scale_right:
+      '#type': webform_scale
+      '#title': 'Scale 02'
+      '#min': 1
+      '#max': 5
   flexbox_search:
     '#type': webform_flexbox
     flex_search_left:
@@ -928,28 +969,15 @@ elements: |
     '#type': webform_flexbox
     '#align_items': flex-end
     toggle:
-      '#type': webform_toggle
+      '#type': toggle
       '#title': toggle
     toggle_textfield:
       '#type': textfield
       '#title': textfield
       '#flex': 5
     toggle_rating:
-      '#type': webform_rating
+      '#type': rating
       '#title': rating
-  flexbox_inline_title:
-    '#type': webform_flexbox
-    flexbox_inline_title_textfield_01:
-      '#type': textfield
-      '#title': 'textfield 01'
-      '#title_display': inline
-      '#size': 20
-    flexbox_inline_title_textfield_02:
-      '#type': textfield
-      '#title': 'textfield 02'
-      '#title_display': inline
-      '#size': 20
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
index 14b4e726638af1508a325c4242c3109e73ad915b..56080f24fd421497796fb3a13ac8bdf5c924ffe5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_flexbox_flex.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -806,7 +805,6 @@ elements: |
         style: 'padding: 30px; background: #ccc; text-align: center'
       flex:
         '#markup': 1
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
index 01de1209e90c0fb1a52aba58ebe6ee01ef351801..cde553dfd7738213f89b903eabd1f68c7eafbf39 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,21 +29,9 @@ elements: |
         '#format': value
       checkbox_raw:
         '#type': checkbox
-        '#title': 'Checkbox (Raw value)'
+        '#title': 'Checkbox (Raw/return value)'
         '#default_value': true
         '#format': raw
-    radios:
-      '#type': details
-      '#title': Radios
-      radios_description:
-        '#type': radios
-        '#title': 'Radios (Description)'
-        '#default_value': one
-        '#format': description
-        '#options':
-          one: 'One -- This is the <strong>first</strong> description'
-          two: 'Two -- This is the <strong>second</strong> description'
-          three: 'Three -- This is <strong>third</strong> description'
     password:
       '#type': details
       '#title': Password
@@ -201,6 +188,19 @@ elements: |
         '#title': 'Email multiple (Link)'
         '#default_value': 'example@example.com, test@test.com, random@random.com'
         '#format': link
+    webform_height:
+      '#type': details
+      '#title': 'Height (feet/inches)'
+      webform_height_value:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Value)'
+        '#default_value': 48
+        '#format': value
+      webform_height_raw:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Raw value)'
+        '#default_value': 48
+        '#format': raw
     number:
       '#type': details
       '#title': Number
@@ -274,6 +274,23 @@ elements: |
         '#type': webform_rating
         '#title': 'Rating (Star)'
         '#format': star
+    webform_scale:
+      '#type': details
+      '#title': Scale
+      webform_scale_value:
+        '#type': webform_scale
+        '#title': 'Scale (Value)'
+        '#min': 1
+        '#max': 5
+        '#default_value': 1
+        '#format': value
+      webform_scale_raw:
+        '#type': webform_scale
+        '#title': 'Scale (Raw value)'
+        '#min': 1
+        '#max': 5
+        '#default_value': 1
+        '#format': raw
     search:
       '#type': details
       '#title': Search
@@ -339,7 +356,7 @@ elements: |
         '#format': value
       webform_terms_of_service_raw:
         '#type': webform_terms_of_service
-        '#title': 'I agree to the {terms of service}. (Raw value)'
+        '#title': 'I agree to the {terms of service}. (Raw/return value)'
         '#required': true
         '#terms_type': slideout
         '#terms_content': '<em>These are the terms of service.</em>'
@@ -380,20 +397,20 @@ elements: |
     '#type': details
     '#title': 'File attachment elements'
     '#open': true
-    'webform_entity_print_attachment:pdf':
+    webform_entity_print_attachment_pdf:
       '#type': details
       '#title': 'Attachment PDF'
-      'webform_entity_print_attachment:pdf_link':
+      webform_entity_print_attachment_pdf_link:
         '#type': webform_entity_print_attachment
         '#title': 'Attachment PDF (File link)'
         '#default_value': Loremipsum
         '#format': link
-      'webform_entity_print_attachment:pdf_name':
+      webform_entity_print_attachment_pdf_name:
         '#type': webform_entity_print_attachment
         '#title': 'Attachment PDF (File name)'
         '#default_value': Loremipsum
         '#format': name
-      'webform_entity_print_attachment:pdf_url':
+      webform_entity_print_attachment_pdf_url:
         '#type': webform_entity_print_attachment
         '#title': 'Attachment PDF (File URL)'
         '#default_value': Loremipsum
@@ -443,191 +460,6 @@ elements: |
         '#type': webform_attachment_url
         '#title': 'Attachment URL (File URL)'
         '#format': url
-  options_elements:
-    '#type': details
-    '#title': 'Options elements'
-    '#open': true
-    webform_buttons:
-      '#type': details
-      '#title': Buttons
-      webform_buttons_value:
-        '#type': webform_buttons
-        '#title': 'Buttons (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': value
-      webform_buttons_raw:
-        '#type': webform_buttons
-        '#title': 'Buttons (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': raw
-    webform_buttons_other:
-      '#type': details
-      '#title': 'Buttons other'
-      webform_buttons_other_value:
-        '#type': webform_buttons_other
-        '#title': 'Buttons other (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': value
-      webform_buttons_other_raw:
-        '#type': webform_buttons_other
-        '#title': 'Buttons other (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': raw
-    webform_image_select:
-      '#type': details
-      '#title': 'Image select'
-      webform_image_select_value:
-        '#type': webform_image_select
-        '#title': 'Image select (Value)'
-        '#show_label': true
-        '#images':
-          dog_1:
-            text: 'Dog 1'
-            src: 'https://www.placedog.net/80/100'
-          dog_2:
-            text: 'Dog 2'
-            src: 'https://www.placedog.net/100/100'
-          dog_3:
-            text: 'Dog 3'
-            src: 'https://www.placedog.net/120/100'
-        '#default_value': Loremipsum
-        '#format': value
-      webform_image_select_raw:
-        '#type': webform_image_select
-        '#title': 'Image select (Raw value)'
-        '#show_label': true
-        '#images':
-          dog_1:
-            text: 'Dog 1'
-            src: 'https://www.placedog.net/80/100'
-          dog_2:
-            text: 'Dog 2'
-            src: 'https://www.placedog.net/100/100'
-          dog_3:
-            text: 'Dog 3'
-            src: 'https://www.placedog.net/120/100'
-        '#default_value': Loremipsum
-        '#format': raw
-      webform_image_select_image:
-        '#type': webform_image_select
-        '#title': 'Image select (Image)'
-        '#show_label': true
-        '#images':
-          dog_1:
-            text: 'Dog 1'
-            src: 'https://www.placedog.net/80/100'
-          dog_2:
-            text: 'Dog 2'
-            src: 'https://www.placedog.net/100/100'
-          dog_3:
-            text: 'Dog 3'
-            src: 'https://www.placedog.net/120/100'
-        '#default_value': Loremipsum
-        '#format': image
-    radios:
-      '#type': details
-      '#title': Radios
-      radios_value:
-        '#type': radios
-        '#title': 'Radios (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#options_display': side_by_side
-        '#default_value': one
-        '#format': value
-      radios_raw:
-        '#type': radios
-        '#title': 'Radios (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#options_display': side_by_side
-        '#default_value': one
-        '#format': raw
-    webform_radios_other:
-      '#type': details
-      '#title': 'Radios other'
-      webform_radios_other_value:
-        '#type': webform_radios_other
-        '#title': 'Radios other (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#options_display': side_by_side
-        '#default_value': one
-        '#format': value
-      webform_radios_other_raw:
-        '#type': webform_radios_other
-        '#title': 'Radios other (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#options_display': side_by_side
-        '#default_value': one
-        '#format': raw
-    select:
-      '#type': details
-      '#title': Select
-      select_value:
-        '#type': select
-        '#title': 'Select (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': value
-      select_raw:
-        '#type': select
-        '#title': 'Select (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': raw
-    webform_select_other:
-      '#type': details
-      '#title': 'Select other'
-      webform_select_other_value:
-        '#type': webform_select_other
-        '#title': 'Select other (Value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': value
-      webform_select_other_raw:
-        '#type': webform_select_other
-        '#title': 'Select other (Raw value)'
-        '#options':
-          one: One
-          two: Two
-          three: Three
-        '#default_value': one
-        '#format': raw
   computed_elements:
     '#type': details
     '#title': 'Computed Elements'
@@ -675,16 +507,21 @@ elements: |
         '#title': 'Date (Raw value)'
         '#default_value': '1942-06-18'
         '#format': raw
-      date_fallback:
-        '#type': date
-        '#title': 'Date (Fallback date format)'
-        '#default_value': '1942-06-18'
-        '#format': fallback
       date_html_date:
         '#type': date
         '#title': 'Date (HTML Date)'
         '#default_value': '1942-06-18'
         '#format': html_date
+      date_html_time:
+        '#type': date
+        '#title': 'Date (HTML Time)'
+        '#default_value': '1942-06-18'
+        '#format': html_time
+      date_fallback:
+        '#type': date
+        '#title': 'Date (Fallback date format)'
+        '#default_value': '1942-06-18'
+        '#format': fallback
       date_html_datetime:
         '#type': date
         '#title': 'Date (HTML Datetime)'
@@ -695,11 +532,6 @@ elements: |
         '#title': 'Date (HTML Month)'
         '#default_value': '1942-06-18'
         '#format': html_month
-      date_html_time:
-        '#type': date
-        '#title': 'Date (HTML Time)'
-        '#default_value': '1942-06-18'
-        '#format': html_time
       date_html_week:
         '#type': date
         '#title': 'Date (HTML Week)'
@@ -893,7 +725,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': value
       entity_autocomplete_raw:
         '#type': entity_autocomplete
@@ -902,7 +734,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': raw
       entity_autocomplete_link:
         '#type': entity_autocomplete
@@ -911,7 +743,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': link
       entity_autocomplete_id:
         '#type': entity_autocomplete
@@ -920,7 +752,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': id
       entity_autocomplete_label:
         '#type': entity_autocomplete
@@ -929,7 +761,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': label
       entity_autocomplete_text:
         '#type': entity_autocomplete
@@ -938,7 +770,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': text
       entity_autocomplete_teaser:
         '#type': entity_autocomplete
@@ -947,7 +779,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': teaser
       entity_autocomplete_default:
         '#type': entity_autocomplete
@@ -956,7 +788,7 @@ elements: |
         '#selection_handler': 'default:user'
         '#selection_settings':
           include_anonymous: true
-        '#default_value': 11
+        '#default_value': 1
         '#format': default
     webform_entity_radios:
       '#type': details
@@ -987,6 +819,19 @@ elements: |
           0: Anonymous
         '#default_value': 1
         '#format': raw
+      webform_entity_radios_description:
+        '#type': webform_entity_radios
+        '#title': 'Entity radios (Option description)'
+        '#options_display': side_by_side
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#default_value': 1
+        '#format': description
       webform_entity_radios_link:
         '#type': webform_entity_radios
         '#title': 'Entity radios (Link)'
@@ -1092,6 +937,18 @@ elements: |
           0: Anonymous
         '#default_value': 1
         '#format': raw
+      webform_entity_select_description:
+        '#type': webform_entity_select
+        '#title': 'Entity select (Option description)'
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#default_value': 1
+        '#format': description
       webform_entity_select_link:
         '#type': webform_entity_select
         '#title': 'Entity select (Link)'
@@ -1179,6 +1036,12 @@ elements: |
         '#vocabulary': tags
         '#default_value': Loremipsum
         '#format': raw
+      webform_term_select_description:
+        '#type': webform_term_select
+        '#title': 'Term select (Option description)'
+        '#vocabulary': tags
+        '#default_value': Loremipsum
+        '#format': description
       webform_term_select_link:
         '#type': webform_term_select
         '#title': 'Term select (Link)'
@@ -1273,21 +1136,218 @@ elements: |
         '#title': 'File (File mime type)'
         '#file_extensions': txt
         '#format': mime
-      managed_file_data:
-        '#type': managed_file
-        '#title': 'File (File content (Base64))'
-        '#file_extensions': txt
-        '#format': data
       managed_file_size:
         '#type': managed_file
         '#title': 'File (File size (Bytes))'
         '#file_extensions': txt
         '#format': size
+      managed_file_data:
+        '#type': managed_file
+        '#title': 'File (File content (Base64))'
+        '#file_extensions': txt
+        '#format': data
       managed_file_extension:
         '#type': managed_file
         '#title': 'File (File extension)'
         '#file_extensions': txt
         '#format': extension
+  options_elements:
+    '#type': details
+    '#title': 'Options elements'
+    '#open': true
+    webform_image_select:
+      '#type': details
+      '#title': 'Image select'
+      webform_image_select_value:
+        '#type': webform_image_select
+        '#title': 'Image select (Value)'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#default_value': Loremipsum
+        '#format': value
+      webform_image_select_raw:
+        '#type': webform_image_select
+        '#title': 'Image select (Raw value)'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#default_value': Loremipsum
+        '#format': raw
+      webform_image_select_description:
+        '#type': webform_image_select
+        '#title': 'Image select (Option description)'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#default_value': Loremipsum
+        '#format': description
+      webform_image_select_image:
+        '#type': webform_image_select
+        '#title': 'Image select (Image)'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#default_value': Loremipsum
+        '#format': image
+    radios:
+      '#type': details
+      '#title': Radios
+      radios_value:
+        '#type': radios
+        '#title': 'Radios (Value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': value
+      radios_raw:
+        '#type': radios
+        '#title': 'Radios (Raw value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': raw
+      radios_description:
+        '#type': radios
+        '#title': 'Radios (Option description)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': description
+    webform_radios_other:
+      '#type': details
+      '#title': 'Radios other'
+      webform_radios_other_value:
+        '#type': webform_radios_other
+        '#title': 'Radios other (Value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': value
+      webform_radios_other_raw:
+        '#type': webform_radios_other
+        '#title': 'Radios other (Raw value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': raw
+      webform_radios_other_description:
+        '#type': webform_radios_other
+        '#title': 'Radios other (Option description)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#default_value': one
+        '#format': description
+    select:
+      '#type': details
+      '#title': Select
+      select_value:
+        '#type': select
+        '#title': 'Select (Value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': value
+      select_raw:
+        '#type': select
+        '#title': 'Select (Raw value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': raw
+      select_description:
+        '#type': select
+        '#title': 'Select (Option description)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': description
+    webform_select_other:
+      '#type': details
+      '#title': 'Select other'
+      webform_select_other_value:
+        '#type': webform_select_other
+        '#title': 'Select other (Value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': value
+      webform_select_other_raw:
+        '#type': webform_select_other
+        '#title': 'Select other (Raw value)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': raw
+      webform_select_other_description:
+        '#type': webform_select_other
+        '#title': 'Select other (Option description)'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value': one
+        '#format': description
   other_elements:
     '#type': details
     '#title': 'Other elements'
@@ -1305,7 +1365,6 @@ elements: |
         '#title': 'Machine name (Raw value)'
         '#default_value': loremipsum
         '#format': raw
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
index d1457dd1e408641143ac2d9f4e05ba194e0d0955..837b78212a6531b8be01112c22339a39f140c0be 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_custom.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,10 +21,10 @@ elements: |
     '#format': custom
     '#format_html': |
       <em>{{ value }}</em>
-  
+      
     '#format_text': |
       /{{ value }}/
-  
+      
     '#default_value': '{textfield_custom}'
   textfield_custom_token:
     '#type': textfield
@@ -33,10 +32,10 @@ elements: |
     '#format': custom
     '#format_html': |
       <em>[webform_submission:values:textfield_custom_token:raw]</em>
-  
+      
     '#format_text': |
       /[webform_submission:values:textfield_custom_token:raw]/
-  
+      
     '#default_value': '{textfield_custom_token}'
   textfield_custom_token_exception:
     '#type': textfield
@@ -44,10 +43,10 @@ elements: |
     '#format': custom
     '#format_html': |
       <em>EXCEPTION[webform_submission:values:textfield_custom_token_exception]</em>
-  
+      
     '#format_text': |
       /EXCEPTION[webform_submission:values:textfield_custom_token_exception]/
-  
+      
     '#default_value': '{textfield_custom_token_exception}'
   textfield_custom_value_multiple:
     '#type': textfield
@@ -56,10 +55,10 @@ elements: |
     '#format': custom
     '#format_html': |
       <em>{{ value }}</em>
-  
+      
     '#format_text': |
       /{{ value }}/
-  
+      
     '#format_items': custom
     '#format_items_html': |
       <table>
@@ -67,12 +66,12 @@ elements: |
         <tr {% if loop.index is divisible by(2) %}style="background-color: #ffc"{% endif %}><td>{{ item }}</td></tr>
       {% endfor %}
       </table>
-  
+      
     '#format_items_text': |
       {% for item in items %}
       ⦿ {{ item }}
       {% endfor %}
-  
+      
     '#default_value':
       - One
       - Two
@@ -93,7 +92,7 @@ elements: |
       item['original:image']: <div style="width: 100px">{{ item['original:image'] }}</div>
       item['original:link']: <div style="width: 100px">{{ item['original:link'] }}</div>
       item['original:modal']: <div style="width: 100px">{{ item['original:modal'] }}</div>
-  
+      
     '#format_text': |
       value: {{ value }}
       item['value']: {{ item['value'] }}
@@ -101,7 +100,7 @@ elements: |
       item['link']: {{ item['link'] }}
       item['id']: {{ item['id'] }}
       item['url']: {{ item['url'] }}
-  
+      
   address_custom:
     '#type': webform_address
     '#title': address_custom
@@ -113,7 +112,7 @@ elements: |
       element.state_province: {{ element.state_province }}<br/>
       element.postal_code: {{ element.postal_code }}<br/>
       element.country: {{ element.country }}<br/>
-  
+      
     '#format_text': |
       element.address: {{ element.address }}
       element.address_2: {{ element.address_2 }}
@@ -121,7 +120,7 @@ elements: |
       element.state_province: {{ element.state_province }}
       element.postal_code: {{ element.postal_code }}
       element.country: {{ element.country }}
-  
+      
     '#state_province__type': webform_select_other
     '#country__type': webform_select_other
     '#default_value':
@@ -156,7 +155,7 @@ elements: |
       element.state_province: {{ element.state_province }}<br/>
       element.postal_code: {{ element.postal_code }}<br/>
       element.country: {{ element.country }}<br/>
-  
+      
     '#format_text': |
       element.address: {{ element.address }}
       element.address_2: {{ element.address_2 }}
@@ -164,7 +163,7 @@ elements: |
       element.state_province: {{ element.state_province }}
       element.postal_code: {{ element.postal_code }}
       element.country: {{ element.country }}
-  
+      
     '#format_items': custom
     '#format_items_html': |
       {% for item in items %}
@@ -172,14 +171,14 @@ elements: |
       {{ item }}
       <div>*****</div>
       {% endfor %}
-  
+      
     '#format_items_text': |
       {% for item in items %}
       *****
       {{ item }}
       *****
       {% endfor %}
-  
+      
     '#state_province__type': webform_select_other
     '#country__type': webform_select_other
   fieldset_custom:
@@ -188,10 +187,10 @@ elements: |
     '#format': custom
     '#format_html': |
       {{ item.details }}
-  
+      
     '#format_text': |
       {{ item.details }}
-  
+      
     fieldset_custom_textfield:
       '#type': textfield
       '#title': fieldset_custom_textfield
@@ -204,17 +203,16 @@ elements: |
       <h3>fieldset_custom_children</h3>
       <hr />
       {{ children }}
-  
+      
     '#format_text': |
       fieldset_custom_children
       ------------------------
       {{ children }}
-  
+      
     fieldset_custom_children_textfield:
       '#type': textfield
       '#title': fieldset_custom_children_textfield
       '#default_value': '{fieldset_custom_children_textfield}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
index 7a2b04742f1f76da0533c11915f66dd42795d276..f53ea0bec732e69734607da6ce3db448de379074 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -221,6 +220,44 @@ elements: |
           - test@test.com
           - random@random.com
         '#format_items': ul
+    webform_height:
+      '#type': details
+      '#title': 'Height (feet/inches)'
+      webform_height_comma:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Comma)'
+        '#multiple': true
+        '#default_value':
+          - 36
+        '#format_items': comma
+      webform_height_semicolon:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Semicolon)'
+        '#multiple': true
+        '#default_value':
+          - 36
+        '#format_items': semicolon
+      webform_height_and:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (And)'
+        '#multiple': true
+        '#default_value':
+          - 36
+        '#format_items': and
+      webform_height_ol:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Ordered list)'
+        '#multiple': true
+        '#default_value':
+          - 36
+        '#format_items': ol
+      webform_height_ul:
+        '#type': webform_height
+        '#title': 'Height (feet/inches) (Unordered list)'
+        '#multiple': true
+        '#default_value':
+          - 36
+        '#format_items': ul
     number:
       '#type': details
       '#title': Number
@@ -390,6 +427,7 @@ elements: |
           two: Two
           three: Three
         '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
@@ -403,6 +441,7 @@ elements: |
           two: Two
           three: Three
         '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
@@ -416,6 +455,7 @@ elements: |
           two: Two
           three: Three
         '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
@@ -429,6 +469,7 @@ elements: |
           two: Two
           three: Three
         '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
@@ -442,23 +483,40 @@ elements: |
           two: Two
           three: Three
         '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
           - three
         '#format_items': ul
-      checkboxes_checklist:
+      checkboxes_checklist_boxes:
         '#type': checkboxes
-        '#title': 'Checkboxes (Checklist)'
+        '#title': 'Checkboxes (Checklist (☑/☐))'
         '#options':
           one: One
           two: Two
           three: Three
+        '#options_display': side_by_side
+        '#multiple': true
         '#default_value':
           - one
           - two
           - three
         '#format_items': 'checklist:boxes'
+      checkboxes_checklist_crosses:
+        '#type': checkboxes
+        '#title': 'Checkboxes (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     webform_checkboxes_other:
       '#type': details
       '#title': 'Checkboxes other'
@@ -532,6 +590,34 @@ elements: |
           - two
           - three
         '#format_items': ul
+      webform_checkboxes_other_checklist_boxes:
+        '#type': webform_checkboxes_other
+        '#title': 'Checkboxes other (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      webform_checkboxes_other_checklist_crosses:
+        '#type': webform_checkboxes_other
+        '#title': 'Checkboxes other (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#options_display': side_by_side
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     webform_image_select:
       '#type': details
       '#title': 'Image select'
@@ -635,6 +721,46 @@ elements: |
           - Oratione
           - Dixisset
         '#format_items': ul
+      webform_image_select_checklist_boxes:
+        '#type': webform_image_select
+        '#title': 'Image select (Checklist (☑/☐))'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:boxes'
+      webform_image_select_checklist_crosses:
+        '#type': webform_image_select
+        '#title': 'Image select (Checklist (gi))'
+        '#show_label': true
+        '#images':
+          dog_1:
+            text: 'Dog 1'
+            src: 'https://www.placedog.net/80/100'
+          dog_2:
+            text: 'Dog 2'
+            src: 'https://www.placedog.net/100/100'
+          dog_3:
+            text: 'Dog 3'
+            src: 'https://www.placedog.net/120/100'
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:crosses'
       webform_image_select_br:
         '#type': webform_image_select
         '#title': 'Image select (Break)'
@@ -743,6 +869,32 @@ elements: |
           - two
           - three
         '#format_items': ul
+      select_checklist_boxes:
+        '#type': select
+        '#title': 'Select (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      select_checklist_crosses:
+        '#type': select
+        '#title': 'Select (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     webform_select_other:
       '#type': details
       '#title': 'Select other'
@@ -811,6 +963,32 @@ elements: |
           - two
           - three
         '#format_items': ul
+      webform_select_other_checklist_boxes:
+        '#type': webform_select_other
+        '#title': 'Select other (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      webform_select_other_checklist_crosses:
+        '#type': webform_select_other
+        '#title': 'Select other (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     tableselect:
       '#type': details
       '#title': 'Table select'
@@ -879,6 +1057,32 @@ elements: |
           - two
           - three
         '#format_items': ul
+      tableselect_checklist_boxes:
+        '#type': tableselect
+        '#title': 'Table select (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      tableselect_checklist_crosses:
+        '#type': tableselect
+        '#title': 'Table select (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     webform_tableselect_sort:
       '#type': details
       '#title': 'Tableselect sort'
@@ -947,6 +1151,32 @@ elements: |
           - two
           - three
         '#format_items': ul
+      webform_tableselect_sort_checklist_boxes:
+        '#type': webform_tableselect_sort
+        '#title': 'Tableselect sort (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      webform_tableselect_sort_checklist_crosses:
+        '#type': webform_tableselect_sort
+        '#title': 'Tableselect sort (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#multiple': true
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
     webform_table_sort:
       '#type': details
       '#title': 'Table sort'
@@ -1010,6 +1240,30 @@ elements: |
           - two
           - three
         '#format_items': ul
+      webform_table_sort_checklist_boxes:
+        '#type': webform_table_sort
+        '#title': 'Table sort (Checklist (☑/☐))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:boxes'
+      webform_table_sort_checklist_crosses:
+        '#type': webform_table_sort
+        '#title': 'Table sort (Checklist (gi))'
+        '#options':
+          one: One
+          two: Two
+          three: Three
+        '#default_value':
+          - one
+          - two
+          - three
+        '#format_items': 'checklist:crosses'
   date_time_elements:
     '#type': details
     '#title': 'Date/time elements'
@@ -1217,9 +1471,9 @@ elements: |
           include_anonymous: true
         '#multiple': true
         '#default_value':
-          - 8
           - 4
-          - 10
+          - 11
+          - 7
         '#format_items': comma
       entity_autocomplete_semicolon:
         '#type': entity_autocomplete
@@ -1230,9 +1484,9 @@ elements: |
           include_anonymous: true
         '#multiple': true
         '#default_value':
-          - 8
           - 4
-          - 10
+          - 11
+          - 7
         '#format_items': semicolon
       entity_autocomplete_and:
         '#type': entity_autocomplete
@@ -1243,9 +1497,9 @@ elements: |
           include_anonymous: true
         '#multiple': true
         '#default_value':
-          - 8
           - 4
-          - 10
+          - 11
+          - 7
         '#format_items': and
       entity_autocomplete_ol:
         '#type': entity_autocomplete
@@ -1256,9 +1510,9 @@ elements: |
           include_anonymous: true
         '#multiple': true
         '#default_value':
-          - 8
           - 4
-          - 10
+          - 11
+          - 7
         '#format_items': ol
       entity_autocomplete_ul:
         '#type': entity_autocomplete
@@ -1269,9 +1523,9 @@ elements: |
           include_anonymous: true
         '#multiple': true
         '#default_value':
-          - 8
           - 4
-          - 10
+          - 11
+          - 7
         '#format_items': ul
     webform_entity_checkboxes:
       '#type': details
@@ -1351,6 +1605,36 @@ elements: |
         '#default_value':
           - 1
         '#format_items': ul
+      webform_entity_checkboxes_checklist_boxes:
+        '#type': webform_entity_checkboxes
+        '#title': 'Entity checkboxes (Checklist (☑/☐))'
+        '#options_display': side_by_side
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#multiple': true
+        '#default_value':
+          - 1
+        '#format_items': 'checklist:boxes'
+      webform_entity_checkboxes_checklist_crosses:
+        '#type': webform_entity_checkboxes
+        '#title': 'Entity checkboxes (Checklist (gi))'
+        '#options_display': side_by_side
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#multiple': true
+        '#default_value':
+          - 1
+        '#format_items': 'checklist:crosses'
     webform_entity_select:
       '#type': details
       '#title': 'Entity select'
@@ -1424,6 +1708,34 @@ elements: |
         '#default_value':
           - 1
         '#format_items': ul
+      webform_entity_select_checklist_boxes:
+        '#type': webform_entity_select
+        '#title': 'Entity select (Checklist (☑/☐))'
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#multiple': true
+        '#default_value':
+          - 1
+        '#format_items': 'checklist:boxes'
+      webform_entity_select_checklist_crosses:
+        '#type': webform_entity_select
+        '#title': 'Entity select (Checklist (gi))'
+        '#target_type': user
+        '#selection_handler': 'default:user'
+        '#selection_settings':
+          include_anonymous: true
+        '#options':
+          1: Administrator
+          0: Anonymous
+        '#multiple': true
+        '#default_value':
+          - 1
+        '#format_items': 'checklist:crosses'
     webform_term_checkboxes:
       '#type': details
       '#title': 'Term checkboxes'
@@ -1477,6 +1789,26 @@ elements: |
           - Oratione
           - Dixisset
         '#format_items': ul
+      webform_term_checkboxes_checklist_boxes:
+        '#type': webform_term_checkboxes
+        '#title': 'Term checkboxes (Checklist (☑/☐))'
+        '#vocabulary': tags
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:boxes'
+      webform_term_checkboxes_checklist_crosses:
+        '#type': webform_term_checkboxes
+        '#title': 'Term checkboxes (Checklist (gi))'
+        '#vocabulary': tags
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:crosses'
     webform_term_select:
       '#type': details
       '#title': 'Term select'
@@ -1530,6 +1862,26 @@ elements: |
           - Oratione
           - Dixisset
         '#format_items': ul
+      webform_term_select_checklist_boxes:
+        '#type': webform_term_select
+        '#title': 'Term select (Checklist (☑/☐))'
+        '#vocabulary': tags
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:boxes'
+      webform_term_select_checklist_crosses:
+        '#type': webform_term_select
+        '#title': 'Term select (Checklist (gi))'
+        '#vocabulary': tags
+        '#multiple': true
+        '#default_value':
+          - Loremipsum
+          - Oratione
+          - Dixisset
+        '#format_items': 'checklist:crosses'
   file_upload_elements:
     '#type': details
     '#title': 'File upload elements'
@@ -1567,7 +1919,6 @@ elements: |
         '#multiple': true
         '#file_extensions': txt
         '#format_items': ul
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
index f72c8e33c2b5fe9e6f73d464713b9cfcaf3482cc..c50422fa7b5696929a8e2eec90ac01966147b052 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_format_token.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,7 +26,6 @@ elements: |
       - 1
       - 2
       - 3
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
index e5c9be2fa9e6a653ba5cc9678c92408c1915c89e..8a5be1f33520eac69c079eb9050ea5169366bdcc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_height.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -63,18 +62,11 @@ elements: |
     '#feet__min': 3
     '#feet__max': 10
     '#default_value': 120
-  height_select_min_max:
-    '#type': webform_height
-    '#title': height_select_min_max
-    '#height_type': select
-    '#feet__min': 3
-    '#feet__max': 10
-    '#default_value': 120
   height_number_step:
     '#type': webform_height
     '#title': height_number_step
     '#height_type': select
-    '#inches__step': .5
+    '#inches__step': 0.5
     '#default_value': 60.5
   height_number_empty:
     '#type': webform_height
@@ -92,7 +84,6 @@ elements: |
     '#title': height_select_empty_required
     '#height_type': select
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
@@ -275,9 +266,12 @@ handlers:
   debug:
     id: debug
     label: Debug
+    notes: ''
     handler_id: debug
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
index eb266fe5e42aee7acc9b6f696336b9a6c153e49a..a25d185e04216e9c6407c3bfc29416cd8202f990 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -124,16 +123,15 @@ elements: |
     '#title': help_before_details
     '#help': '{This is an example of help}'
     '#help_display': element_before
-    'help_before_details':
+    help_before_details:
       '#markup': '{This is markup}'
   help_after_details:
     '#type': details
     '#title': help_after_details
     '#help': '{This is an example of help}'
     '#help_display': element_after
-    'help_after_details':
+    help_after_details:
       '#markup': '{This is markup}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
index 58a9435068f0c22530700946fcdc3d90f998898d..2b9f77c1ae62abcbab2e4f712226f309e57c49a5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_help_display.yml
@@ -1,4 +1,3 @@
-uuid: 28d4e7be-efdb-4a88-bc0d-16ed5e8a1767
 langcode: en
 status: open
 dependencies:
@@ -292,6 +291,32 @@ elements: |
       '#help_display': element_after
     webform_email_multiple_hr:
       '#type': webform_horizontal_rule
+    webform_height_help:
+      '#markup': 'Height (feet/inches) (webform_height)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_height_title_before:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (title_before)'
+      '#help': 'This is help.'
+      '#help_display': title_before
+    webform_height_title_after:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (title_after)'
+      '#help': 'This is help.'
+      '#help_display': title_after
+    webform_height_element_before:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (element_before)'
+      '#help': 'This is help.'
+      '#help_display': element_before
+    webform_height_element_after:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (element_after)'
+      '#help': 'This is help.'
+      '#help_display': element_after
+    webform_height_hr:
+      '#type': webform_horizontal_rule
     webform_mapping_help:
       '#markup': 'Mapping (webform_mapping)'
       '#prefix': '<h3>'
@@ -494,6 +519,66 @@ elements: |
       '#help_display': element_after
     webform_rating_hr:
       '#type': webform_horizontal_rule
+    webform_same_help:
+      '#markup': 'Billing address is the same as the shipping address (webform_same)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_same_title_before:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address (title_before)'
+      '#help': 'This is help.'
+      '#help_display': title_before
+    webform_same_title_after:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address (title_after)'
+      '#help': 'This is help.'
+      '#help_display': title_after
+    webform_same_element_before:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address (element_before)'
+      '#help': 'This is help.'
+      '#help_display': element_before
+    webform_same_element_after:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address (element_after)'
+      '#help': 'This is help.'
+      '#help_display': element_after
+    webform_same_hr:
+      '#type': webform_horizontal_rule
+    webform_scale_help:
+      '#markup': 'Scale (webform_scale)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_scale_title_before:
+      '#type': webform_scale
+      '#title': 'Scale (title_before)'
+      '#min': 1
+      '#max': 5
+      '#help': 'This is help.'
+      '#help_display': title_before
+    webform_scale_title_after:
+      '#type': webform_scale
+      '#title': 'Scale (title_after)'
+      '#min': 1
+      '#max': 5
+      '#help': 'This is help.'
+      '#help_display': title_after
+    webform_scale_element_before:
+      '#type': webform_scale
+      '#title': 'Scale (element_before)'
+      '#min': 1
+      '#max': 5
+      '#help': 'This is help.'
+      '#help_display': element_before
+    webform_scale_element_after:
+      '#type': webform_scale
+      '#title': 'Scale (element_after)'
+      '#min': 1
+      '#max': 5
+      '#help': 'This is help.'
+      '#help_display': element_after
+    webform_scale_hr:
+      '#type': webform_horizontal_rule
     search_help:
       '#markup': 'Search (search)'
       '#prefix': '<h3>'
@@ -644,32 +729,6 @@ elements: |
       '#help_display': element_after
     text_format_hr:
       '#type': webform_horizontal_rule
-    webform_toggle_help:
-      '#markup': 'Toggle (webform_toggle)'
-      '#prefix': '<h3>'
-      '#suffix': '</h3>'
-    webform_toggle_title_before:
-      '#type': webform_toggle
-      '#title': 'Toggle (title_before)'
-      '#help': 'This is help.'
-      '#help_display': title_before
-    webform_toggle_title_after:
-      '#type': webform_toggle
-      '#title': 'Toggle (title_after)'
-      '#help': 'This is help.'
-      '#help_display': title_after
-    webform_toggle_element_before:
-      '#type': webform_toggle
-      '#title': 'Toggle (element_before)'
-      '#help': 'This is help.'
-      '#help_display': element_before
-    webform_toggle_element_after:
-      '#type': webform_toggle
-      '#title': 'Toggle (element_after)'
-      '#help': 'This is help.'
-      '#help_display': element_after
-    webform_toggle_hr:
-      '#type': webform_horizontal_rule
     url_help:
       '#markup': 'URL (url)'
       '#prefix': '<h3>'
@@ -838,90 +897,6 @@ elements: |
     '#type': details
     '#title': 'Options elements'
     '#open': true
-    webform_buttons_help:
-      '#markup': 'Buttons (webform_buttons)'
-      '#prefix': '<h3>'
-      '#suffix': '</h3>'
-    webform_buttons_title_before:
-      '#type': webform_buttons
-      '#title': 'Buttons (title_before)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': title_before
-    webform_buttons_title_after:
-      '#type': webform_buttons
-      '#title': 'Buttons (title_after)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': title_after
-    webform_buttons_element_before:
-      '#type': webform_buttons
-      '#title': 'Buttons (element_before)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': element_before
-    webform_buttons_element_after:
-      '#type': webform_buttons
-      '#title': 'Buttons (element_after)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': element_after
-    webform_buttons_hr:
-      '#type': webform_horizontal_rule
-    webform_buttons_other_help:
-      '#markup': 'Buttons other (webform_buttons_other)'
-      '#prefix': '<h3>'
-      '#suffix': '</h3>'
-    webform_buttons_other_title_before:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other (title_before)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': title_before
-    webform_buttons_other_title_after:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other (title_after)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': title_after
-    webform_buttons_other_element_before:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other (element_before)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': element_before
-    webform_buttons_other_element_after:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other (element_after)'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-      '#help': 'This is help.'
-      '#help_display': element_after
-    webform_buttons_other_hr:
-      '#type': webform_horizontal_rule
     checkboxes_help:
       '#markup': 'Checkboxes (checkboxes)'
       '#prefix': '<h3>'
@@ -1330,6 +1305,132 @@ elements: |
       '#help_display': element_after
     webform_select_other_hr:
       '#type': webform_horizontal_rule
+    tableselect_help:
+      '#markup': 'Table select (tableselect)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    tableselect_title_before:
+      '#type': tableselect
+      '#title': 'Table select (title_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_before
+    tableselect_title_after:
+      '#type': tableselect
+      '#title': 'Table select (title_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_after
+    tableselect_element_before:
+      '#type': tableselect
+      '#title': 'Table select (element_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_before
+    tableselect_element_after:
+      '#type': tableselect
+      '#title': 'Table select (element_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_after
+    tableselect_hr:
+      '#type': webform_horizontal_rule
+    webform_tableselect_sort_help:
+      '#markup': 'Tableselect sort (webform_tableselect_sort)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_tableselect_sort_title_before:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (title_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_before
+    webform_tableselect_sort_title_after:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (title_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_after
+    webform_tableselect_sort_element_before:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (element_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_before
+    webform_tableselect_sort_element_after:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (element_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_after
+    webform_tableselect_sort_hr:
+      '#type': webform_horizontal_rule
+    webform_table_sort_help:
+      '#markup': 'Table sort (webform_table_sort)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_table_sort_title_before:
+      '#type': webform_table_sort
+      '#title': 'Table sort (title_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_before
+    webform_table_sort_title_after:
+      '#type': webform_table_sort
+      '#title': 'Table sort (title_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': title_after
+    webform_table_sort_element_before:
+      '#type': webform_table_sort
+      '#title': 'Table sort (element_before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_before
+    webform_table_sort_element_after:
+      '#type': webform_table_sort
+      '#title': 'Table sort (element_after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#help': 'This is help.'
+      '#help_display': element_after
+    webform_table_sort_hr:
+      '#type': webform_horizontal_rule
   date_time_elements:
     '#type': details
     '#title': 'Date/time elements'
@@ -1574,6 +1675,80 @@ elements: |
       '#help_display': element_after
     webform_section_hr:
       '#type': webform_horizontal_rule
+    webform_table_help:
+      '#markup': webform_table
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_table_title_before:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+      '#help': 'This is help. (title_before)'
+      '#help_display': title_before
+    webform_table_title_after:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+      '#help': 'This is help. (title_after)'
+      '#help_display': title_after
+    webform_table_element_before:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+      '#help': 'This is help. (element_before)'
+      '#help_display': element_before
+    webform_table_element_after:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+      '#help': 'This is help. (element_after)'
+      '#help_display': element_after
+    webform_table_hr:
+      '#type': webform_horizontal_rule
   entity_reference_elements:
     '#type': details
     '#title': 'Entity reference elements'
@@ -1910,7 +2085,6 @@ elements: |
       '#help_display': element_after
     machine_name_hr:
       '#type': webform_horizontal_rule
-
 css: ''
 javascript: ''
 settings:
@@ -2091,5 +2265,3 @@ access:
     permissions: {  }
 handlers: {  }
 variants: {  }
-_core:
-  default_config_hash: n-o0dubYyFAYHV9OGOrntyVrFt0L6owQM3jhd_cjuIc
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
index 0d4ab2f80a4a9663dc3c5e244d7ffb7dda54a5bc..b2a81f0a6fa155d58a349612390d85beb5fc3b7d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_horizontal_rule.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -102,7 +101,6 @@ elements: |
     '#attributes':
       class:
         - webform-horizontal-rule--glyph
-  
 css: ''
 javascript: ''
 settings:
@@ -290,5 +288,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
index 345b98b6541e327e4195f9daa2d12caa70e43c2d..c17f49bb434a84767fffe2e743c9eafb1ff3ca2c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_editor.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -42,7 +41,6 @@ elements: |
     '#required': true
     '#default_value': 'Hello <b>World!!!</b>'
     '#format': false
-  
 css: ''
 javascript: ''
 settings:
@@ -230,5 +228,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
index d9bda18c3218a1cd469d3a6760d50d69cf39aa66..ee840de175e4f443ff57d373e44d0755d6bd2a39 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_escape.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -57,6 +56,8 @@ elements: |
       '#type': captcha
       '#title': 'CAPTCHA | <script>alert(''This markup is not escaped properly!!!'') </script>'
       '#captcha_admin_mode': true
+      '#captcha_info':
+        form_id: ''
       '#captcha_type': image_captcha/Image
     webform_codemirror:
       '#type': webform_codemirror
@@ -78,6 +79,13 @@ elements: |
     webform_email_multiple:
       '#type': webform_email_multiple
       '#title': 'Email multiple | <script>alert(''This markup is not escaped properly!!!'') </script>'
+    webform_height:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) | <script>alert(''This markup is not escaped properly!!!'') </script>'
+    webform_height_multiple:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) multiple | <script>alert(''This markup is not escaped properly!!!'') </script>'
+      '#multiple': true
     number:
       '#type': number
       '#title': 'Number | <script>alert(''This markup is not escaped properly!!!'') </script>'
@@ -107,6 +115,14 @@ elements: |
     webform_rating:
       '#type': webform_rating
       '#title': 'Rating | <script>alert(''This markup is not escaped properly!!!'') </script>'
+    webform_same:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address | <script>alert(''This markup is not escaped properly!!!'') </script>'
+    webform_scale:
+      '#type': webform_scale
+      '#title': 'Scale | <script>alert(''This markup is not escaped properly!!!'') </script>'
+      '#min': 1
+      '#max': 5
     search:
       '#type': search
       '#title': 'Search | <script>alert(''This markup is not escaped properly!!!'') </script>'
@@ -165,11 +181,15 @@ elements: |
       '#message_type': warning
       '#message_message': 'This is a <strong>warning</strong> message.'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/77245">Issue #77245: A place for JavaScript status messages</a>'
+    webform_more:
+      '#type': webform_more
+      '#title': 'More | <script>alert(''This markup is not escaped properly!!!'') </script>'
+      '#more': 'This is more content'
   file_attachment_elements:
     '#type': details
     '#title': 'File attachment elements | <script>alert(''This markup is not escaped properly!!!'') </script>'
     '#open': true
-    'webform_entity_print_attachment:pdf':
+    webform_entity_print_attachment_pdf:
       '#type': webform_entity_print_attachment
       '#title': 'Attachment PDF | <script>alert(''This markup is not escaped properly!!!'') </script>'
     webform_attachment_token:
@@ -225,20 +245,6 @@ elements: |
     '#type': details
     '#title': 'Options elements | <script>alert(''This markup is not escaped properly!!!'') </script>'
     '#open': true
-    webform_buttons:
-      '#type': webform_buttons
-      '#title': 'Buttons | <script>alert(''This markup is not escaped properly!!!'') </script>'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-    webform_buttons_other:
-      '#type': webform_buttons_other
-      '#title': 'Buttons other | <script>alert(''This markup is not escaped properly!!!'') </script>'
-      '#options':
-        one: One
-        two: Two
-        three: Three
     checkboxes:
       '#type': checkboxes
       '#title': 'Checkboxes | <script>alert(''This markup is not escaped properly!!!'') </script>'
@@ -392,6 +398,21 @@ elements: |
     webform_section:
       '#type': webform_section
       '#title': 'Section | <script>alert(''This markup is not escaped properly!!!'') </script>'
+    webform_table:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
   date_time_elements:
     '#type': details
     '#title': 'Date/time elements | <script>alert(''This markup is not escaped properly!!!'') </script>'
@@ -525,7 +546,6 @@ elements: |
     table:
       '#type': table
       '#title': 'Table | <script>alert(''This markup is not escaped properly!!!'') </script>'
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
index 48252041cd4fa76c9e94830b7481e0ac5e5fe0d6..34fd12ed83bcf02d1a919646f51263107bd1b851 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_html_markup.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -57,6 +56,8 @@ elements: |
       '#type': captcha
       '#title': '<u>CAPTCHA</u>'
       '#captcha_admin_mode': true
+      '#captcha_info':
+        form_id: ''
       '#captcha_type': image_captcha/Image
     webform_codemirror:
       '#type': webform_codemirror
@@ -78,6 +79,13 @@ elements: |
     webform_email_multiple:
       '#type': webform_email_multiple
       '#title': '<u>Email multiple</u>'
+    webform_height:
+      '#type': webform_height
+      '#title': '<u>Height (feet/inches)</u>'
+    webform_height_multiple:
+      '#type': webform_height
+      '#title': '<u>Height (feet/inches) multiple</u>'
+      '#multiple': true
     number:
       '#type': number
       '#title': '<u>Number</u>'
@@ -107,6 +115,14 @@ elements: |
     webform_rating:
       '#type': webform_rating
       '#title': '<u>Rating</u>'
+    webform_same:
+      '#type': webform_same
+      '#title': '<u>Billing address is the same as the shipping address</u>'
+    webform_scale:
+      '#type': webform_scale
+      '#title': '<u>Scale</u>'
+      '#min': 1
+      '#max': 5
     search:
       '#type': search
       '#title': '<u>Search</u>'
@@ -165,11 +181,15 @@ elements: |
       '#message_type': warning
       '#message_message': 'This is a <strong>warning</strong> message.'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/77245">Issue #77245: A place for JavaScript status messages</a>'
+    webform_more:
+      '#type': webform_more
+      '#title': '<u>More</u>'
+      '#more': 'This is more content'
   file_attachment_elements:
     '#type': details
     '#title': '<u>File attachment elements</u>'
     '#open': true
-    'webform_entity_print_attachment:pdf':
+    webform_entity_print_attachment_pdf:
       '#type': webform_entity_print_attachment
       '#title': '<u>Attachment PDF</u>'
     webform_attachment_token:
@@ -225,20 +245,6 @@ elements: |
     '#type': details
     '#title': '<u>Options elements</u>'
     '#open': true
-    webform_buttons:
-      '#type': webform_buttons
-      '#title': '<u>Buttons</u>'
-      '#options':
-        one: One
-        two: Two
-        three: Three
-    webform_buttons_other:
-      '#type': webform_buttons_other
-      '#title': '<u>Buttons other</u>'
-      '#options':
-        one: One
-        two: Two
-        three: Three
     checkboxes:
       '#type': checkboxes
       '#title': '<u>Checkboxes</u>'
@@ -392,6 +398,24 @@ elements: |
     webform_section:
       '#type': webform_section
       '#title': '<u>Section</u>'
+    webform_table:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+    webform_table_row:
+      '#type': webform_table_row
+      '#title': '<u>Table row</u>'
   date_time_elements:
     '#type': details
     '#title': '<u>Date/time elements</u>'
@@ -525,7 +549,6 @@ elements: |
     table:
       '#type': table
       '#title': '<u>Table</u>'
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
index 55ed4f1c8374b24345173f9effb563eadbd5f03a..825493dd640bb9a234650066f1b64a57ddd8bf05 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_ignored_properties.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,29 +19,29 @@ elements: |
     '#type': textfield
     '#title': textfield
     '#tree': '#tree'
-    '#array_parents': { }
+    '#array_parents': {  }
     '#weight': 0
     '#after_build':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#element_validate':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#post_render':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#pre_render':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#process':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#submit':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#validate':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#value_callback':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
   actions:
     '#type': actions
     '#title': actions
     '#pre_render':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
   select_other:
     '#title': select_other
     '#type': webform_select_other
@@ -51,16 +50,16 @@ elements: |
       Two: Two
       Three: Three
     '#other__element_validate':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#other__pre_render':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
   name:
     '#title': name
     '#type': webform_name
     '#first__element_validate':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
     '#first__pre_render':
-      - 'webform_test_ignored_element_callback'
+      - webform_test_ignored_element_callback
   custom_composite:
     '#type': webform_custom_composite
     '#title': custom_composite
@@ -69,8 +68,7 @@ elements: |
         '#type': textfield
         '#title': custom_composite_textfield
         '#pre_render':
-          - 'webform_test_ignored_element_callback'
-  
+          - webform_test_ignored_element_callback
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
index 25966561cf6b4f5118ec5e4db2a096fd8a719434..644807fc16c0a601e4c5bc001373834d3b3f72e0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
     '#type': webform_image_file
     '#title': 'webform_image_file_advanced (max: 20x20)'
     '#max_resolution': 20x20
-  
 css: ''
 javascript: ''
 settings:
@@ -211,5 +209,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
index 8d40b88d135167ba1c7e88a003b55c990d225f83..6e32b3ffa312d2b65c2e35b712df536495519101 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_file_attach.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
     '#title': webform_image_file_attachment
     '#file_extensions': gif
     '#attachment_image_style': thumbnail
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
index 4380e88bc7a474be787e2562b59ad1bc3af60c9e..340a3fa9419cef1c435be0a01e0effbd69047350 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_image_resolution.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,7 +25,6 @@ elements: |
     '#height_title': '{height_title}'
     '#width_title': '{width_title}'
     '#default_value': 300x400
-  
 css: ''
 javascript: ''
 settings:
@@ -214,5 +212,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
index ab2776fc6dff958fe0e47667487d93043db76821..25ca4e127d014983de63bbbdc66cba950bb117fb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_input_mask.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +21,18 @@ elements: |
     '#input_mask': '''alias'': ''currency'''
     '#default_value': '$ 1.00'
     '#required': true
+  currency_negative:
+    '#type': textfield
+    '#title': currency_negative
+    '#input_mask': '''alias'': ''currency_negative'''
+    '#default_value': '-$ 1.00'
+    '#required': true
+  currency_positive_negative:
+    '#type': textfield
+    '#title': currency_positive_negative
+    '#input_mask': '''alias'': ''currency_positive_negative'''
+    '#default_value': '$ 1.00'
+    '#required': true
   datetime:
     '#type': textfield
     '#title': datetime
@@ -82,7 +93,6 @@ elements: |
     '#type': textfield
     '#title': module
     '#input_mask': '999'
-  
 css: ''
 javascript: ''
 settings:
@@ -270,5 +280,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
index 8441fc48e5e899904897a726d42b42c2e033394f..dfad27b2e3943dfc9c54917dba77c9007cac3678 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_invalid.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
index 85a25b30f074f474c1cb67e5a87a17118c05656f..f14085641cc6939672a7de48ef97a21a3619ee2a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_likert.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -80,7 +79,24 @@ elements: |
       - 'Option 1'
       - 'Option 2'
       - 'Option 3'
-
+  likert_trigger_required:
+    '#type': checkbox
+    '#title': likert_trigger_required
+  likert_states_required:
+    '#type': webform_likert
+    '#title': likert_states_required
+    '#states':
+      required:
+        ':input[name="likert_trigger_required"]':
+          checked: true
+    '#questions':
+      q1: 'Question 1'
+      q2: 'Question 2'
+      q3: 'Question 3'
+    '#answers':
+      1: 'Option 1'
+      2: 'Option 2'
+      3: 'Option 3'
 css: ''
 javascript: ''
 settings:
@@ -268,5 +284,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
index 4464f52258fd08260191dcab20e51e3e24daa796..6a2810df5e3342dc4cecea4436dab677f09e9e47 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_loc_places.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -70,7 +69,6 @@ elements: |
     '#geolocation': true
     '#hidden': true
     '#geocomplete': true
-  
 css: ''
 javascript: ''
 settings:
@@ -258,5 +256,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
index 72c67d43fb8dfd25a433c7ebaaa1e83cb5f7b104..836ac255925239b6295357f996369d417967e546 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -69,7 +68,6 @@ elements: |
     '#type': managed_file
     '#title': managed_file_extensions
     '#file_extensions': 'txt, text'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
index d070e132017eb9d84a2cce8fd49cf81a6590c090..5bc2a4cf28b0a829745f5bdd5de0440fcad77b2b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_dis.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': managed_file
     '#title': managed_file
     '#file_extensions': txt
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
index e7b7ab8760a3c8652c3d8c75d7aadcc4c0e401d7..c3efc01b42321969c08f04391851d3dd1aeed8b9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_help.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -65,7 +64,6 @@ elements: |
       '#type': managed_file
       '#title': managed_file_help_none
       '#file_help': none
-  
 css: ''
 javascript: ''
 settings:
@@ -253,5 +251,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
index a4fe1747caf75aa95d448a02e3884eb036321b87..9a2404ab39a45d3b19e9aaa798a564c70cfe5974 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_limit.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -35,7 +34,6 @@ elements: |
       managed_file:
         '#type': managed_file
         '#title': managed_file
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
index 5c5b72a5b5fc095d3e31389329b988cbdac2eff5..d12f631b7820664865525b9336e4dc2d4627599f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_name.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,8 +30,7 @@ elements: |
   file_truncate:
     '#type': managed_file
     '#title': 'File truncate (255)'
-    '#file_name': 'file_truncate_123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
-  
+    '#file_name': file_truncate_123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
 css: ''
 javascript: ''
 settings:
@@ -220,5 +218,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
index 186308d928838d0f666dcd8941cc46f6acd7b4fb..127947c63df951ba261b28e70138aaf2cf75c69a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_managed_file_prev.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,7 +59,6 @@ elements: |
     '#file_preview': url
     '#file_extensions': txt
     '#multiple': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
index 8128cdc13541b64295830d7dfd98cf602cd92bda..1abaad0d2dde75dc4322f2897e94df9b81337d79 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_mapping.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -131,7 +130,6 @@ elements: |
         two: Two
         three: Three
       '#destination__type': webform_email_multiple
-  
 css: ''
 javascript: ''
 settings:
@@ -319,5 +317,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
index 5e2c564a6f0fb3030fefa63a736162b2cf1beb84..b3e3d8c7981e632fc9ca99dbddb398c121ed6767 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_markup.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,6 @@ elements: |
     '#type': webform_markup
     '#markup': '<p>Alter this markup.</p>'
     '#display_on': both
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
index 6ef02c860cde54d6f659943bba975887dce08f85..c76a7536e3c3222c52627375cbfcf83105719695 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_media_file.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -72,7 +71,6 @@ elements: |
       '#type': webform_video_file
       '#title': 'video_file (mp4)'
       '#file_extensions': mp4
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
index 9965637d2b738205abcc06e6415499699ea8ca52..55d59d3c59c0b735f3c75d2bd738dfd6d8493e3e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_message.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -92,7 +91,6 @@ elements: |
       '#message_close': true
       '#message_id': webform_test_message_custom
       '#message_storage': custom
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
index de915855a9593284ef92988251fff2fe9105b543..48d61b450338ae27d542ee93586b2c34b1f2eb02 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_more.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -65,7 +64,6 @@ elements: |
     '#more': '{This is an example of more}'
     '#description': '{This is a description}'
     '#description_display': tooltip
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
index 06b4e201a0bbf68bdaa1071e2d6edb92b263efaf..76a1ce791368472fa65bb6e1f26bc1bd6ec4f303 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -279,7 +278,6 @@ elements: |
         '#attributes':
           class:
             - custom-element
-  
 css: ''
 javascript: ''
 settings:
@@ -467,5 +465,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
index cc9f5dd90149c490cf024250a0dedb30f3d85251..6154d75164c90684f502a78bdfb1bbb7b545d52c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_date.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,7 +39,6 @@ elements: |
       '#type': datelist
       '#title': datelist_basic
       '#multiple': true
-  
 css: ''
 javascript: ''
 settings:
@@ -228,5 +226,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
index c60b51a6a86b07080dda8c1349eaec889f4e1e21..c4618176ee60498c15d342e658e8f2d725aadaa1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_property.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -51,7 +50,6 @@ elements: |
     '#title': webform_element_multiple_custom_access
     '#default_value': 5
     '#access': false
-  
 css: ''
 javascript: ''
 settings:
@@ -239,5 +237,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
index 6bfb6b107ebba3dac71eecba22cc0403a0f8625b..475d69d4c352badc2034df9e57c206cf0fd7a34c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_text.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -83,7 +82,6 @@ elements: |
       '#type': number
       '#title': number_basic
       '#multiple': true
-  
 css: ''
 javascript: ''
 settings:
@@ -271,5 +269,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
index e219d54fd5c043dd359b0ca492583b701dc15929..37d90b9db731c3f36d07fb6c2251056c4a641cf9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_options.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -75,8 +74,7 @@ elements: |
       '#type': webform_element_options
       '#title': webform_element_options_custom_type_multiple
       '#custom__type': webform_multiple
-      '#default_value': { }
-  
+      '#default_value': {  }
 css: ''
 javascript: ''
 settings:
@@ -264,5 +262,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
index 565f9e0c6a93518fc9ce46c143a7eecd5e6e1fed..990a1764bbff64c54e757d356c921193c418b84a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_other.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -157,7 +156,6 @@ elements: |
         Two: Two
         Three: Three
       '#wrapper_type': container
-
 css: ''
 javascript: ''
 settings:
@@ -345,5 +343,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
index db2cdba3597e8cbfffd1dc0bf85c90ddf7961067..9174fe5c2bdc65bd8115bf32e9f8379f00e49cfb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_prepopulate.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -48,7 +47,6 @@ elements: |
       '#type': managed_file
       '#title': managed_file_prepopulate_02
       '#prepopulate': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
index 62999eafd457fe67cb37ebaa16215164d7aa32bc..1e3a8115d0d009b5f7dee144dbbff7cd3fec75a7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_private.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -24,7 +23,6 @@ elements: |
       '#type': textfield
       '#title': private
       '#private': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
index 013d47c11171633836057639d3fca44154c354ab..0620a0a9beb382704ae3771d6c346bc1ea0230f7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_radios.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -118,8 +117,8 @@ elements: |
       '#options_display': buttons_horizontal
       '#options_description_display': description
       '#options':
-        one: 'One'
-        two: 'Two'
+        one: One
+        two: Two
         three: 'Three -- This is a description'
     radios_buttons_vertical:
       '#type': radios
@@ -154,7 +153,7 @@ elements: |
       '#type': radios
       '#title': radios_buttons_wrapping
       '#options':
-        one: 'OneOneOneOneOneOneOne'
+        one: OneOneOneOneOneOneOne
         two: Two
         three: Three
         four: Four
@@ -176,17 +175,17 @@ elements: |
       '#options__properties':
         two:
           '#wrapper_attributes':
-            'data-custom': 'custom wrapper data'
+            data-custom: 'custom wrapper data'
             style: 'border: red 1px solid'
             class:
               - one-custom-wrapper-class
           '#label_attributes':
-            'data-custom': 'custom label data'
+            data-custom: 'custom label data'
             style: 'border: blue 1px solid'
             class:
               - one-custom-label-class
           '#attributes':
-            'data-custom': 'custom input data'
+            data-custom: 'custom input data'
             style: 'border: yellow 1px solid'
             class:
               - one-custom-class
@@ -212,11 +211,11 @@ elements: |
           '#disabled': true
     radios_other_options_properties:
       '#type': webform_radios_other
-      '#title':   radios_other_options_properties
+      '#title': radios_other_options_properties
       '#options':
-        one: 'One'
-        two: 'Two'
-        three: 'Three'
+        one: One
+        two: Two
+        three: Three
       '#options__properties':
         one:
           '#disabled': true
@@ -224,7 +223,20 @@ elements: |
           '#disabled': true
         three:
           '#disabled': true
-  
+    radios_options_grouped:
+      '#type': radios
+      '#title': radios_options_properties
+      '#options_description_display': description
+      '#options':
+        one: 'One -- This is a description'
+        two: 'Two -- This is a description'
+        three: 'Three -- This is a description'
+        four: 'Four -- This is a description'
+      '#options__properties':
+        one:
+          '#prefix': '<div><strong>Group 1</strong></div>'
+        three:
+          '#prefix': '<div><strong>Group 2</strong></div>'
 css: ''
 javascript: ''
 settings:
@@ -412,5 +424,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
index 321f6c62dabffa0480b178ec427abf666235f2b8..09f989b4182501ce3bb89fa2701a73267a1a6611 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_range.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -71,7 +70,6 @@ elements: |
     '#output': right
     '#output__field_prefix': $
     '#output__field_suffix': '.00'
-  
 css: ''
 javascript: ''
 settings:
@@ -259,5 +257,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
index 4c5cfafb7c611c57956df1cb0a9c488eeb023471..f45be46e50333f037f2e5c885a5eb6b80a3fe0cb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_rating.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,6 @@ elements: |
       '#type': webform_rating
       '#title': rating_required
       '#required': true
-  
 css: ''
 javascript: ''
 settings:
@@ -222,5 +220,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
index 7a48045ac81540011c6f446d62195737fc82379e..fe5c15852c56bd353dd881124071c870b2a1ffd7 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_readonly.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -24,7 +23,6 @@ elements: |
     '#type': textarea
     '#title': textarea
     '#readonly': true
-  
 css: ''
 javascript: ''
 settings:
@@ -212,5 +210,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
index fd54d813fadae7078e3a64454d457caed7571368..fab80d87a22049f5feae6389f335771e07c117e5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_same.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,7 +59,7 @@ elements: |
       '#title': '''webform_name_destination'' same as ''webform_name_source'''
       '#source': webform_name_source
       '#destination': webform_name_destination
-      '#destination_state': 'visible-slide'
+      '#destination_state': visible-slide
       '#default_value': true
     webform_name_destination:
       '#type': webform_name
@@ -89,7 +88,6 @@ elements: |
       '#title': textfield_multiple_destination
       '#multiple': true
       '#required': true
-  
 css: ''
 javascript: ''
 settings:
@@ -277,5 +275,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
index 04a92d535f75afb0efab8a63f54a5d1048b009a6..1e0322b2e8a7e5c38a0fddf565df3800f6cedc90 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_scale.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +18,10 @@ elements: |
   scale:
     '#type': webform_scale
     '#title': scale
+  scale_required:
+    '#type': webform_scale
+    '#title': scale_required
+    '#required': true
   scale_text:
     '#type': webform_scale
     '#title': scale_text
@@ -56,7 +59,6 @@ elements: |
     '#scale_type': flexbox
     '#min_text': '1 = disagree'
     '#max_text': 'agree = 5'
-  
 css: ''
 javascript: ''
 settings:
@@ -244,5 +246,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
index 508469ed2668f342cf53ae2ace85013d6f23a2f8..c61662b6c541c625c05fcecde8cfc3de5c1ba7f8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_section.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -35,7 +34,34 @@ elements: |
     '#title_tag': h5
     '#title_attributes':
       style: 'color: red'
-  
+  webform_section_description_display_default:
+    '#type': webform_section
+    '#title': webform_section_description_display_default
+    '#description': 'Display default description.'
+    webform_section_description_display_default_textfield:
+      '#type': textfield
+      '#title': webform_section_description_display_default_textfield
+  webform_section_description_display_before:
+    '#type': webform_section
+    '#title': webform_section_description_display_before
+    '#description': 'Display before description.'
+    '#description_display': before
+    webform_section_description_display_before_textfield:
+      '#type': textfield
+      '#title': webform_section_description_display_before_textfield
+  webform_section_description_display_after:
+    '#type': webform_section
+    '#title': webform_section_description_display_after
+    '#description': 'Display after description.'
+    '#description_display': after
+    webform_section_description_display_after_textfield:
+      '#type': textfield
+      '#title': webform_section_description_display_after_textfield
+  webform_section_description_display_invisible:
+    '#type': webform_section
+    '#title': webform_section_description_display_invisible
+    '#description': 'Display invisible description.'
+    '#description_display': invisible
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
index 8183dda8c6ada5e5fdb24718c350156755559251..079874db39c05fbaa0278176c1d7a2a98988c696 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_select.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -69,8 +68,7 @@ elements: |
         four: Four
         five: Five
       '#attributes':
-        'data-webform-select-options-disabled': 'one,two,four,five'
-  
+        data-webform-select-options-disabled: 'one,two,four,five'
   select_select2_examples:
     '#type': details
     '#title': 'Select select2'
@@ -373,7 +371,6 @@ elements: |
         three: Three
         four: Four
         five: Five
-  
 css: ''
 javascript: ''
 settings:
@@ -561,5 +558,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
index 79db46a9494aba2cf2b78731ca317eed87f57698..8079404a844df7c76d972de85faf55282a163ea8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_signature.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -42,7 +41,6 @@ elements: |
     '#type': webform_signature
     '#title': signature_readonly
     '#readonly': true
-  
 css: ''
 javascript: ''
 settings:
@@ -230,5 +228,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
index c364553d0501f3116ea70a1f765bce7abae438f3..04e6f941dcd5ab9e86a3476362fc4e51c6f5063a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_states.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -124,7 +123,6 @@ elements: |
         custom_selector:
           value:
             pattern: '[a-z0-9]+'
-  
 css: ''
 javascript: ''
 settings:
@@ -312,5 +310,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
index 49a488e4455a6b52fbbe940c1c5d601990089601..6cdcd9699fdfe45be838ec6f426306ac113fee05 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -47,7 +46,6 @@ elements: |
             - entity.webform.results_submissions
           node_routes:
             - entity.node.webform.results_submissions
-  
 css: ''
 javascript: ''
 settings:
@@ -235,5 +233,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
index dfdc64fd05225618ea2a369f6135f6adeac762b8..f3ec8a179819e1adec6bfab647cbfae361a0a3cd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submission_views_r.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,7 +40,6 @@ elements: |
           - entity.webform.results_submissions
         node_routes:
           - entity.node.webform.results_submissions
-  
 css: ''
 javascript: ''
 settings:
@@ -229,5 +227,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
index f12fd33495692c3f1c0e9e8caed3f6aa700a9346..26d245046912242ad24c56534207342acdafa37a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_submitted_value.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -55,7 +54,6 @@ elements: |
       - one
       - two
       - three
-  
 css: ''
 javascript: ''
 settings:
@@ -243,5 +241,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
index eac2dc5b069f2880f5023136b167ccb2a08e1eea..34effab0bedb72a076bcde0bd5429960c34ed37b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -193,7 +192,6 @@ elements: |
       table_advanced_04_textfield:
         '#type': textfield
         '#title': 'textfield (4)'
-  
 css: ''
 javascript: ''
 settings:
@@ -381,5 +379,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b7688c86d0cccd5236e764e4028bad61783f3c2
--- /dev/null
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select.yml
@@ -0,0 +1,261 @@
+langcode: en
+status: open
+dependencies:
+  enforced:
+    module:
+      - webform_test
+open: null
+close: null
+weight: 0
+uid: null
+template: false
+archive: false
+id: test_element_table_select
+title: 'Test: Element: Table select'
+description: 'Test table select required.'
+category: 'Test: Element'
+elements: |
+  tableselect_checkboxes_required:
+    '#type': tableselect
+    '#title': tableselect_checkboxes_required
+    '#required': true
+    '#options':
+      one: One
+      two: Two
+      three: Three
+      four: Four
+      five: Five
+  tableselect_radios_required:
+    '#type': tableselect
+    '#title': tableselect_radios_required
+    '#multiple': false
+    '#required': true
+    '#options':
+      one: One
+      two: Two
+      three: Three
+      four: Four
+      five: Five
+  trigger:
+    '#type': checkbox
+    '#title': trigger
+  target_tableselect_checkboxes_required:
+    '#type': tableselect
+    '#title': target_tableselect_checkboxes_required
+    '#required': true
+    '#states':
+      visible:
+        ':input[name="trigger"]':
+          checked: true
+    '#options':
+      one: One
+      two: Two
+      three: Three
+      four: Four
+      five: Five
+  target_tableselect_radios_required:
+    '#type': tableselect
+    '#title': target_tableselect_radios_required
+    '#multiple': false
+    '#required': true
+    '#states':
+      visible:
+        ':input[name="trigger"]':
+          checked: true
+    '#options':
+      one: One
+      two: Two
+      three: Three
+      four: Four
+      five: Five
+css: ''
+javascript: ''
+settings:
+  ajax: false
+  ajax_scroll_top: form
+  ajax_progress_type: ''
+  ajax_effect: ''
+  ajax_speed: null
+  page: true
+  page_submit_path: ''
+  page_confirm_path: ''
+  page_theme_name: ''
+  form_title: source_entity_webform
+  form_submit_once: false
+  form_exception_message: ''
+  form_open_message: ''
+  form_close_message: ''
+  form_previous_submissions: true
+  form_confidential: false
+  form_confidential_message: ''
+  form_disable_remote_addr: false
+  form_convert_anonymous: false
+  form_prepopulate: false
+  form_prepopulate_source_entity: false
+  form_prepopulate_source_entity_required: false
+  form_prepopulate_source_entity_type: ''
+  form_reset: false
+  form_disable_autocomplete: false
+  form_novalidate: false
+  form_disable_inline_errors: false
+  form_required: false
+  form_unsaved: false
+  form_disable_back: false
+  form_submit_back: false
+  form_autofocus: false
+  form_details_toggle: false
+  form_access_denied: default
+  form_access_denied_title: ''
+  form_access_denied_message: ''
+  form_access_denied_attributes: {  }
+  form_file_limit: ''
+  share: false
+  share_node: false
+  share_theme_name: ''
+  share_title: true
+  share_page_body_attributes: {  }
+  submission_label: ''
+  submission_log: false
+  submission_views: {  }
+  submission_views_replace: {  }
+  submission_user_columns: {  }
+  submission_user_duplicate: false
+  submission_access_denied: default
+  submission_access_denied_title: ''
+  submission_access_denied_message: ''
+  submission_access_denied_attributes: {  }
+  submission_exception_message: ''
+  submission_locked_message: ''
+  submission_excluded_elements: {  }
+  submission_exclude_empty: false
+  submission_exclude_empty_checkbox: false
+  previous_submission_message: ''
+  previous_submissions_message: ''
+  autofill: false
+  autofill_message: ''
+  autofill_excluded_elements: {  }
+  wizard_progress_bar: true
+  wizard_progress_pages: false
+  wizard_progress_percentage: false
+  wizard_progress_link: false
+  wizard_progress_states: false
+  wizard_auto_forward: true
+  wizard_auto_forward_hide_next_button: false
+  wizard_keyboard: true
+  wizard_start_label: ''
+  wizard_preview_link: false
+  wizard_confirmation: true
+  wizard_confirmation_label: ''
+  wizard_track: ''
+  wizard_prev_button_label: ''
+  wizard_next_button_label: ''
+  wizard_toggle: false
+  wizard_toggle_show_label: ''
+  wizard_toggle_hide_label: ''
+  preview: 1
+  preview_label: ''
+  preview_title: ''
+  preview_message: ''
+  preview_attributes: {  }
+  preview_excluded_elements: {  }
+  preview_exclude_empty: true
+  preview_exclude_empty_checkbox: false
+  draft: none
+  draft_multiple: false
+  draft_auto_save: false
+  draft_saved_message: ''
+  draft_loaded_message: ''
+  draft_pending_single_message: ''
+  draft_pending_multiple_message: ''
+  confirmation_type: message
+  confirmation_title: ''
+  confirmation_message: ''
+  confirmation_url: ''
+  confirmation_attributes: {  }
+  confirmation_back: true
+  confirmation_back_label: ''
+  confirmation_back_attributes: {  }
+  confirmation_exclude_query: false
+  confirmation_exclude_token: false
+  confirmation_update: false
+  limit_total: null
+  limit_total_interval: null
+  limit_total_message: ''
+  limit_total_unique: false
+  limit_user: null
+  limit_user_interval: null
+  limit_user_message: ''
+  limit_user_unique: false
+  entity_limit_total: null
+  entity_limit_total_interval: null
+  entity_limit_user: null
+  entity_limit_user_interval: null
+  purge: none
+  purge_days: null
+  results_disabled: false
+  results_disabled_ignore: false
+  results_customize: false
+  token_view: false
+  token_update: false
+  token_delete: false
+  serial_disabled: false
+access:
+  create:
+    roles:
+      - anonymous
+      - authenticated
+    users: {  }
+    permissions: {  }
+  view_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  purge_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  view_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  administer:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  test:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  configuration:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+handlers:
+  debug:
+    id: debug
+    label: Debug
+    notes: ''
+    handler_id: debug
+    status: true
+    conditions: {  }
+    weight: 0
+    settings:
+      format: yaml
+      submission: false
+variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
index 1c56be5d2f781e141d15797fd446bd6e04a14343..acbcb406de4b56136f7f4a34e0aa2150cab4536e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_table_select_sort.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -157,7 +156,6 @@ elements: |
       '#default_value':
         five: five
         three: three
-  
 css: ''
 javascript: ''
 settings:
@@ -345,5 +343,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
index 2c70c88267da41a797cf12d72fcc533c0fbe60e4..9a07be86e35b71042de47a6a4ccb9934797a11fe 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -45,7 +44,6 @@ elements: |
     '#international': true
     '#international_preferred_countries':
       - ZW
-  
 css: ''
 javascript: ''
 settings:
@@ -233,5 +231,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
index 947ef2b1531b6eb6b8e3c7c81b572f43e9b8df47..66b55fb5fde887df1787ba84874f2d07a64f266a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_term_reference.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -121,7 +120,6 @@ elements: |
         '#breadcrumb_delimiter': ' » '
         '#format': breadcrumb
         '#format_items': ul
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
index 80a44de6303fd91e7df78c1673c368a219910b60..921c6a9d705693dbda87124e09c2f61a2b431e51 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_terms_of_service.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,6 @@ elements: |
     '#terms_type': slideout
     '#terms_title': terms_of_service_slideout
     '#terms_content': 'These are the terms of service.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
index 302223b7ce78f9ae1d953b24b07a14bc9c2ec701..8e77275246b97df33362dc811528283fb50b878a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_text_format.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,7 +30,6 @@ elements: |
     '#title': text_format_description_more
     '#description': 'This is a description'
     '#more': 'This is more'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
index 1458c15805daacd4c736377de598db0e7c5c0ac3..05f0511fef7e98a4153f272ba9d20253f1612a4c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_time.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -68,7 +67,6 @@ elements: |
     '#title': time_timepicker_placeholder
     '#timepicker': true
     '#placeholder': '{time}'
-  
 css: ''
 javascript: ''
 settings:
@@ -256,5 +254,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
index d43f4510e702f452ea6699e768b7434e7da4e8f7..7f0b1bc4e99ef082e00615a9158e856c413f77bd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_title_display.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -243,6 +242,28 @@ elements: |
       '#title_display': none
     webform_email_multiple_hr:
       '#type': webform_horizontal_rule
+    webform_height_title:
+      '#markup': 'Height (feet/inches) (webform_height)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_height_before:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (before)'
+      '#title_display': before
+    webform_height_after:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (after)'
+      '#title_display': after
+    webform_height_inline:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (inline)'
+      '#title_display': inline
+    webform_height_none:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) (none)'
+      '#title_display': none
+    webform_height_hr:
+      '#type': webform_horizontal_rule
     webform_mapping_title:
       '#markup': 'Mapping (webform_mapping)'
       '#prefix': '<h3>'
@@ -435,6 +456,36 @@ elements: |
       '#title_display': none
     webform_same_hr:
       '#type': webform_horizontal_rule
+    webform_scale_title:
+      '#markup': 'Scale (webform_scale)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_scale_before:
+      '#type': webform_scale
+      '#title': 'Scale (before)'
+      '#min': 1
+      '#max': 5
+      '#title_display': before
+    webform_scale_after:
+      '#type': webform_scale
+      '#title': 'Scale (after)'
+      '#min': 1
+      '#max': 5
+      '#title_display': after
+    webform_scale_inline:
+      '#type': webform_scale
+      '#title': 'Scale (inline)'
+      '#min': 1
+      '#max': 5
+      '#title_display': inline
+    webform_scale_none:
+      '#type': webform_scale
+      '#title': 'Scale (none)'
+      '#min': 1
+      '#max': 5
+      '#title_display': none
+    webform_scale_hr:
+      '#type': webform_horizontal_rule
     search_title:
       '#markup': 'Search (search)'
       '#prefix': '<h3>'
@@ -501,28 +552,6 @@ elements: |
       '#title_display': none
     tel_hr:
       '#type': webform_horizontal_rule
-    webform_toggle_title:
-      '#markup': 'Toggle (webform_toggle)'
-      '#prefix': '<h3>'
-      '#suffix': '</h3>'
-    webform_toggle_before:
-      '#type': webform_toggle
-      '#title': 'Toggle (before)'
-      '#title_display': before
-    webform_toggle_after:
-      '#type': webform_toggle
-      '#title': 'Toggle (after)'
-      '#title_display': after
-    webform_toggle_inline:
-      '#type': webform_toggle
-      '#title': 'Toggle (inline)'
-      '#title_display': inline
-    webform_toggle_none:
-      '#type': webform_toggle
-      '#title': 'Toggle (none)'
-      '#title_display': none
-    webform_toggle_hr:
-      '#type': webform_horizontal_rule
     url_title:
       '#markup': 'URL (url)'
       '#prefix': '<h3>'
@@ -668,7 +697,7 @@ elements: |
         two: Two
         three: Three
       '#options_display': side_by_side
-      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios and checkboxes</a>'
+      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios, checkboxes, and buttons.</a>'
       '#title_display': after
     checkboxes_inline:
       '#type': checkboxes
@@ -678,7 +707,7 @@ elements: |
         two: Two
         three: Three
       '#options_display': side_by_side
-      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios and checkboxes.</a>'
+      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios, checkboxes, and buttons.</a>'
       '#title_display': inline
     checkboxes_none:
       '#type': checkboxes
@@ -688,7 +717,7 @@ elements: |
         two: Two
         three: Three
       '#options_display': side_by_side
-      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios and checkboxes.</a>'
+      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios, checkboxes, and buttons.</a>'
       '#title_display': none
     checkboxes_hr:
       '#type': webform_horizontal_rule
@@ -995,6 +1024,120 @@ elements: |
       '#title_display': none
     webform_select_other_hr:
       '#type': webform_horizontal_rule
+    tableselect_title:
+      '#markup': 'Table select (tableselect)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    tableselect_before:
+      '#type': tableselect
+      '#title': 'Table select (before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': before
+    tableselect_after:
+      '#type': tableselect
+      '#title': 'Table select (after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': after
+    tableselect_inline:
+      '#type': tableselect
+      '#title': 'Table select (inline)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': inline
+    tableselect_none:
+      '#type': tableselect
+      '#title': 'Table select (none)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': none
+    tableselect_hr:
+      '#type': webform_horizontal_rule
+    webform_tableselect_sort_title:
+      '#markup': 'Tableselect sort (webform_tableselect_sort)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_tableselect_sort_before:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': before
+    webform_tableselect_sort_after:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': after
+    webform_tableselect_sort_inline:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (inline)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': inline
+    webform_tableselect_sort_none:
+      '#type': webform_tableselect_sort
+      '#title': 'Tableselect sort (none)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': none
+    webform_tableselect_sort_hr:
+      '#type': webform_horizontal_rule
+    webform_table_sort_title:
+      '#markup': 'Table sort (webform_table_sort)'
+      '#prefix': '<h3>'
+      '#suffix': '</h3>'
+    webform_table_sort_before:
+      '#type': webform_table_sort
+      '#title': 'Table sort (before)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': before
+    webform_table_sort_after:
+      '#type': webform_table_sort
+      '#title': 'Table sort (after)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': after
+    webform_table_sort_inline:
+      '#type': webform_table_sort
+      '#title': 'Table sort (inline)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': inline
+    webform_table_sort_none:
+      '#type': webform_table_sort
+      '#title': 'Table sort (none)'
+      '#options':
+        one: One
+        two: Two
+        three: Three
+      '#title_display': none
+    webform_table_sort_hr:
+      '#type': webform_horizontal_rule
   computed_elements:
     '#type': details
     '#title': 'Computed Elements'
@@ -1514,7 +1657,6 @@ elements: |
       '#title_display': none
     machine_name_hr:
       '#type': webform_horizontal_rule
-
 css: ''
 javascript: ''
 settings:
@@ -1702,5 +1844,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
index d5190bfbedb4da7b61fd50f634675982d10bd174..9e570b9a7fcbc981e46ba583ce7e93acbc7ffc3c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_users_roles.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,7 +32,6 @@ elements: |
     '#include_anonymous': false
     '#default_value':
       authenticated: authenticated
-  
 css: ''
 javascript: ''
 settings:
@@ -221,5 +219,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
index f70290c2c7528c59fe79654343cdc6acabb71e82..a135f8d1a8c0d5f2d41a4b1c19d1259e7fbd225b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_minlength.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,7 +26,6 @@ elements: |
     '#minlength': 5
     '#required': true
     '#default_value': value
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
index beb5d7bc7885a4b350d0da423bca52f06eef39df..bfc1766fc658860da49e7796c6e520c5d22a15df 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -79,7 +78,6 @@ elements: |
       '#title': webform_element_multiple_managed_file_two
       '#select2': true
       '#multiple': 2
-  
 css: ''
 javascript: ''
 settings:
@@ -267,5 +265,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
index 883253556ca72c06aae3d86cd7cb621ffe0da5f6..d3718fa83e7847db3acaa23c8df91a496dba7ee0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_pattern.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -38,7 +37,6 @@ elements: |
     '#title': pattern_unicode
     '#pattern': \u2E8F
     '#description': 'Enter unicode CJK characters ''⺏'''
-  
 css: ''
 javascript: ''
 settings:
@@ -226,5 +224,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
index 8ed92f25170f71e309c11a715096babe3a9b2998..f9ef3b769e3ceec405a0256ab92225680246d858 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_required.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -35,7 +34,6 @@ elements: |
       three: Three
     '#required': true
     '#required_error': 'This is a custom required message'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
index ccdf88fbfc2ad592e12133836a1527c2fea6b99d..143d75e4a889fa857012e037b8ecba8ae618827a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_validate_unique.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -56,7 +55,6 @@ elements: |
     '#options':
       1: one
       2: two
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
index a3a2158a210375d46bf9bb4dab137454e9759b57..1b3a8e55ff912fb9f9248c41cfa4e16804dfe5b9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_vertical_tabs.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -43,7 +42,7 @@ elements: |
     '#type': vertical_tabs
     '#title': 'My Vertical Tabs'
     '#title_display': before
-    '#require': TRUE
+    '#require': true
     '#description': 'This is a description'
     '#help': 'This is a help'
     '#more': 'This is a more'
@@ -91,7 +90,6 @@ elements: |
     textfield_03:
       '#type': textfield
       '#title': textfield_03
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
index ac0f3fe536185a1aec423555a48178bd812a3f42..3c05cdc69411115403ec521ab4352b00aaf289ce 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_view.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,7 +24,6 @@ elements: |
     '#display_id': default
     '#arguments':
       - '[webform:id]'
-  
 css: ''
 javascript: ''
 settings:
@@ -213,5 +211,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
index 9763ec42d6ad4765bcadd07884c270c98a835e90..9283a9e50d3cfa69a05065094a595540c79500f9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -57,6 +56,8 @@ elements: |
       '#type': captcha
       '#title': CAPTCHA
       '#captcha_admin_mode': true
+      '#captcha_info':
+        form_id: ''
       '#captcha_type': image_captcha/Image
     webform_codemirror:
       '#type': webform_codemirror
@@ -78,6 +79,13 @@ elements: |
     webform_email_multiple:
       '#type': webform_email_multiple
       '#title': 'Email multiple'
+    webform_height:
+      '#type': webform_height
+      '#title': 'Height (feet/inches)'
+    webform_height_multiple:
+      '#type': webform_height
+      '#title': 'Height (feet/inches) multiple'
+      '#multiple': true
     number:
       '#type': number
       '#title': Number
@@ -107,6 +115,14 @@ elements: |
     webform_rating:
       '#type': webform_rating
       '#title': Rating
+    webform_same:
+      '#type': webform_same
+      '#title': 'Billing address is the same as the shipping address'
+    webform_scale:
+      '#type': webform_scale
+      '#title': Scale
+      '#min': 1
+      '#max': 5
     search:
       '#type': search
       '#title': Search
@@ -165,11 +181,15 @@ elements: |
       '#message_type': warning
       '#message_message': 'This is a <strong>warning</strong> message.'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/77245">Issue #77245: A place for JavaScript status messages</a>'
+    webform_more:
+      '#type': webform_more
+      '#title': More
+      '#more': 'This is more content'
   file_attachment_elements:
     '#type': details
     '#title': 'File attachment elements'
     '#open': true
-    'webform_entity_print_attachment:pdf':
+    webform_entity_print_attachment_pdf:
       '#type': webform_entity_print_attachment
       '#title': 'Attachment PDF'
     webform_attachment_token:
@@ -233,7 +253,7 @@ elements: |
         two: Two
         three: Three
       '#options_display': side_by_side
-      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios and checkboxess.</a>'
+      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios, checkboxes, and buttons.</a>'
     webform_checkboxes_other:
       '#type': webform_checkboxes_other
       '#title': 'Checkboxes other'
@@ -279,7 +299,7 @@ elements: |
         two: Two
         three: Three
       '#options_display': side_by_side
-      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2731991">Issue #2731991: Setting required on radios marks all options required</a><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios and checkboxes.</a>'
+      '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2731991">Issue #2731991: Setting required on radios marks all options required</a><br /><a href="https://www.drupal.org/node/994360">Issue #994360: #states cannot disable/enable radios and checkboxes</a><br /><a href="https://www.drupal.org/node/2836364">Issue #2836364: Wrapper attributes are not supported by composite elements, this includes radios, checkboxes, and buttons.</a>'
     webform_radios_other:
       '#type': webform_radios_other
       '#title': 'Radios other'
@@ -378,6 +398,24 @@ elements: |
     webform_section:
       '#type': webform_section
       '#title': Section
+    webform_table:
+      '#type': table
+      '#header':
+        - 'Header 1'
+        - 'Header 2'
+      '#rows':
+        -
+          - 'Row 1 - Col 1'
+          - 'Row 1 - Col 2'
+        -
+          - 'Row 2 - Col 1'
+          - 'Row 2 - Col 2'
+        -
+          - 'Row 3 - Col 1'
+          - 'Row 3 - Col 2'
+    webform_table_row:
+      '#type': webform_table_row
+      '#title': 'Table row'
   date_time_elements:
     '#type': details
     '#title': 'Date/time elements'
@@ -511,7 +549,6 @@ elements: |
     table:
       '#type': table
       '#title': Table
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
index da7ad15625bb21e5e80cfa4141ddb9ad60c8797b..17236a0537e6e98c76bceecc24f0a5cee7ea597d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_example_elements_composite.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -171,7 +170,6 @@ elements: |
       '#type': text_format
       '#title': 'Text format'
       '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/997826">Issue #997826: #states doesn''t work correctly with type text_format</a><br /><a href="https://www.drupal.org/node/2625128">Issue #2625128: Text format selection stays visible when using editor and a hidden webform state</a><br /><a href="https://www.drupal.org/node/1954968">Issue #1954968: Required CKEditor fields always fail HTML5 validation</a>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
index c72de2a700374f3d90c806f5df93e62125db903f..24ea2c2fe7b1af2cdbe910d1c0fb3142d2a7dc83 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_entity_reference.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,6 @@ elements: |
     '#selection_handler': 'default:user'
     '#selection_settings':
       include_anonymous: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
index 5455ce0aeb111899eec886ef066f51fb5272731a..de0c51c5f6d3f031d05810e1ee841a754d5c2f40 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_options.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -44,7 +43,6 @@ elements: |
       one: One
       two: Two
       three: Three
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
index d1b4c20c73089da581a7715748632bd59ae14e97..38864a076044fbfd1cc6a223257a4261e0a48d98 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_access_denied.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
index 24b167c208494c30fc0841bc3a347c8a3444d2ad..3ed8401a8fe6e59ce03871fb4fda605c79520666 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_api.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -119,7 +118,6 @@ elements: |
     '#options':
       1: Administrator
       0: Anonymous
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
index 9f94baa6937ce6a8484b95b75f20f6664ef96a55..132d882ce6d8ef557c6c0a0a54a83ad7ee853cde 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_archived.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This webform is archived.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
index 6ea54edd06374aea37882fa336204393928c7953..6dee88a4bde72649825df5a33c99f0a5c74c18ac 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_assets.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   test:
     '#type': textfield
     '#title': 'Text field'
-  
 css: |
   .webform-submission-form {
     background-color: #cccccc;
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
index b4a7408b16290e3a79d06731d1dfac512abfa5b7..659433da76c50d49b6dda1aa0cabdb6829f451b9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofill.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,7 +21,6 @@ elements: |
   textfield_excluded:
     '#type': textfield
     '#title': textfield_excluded
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
index 2be20e3f434343056af2fbb0c0c0676308ea6987..24de0796751142f142ca8c67151242f704559cae 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_autofocus.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   test:
     '#type': textfield
     '#title': 'First input'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
index f15a72bf698e80e3b75b7e5a8e24e20dcc5c0047..01457518a1b401a087841c7baab3f7847b634fe0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_closed.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: closed
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This message should not be displayed'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
index bae5c76cce5c2ae53ebff897ecc2c7fabf069221..a5221993c5380a091aad0544a36519108cff4c01 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_confidential.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
index 871560df0ec633ab9fcc7bb27404c565d106a044..6e90823e5bfa28157c221fc4d05850c1945c74ed 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_details_toggle.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,7 +25,6 @@ elements: |
     '#title': 'Details 02'
     details_02:
       '#markup': 'Detail 02 Markup'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
index f4559cc25b0ebabac325a56b8b50a479eb5ceb2e..98415fb9600593ef61d53561ef0ada74ed87335e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_autocomplete.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,7 +20,6 @@ elements: |
   test:
     '#type': email
     '#title': 'Test autocompletion is disabled.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
index 20e27f003e78f3732a37db80a101df8fac3383c7..f24d095614b7f61c8c30703bfebd51d2cce26488 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_back.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -346,7 +345,6 @@ elements: |
     element_100:
       '#type': textfield
       '#title': 'Element #100'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
index 22cacdd6ed8a5ee09b310a7b1d6e052291f17b19..d66bc8dd89b43446308eff0ed22e96c284c46c2d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_disable_inline_errors.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': textfield
     '#title': textfield
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
index dc59725b6e317b00dd6f4084df2f16b852b410a9..53e61c8794a5b33ee920ed07c21ba38f4f0ef782 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_anonymous.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
index f1c03fcd3523899df440702de874c12464cc04b5..5ffa77fb9c7d2b61d7f4e9fbbee2c346ea1ba504 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_authenticated.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
index 4ff797e2e37cfd8d96ad6762aa9e733535fc26ef..bac504ee120d101db27123c267638d5a32320636 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_draft_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
index 032a111145dd8155f486d07396f2e6b1eca33e14..1c697c7bfb8bf7809c5b05047ff15f8c2520ded6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_inline_errors.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -127,7 +126,6 @@ elements: |
         1: 'Option 1'
         2: 'Option 2'
         3: 'Option 3'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
index 36abfb1c6fc52097e0087dcb287a6daa73790c14..0fd8da4008999581e8b24acb0ec6111161c3c87f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -36,10 +35,10 @@ elements: |
         remaining:webform:source_entity: [webform_submission:remaining:webform:source_entity]<br/>
         limit:user:source_entity: [webform_submission:limit:user:source_entity]<br/>
         remaining:user:source_entity: [webform_submission:remaining:user:source_entity]<br/>
+        
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
index c3dfaba1b46bc391133104f6e9424e603edeb6c5..7ee691e7f4735e17e7caaa58793120384c8369f5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_total_unique.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
index 92f793e157c324213f0f15fde18186350c2ec307..4be550f70cb616b2b9051440e719404c89e09c24 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_user_unique.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
index 35190979f0e747bb9e84c19d567cf62d9f902b7a..1d99c3baf00e4f8a7f0807464ebe616883e6c8ef 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
index d7303691a141df66512304260ff76b6e44718eaa..1c5259b1b03707ee1a79e36034c1af836e96a724 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_100.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -316,7 +315,6 @@ elements: |
   element_100:
     '#type': textfield
     '#title': 'Element #100'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
index 54a134d45aacc5ed8462c0668f310480668f2ac2..6e481aaa2d2a7b4b6ed7f5f900f5ac7c53a77b67 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_200.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -616,7 +615,6 @@ elements: |
   element_200:
     '#type': textfield
     '#title': 'Element #200'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
index 6f75cdf909ff8fafe93885845b54a240188a4fd4..485c60e256b4661de95fa4934a43d05d8fa6b2a3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_long_300.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -916,7 +915,6 @@ elements: |
   element_300:
     '#type': textfield
     '#title': 'Element #300'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
index ba550bdbeef9e611f34ff27053ed69a89f1cfe5b..225826b00a5c20369a7de1a3f181b0134a33ec7a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_novalidate.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
     '#title': 'Test required element with a custom error message.'
     '#required': true
     '#required_error': 'A custom error message'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
index ae9c8791171d07ed5920af95eb2bd3edc93b408e..6acbc94ae0f5dd8f65aa81b3efe4a2f314d93555 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_opening.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: scheduled
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This message should not be displayed'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
index 1753ca73041698c8bffc90229413f5c88a74039e..1dbc9cc8e983e58411460f37221a87fe98ec7cf5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_prepopulate.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -39,7 +38,6 @@ elements: |
         type: _none
   prepopulate_name:
     '#markup': '<a href="?source_entity_type=user&source_entity_id=1&name=John+Smith&colors[]=red&colors[]=white&users[]=1">Prepopulate elements and source entity using query string parameter ?source_entity_type=user&source_entity_id=1&name=John+Smith&colors[]=red&colors[]=white&users[]=1</a>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
index 695fa2f07f61ca82dc6ea31864b2fd02455a807f..857befa9a90ccef8faa0777a5fe4309eed514b11 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_preview.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -52,7 +51,6 @@ elements: |
       '#format_attributes':
         class:
           - format-attributes-class
-  
 css: |
   .format-attributes-class {
     border: 1px dashed #ccc;
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
index 1a11fd872953fb487d17211b66abec9a8936f960..738af29fae360ae31ad187c9b43dcb3de961b86a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_properties.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,7 +30,6 @@ elements: |
   q:
     '#type': search
     '#title': 'Search Google'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
index a64996791d029e035a6ae97265ee14678f4b4b74..a628ff99415bf0d2abeb69e97cf2b712b9ff07eb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_remote_addr.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
index fb51c54e6ee0cd6f27db961ebdd0235a1ee39ba1..ccc217c61593d75dd626d85a6b3cbfa7ae60457f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_required.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': textfield
     '#title': textfield
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
index a7c78ead196906ac779245202fc30d4e1c8f5c09..5797b9ac967ed088ae2a46b5378fbef0d33a93d2 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_reset.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': textfield
     '#title': 'Text field'
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
index c89d0ce1fd9becbde29cc80a1b17b5c21063b655..50a7c578b5a29ac6748487e640b53afd8d58ddf8 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_results_disabled.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Form'
 elements: |
   description:
     '#markup': 'This webform will not save any submissions.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
index b9d45e2be4eb00f5083d7304529570c9e7a85f87..935e9e4011529c3a67049ba17a0a45c4a25387b6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_back.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,7 +29,6 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
index 8da87cebc14286fefd1701e3be4a580a4e8a193d..4a11c0f8b4df2f5519ad197365bc1a13aad253fd 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_once.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,7 +26,6 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
index b9b84a93c934fdf432517f5db935b0cf3bbdd64a..e0f53bcd80af04e44c27b08599283bcf1079b8dc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_submit_text.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Custom submit text'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
index 09c9d79ca7dfe614f6012fd2373747b8bdb4dbc9..749ab23b8f2e33039dcebdd543103608835ac144 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_template.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: closed
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This webform is a template'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
index 0233a41f8149f7d78cdea3a7db926d5b0f1af938..d619fb8f34449464207ff494f377227881fe6bcf 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -24,7 +23,6 @@ elements: |
   text_format:
     '#type': text_format
     '#title': text_format
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
index c4f532379c587df645e9c00c04a00d702b3519f6..908833be9411e09934671914984c39e78e9ebe37 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_unsaved_wizard.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,10 +24,9 @@ elements: |
   page_02:
     '#type': webform_wizard_page
     '#title': page_2
-    testfield_1:
+    testfield_2:
       '#type': textfield
       '#title': textfield_2
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
index 27009b3af4985af38d324a41bd0e4aa8167d5301..46c8665289bae6e0eab45cf1a6767febb690f9fc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_validate.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   custom:
     '#title': 'Custom Field'
     '#type': textfield
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
index 0e88a76d59b7aeb9545ce65e2fffc36c250967bd..df9c04ea46a350d42fdeb881d457fb3f47c86c42 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_access.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -57,7 +56,6 @@ elements: |
       '#type': textfield
       '#title': textfield_private
       '#default_value': '{textfield_private}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
index 35e07914b82220991234758df2fee1e1331992f4..0e6e3fe2612af01b733b433d0244aea4a5a21477 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_advanced.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -61,7 +60,6 @@ elements: |
       '#type': textarea
       '#required': true
       '#default_value': 'Here is some feedback'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
index b340323f0dab589eccb5ea2d8dd9e178fe6b01d4..aacd91c6175202a4e056fcd604fe3c1a9b8d4092 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_basic.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,7 +29,6 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
index 7194be5fb00ee219d857553ad2eb1c82d3512e11..91c6def06f605dd567599064c7cbbe9b0c0b553f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_conditional.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -99,7 +98,6 @@ elements: |
           unchecked: true
     page_5_markup:
       '#markup': 'This is page 5.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
index 23958eeb6ec4f2a7dd477639292c6ddbb3890bd0..3077224effc7f5b08d2750c36309a77a887e838e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_custom.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -62,7 +61,6 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Apply
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
index 88fc1e70f10b0b8b1829faf49ddc9f5aa2c5e30a..949b36e9544a59a5efe08f1492e06e5287ddba1e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_links.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,7 +29,6 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
index c14aa435922239ebcd6dcd485b566a27f0260687..b15a1a4e3e1bd29bb82dc1e1ced799086f4dcc05 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_100.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -346,7 +345,6 @@ elements: |
     element_100:
       '#type': textfield
       '#title': 'Element #100'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
index 633fd78ae89642bf4be21c4aff32ac8f13c255e8..c7c0df10ef31242a553740df74bc46454dbfa05f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_200.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -676,7 +675,6 @@ elements: |
     element_200:
       '#type': textfield
       '#title': 'Element #200'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
index 556abc3d37e214f1686aa7b47bcfebd78b536da6..3c33e86de3e32a8195c2561aff5f85ca44fe3253 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_long_300.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1006,7 +1005,6 @@ elements: |
     element_300:
       '#type': textfield
       '#title': 'Element #300'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
index 99b1602df144e05c97445b3cd2ee35b161265e8c..b6b7c279e3024bda7ac1f7017607945877364c23 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,7 +58,6 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
-  
 css: ''
 javascript: ''
 settings:
@@ -247,5 +245,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
index 3e2778634276b4f923cb8616847b008f633d1d59..acc2e5ec5e40ce6106f7e7984114e07359df88db 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_form_wizard_validate_comp.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -107,7 +106,6 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
-  
 css: ''
 javascript: ''
 settings:
@@ -295,5 +293,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
index 56fb61bd8d37ab6522c61bb340aae15dfd2b6a8e..03d9b17f0b1b458568afabb51c5887f44f91df28 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_action.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -48,7 +47,6 @@ elements: |
       '#attributes':
         readonly: readonly
         style: 'background-color: #eee'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
index 742e29585718f0128bec22e178963efca8a2484f..f152ad66c186d2ea298f99ae585394dd6f884418 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,7 +40,6 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
index fe542ddeb392718f219ed0249f39b7afe1afa73b..92abea0b868e6ddd73d2906c52f1e25236bddaf9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_advanced.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -56,7 +55,6 @@ elements: |
     '#title': Notes
     '#private': true
     '#default_value': 'These notes are private.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
index 344eeb96085b4f228def35a6f87b3dbb9171bf77..dfdcaccc1b439ad1e32627ee3e9b44b900495f93 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_mapping.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,7 +30,6 @@ elements: |
     '#title': radios_other
     '#options': sex
     '#description': 'Check and enter ''Other'' to trigger an email.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
index 958772f75305cd4a68043b93a1a2330bb0a91e64..2791180c6274685b0434cb2522260cdce8634a7a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_roles.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,6 @@ elements: |
       authenticated: 'Authenticated (authenticated)'
       administrator: 'Administrator (administrator)'
       other: Other
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
index a7d42ca928a4df329f61e7f4ed0e7617fa3c3b27..9b1913b23321c2a47829fd45c394ebd5c39ea3b9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_states.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +17,6 @@ category: 'Test: Handler'
 elements: |
   message:
     '#markup': 'Click ''Save Draft'' and ''Submit'' to send emails triggered by submissions  state.'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
index 5787b5655bd25e338d88397057bc9aa8806c8b7f..7ed79befbb406624e0b97656b4609e7b26004bb6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_email_twig.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,7 +40,6 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
index dda3fc7bab2b7dcc740593000920f3d7a7c97820..489867959ac1c649f1f77447f0de5627bbda91db 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_handler_settings.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -61,7 +60,6 @@ elements: |
       '#type': textfield
       '#title': 'Draft loaded message'
       '#default_value': '{Custom draft loaded message}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
index fe804bab5bffe580f80bc57d19d0df4ed74cd5ee..761eda3cd29ce7be488d4e4792efbb36b031cc5f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_libraries_optional.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -85,7 +84,6 @@ elements: |
     signature:
       '#type': webform_signature
       '#title': Signature
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
index 6cd187b911c007a5165c76aa01ff2a89c4cbd34e..db9b928af38966d8df3220a043b51728ab7fe72b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_rendering.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -50,7 +49,6 @@ elements: |
     '#default_value':
       value: '<p><em>{default_value}</em></p>'
       format: basic_html
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
index 8059f661ffba670c2f4ea0787d187c3fa12e1c2c..5fb3a88416ad808b5393f0a80069f5f8269d2411 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_autocomplete.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -160,7 +159,6 @@ elements: |
       kitten_3:
         text: 'Cute Kitten 3'
         src: 'http://placekitten.com/130/200'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
index c2c1c0015c3f226edd3e757b2e15fdd5f2f0de4a..246cacecbfc60db252fcd5ade4dcae2d5bf5edd3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_disabled.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -66,7 +65,7 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-  'webform_entity_print_attachment:pdf':
+  webform_entity_print_attachment_pdf:
     '#type': webform_entity_print_attachment
     '#title': 'Attachment PDF'
     '#default_value': Loremipsum
@@ -287,7 +286,7 @@ elements: |
   date:
     '#type': date
     '#title': Date
-    '#default_value': '2022-01-23T21:13:17-0500'
+    '#default_value': '2040-04-05T12:19:45-0500'
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -299,7 +298,7 @@ elements: |
     '#type': datetime
     '#title': Date/time
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2419131">Issue #2419131: #states attribute does not work on #type datetime</a>'
-    '#default_value': '2018-11-16T11:10:07-0500'
+    '#default_value': '2020-10-10T04:12:25-0400'
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -310,7 +309,7 @@ elements: |
   datelist:
     '#type': datelist
     '#title': 'Date list'
-    '#default_value': '2011-05-20T14:49:30-0400'
+    '#default_value': '2013-04-30T18:19:05-0400'
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -369,7 +368,7 @@ elements: |
     '#selection_settings':
       include_anonymous: true
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2826451">Issue #2826451: TermSelection returning HTML characters in select list</a>'
-    '#default_value': 10
+    '#default_value': 9
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -445,6 +444,17 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
+  webform_height:
+    '#type': webform_height
+    '#title': 'Height (feet/inches)'
+    '#default_value': 59
+    '#states':
+      disabled:
+        ':input[name="trigger"]':
+          checked: true
+      required:
+        ':input[name="trigger"]':
+          checked: true
   webform_horizontal_rule:
     '#type': webform_horizontal_rule
     '#attributes':
@@ -888,11 +898,11 @@ elements: |
   webform_term_checkboxes:
     '#type': webform_term_checkboxes
     '#title': 'Term checkboxes'
-    '#vocabulary': second
+    '#vocabulary': tags
     '#default_value':
-      - 161
-      - 101
-      - 177
+      - Loremipsum
+      - Oratione
+      - Dixisset
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -903,8 +913,8 @@ elements: |
   webform_term_select:
     '#type': webform_term_select
     '#title': 'Term select'
-    '#vocabulary': second
-    '#default_value': 161
+    '#vocabulary': tags
+    '#default_value': Loremipsum
     '#states':
       disabled:
         ':input[name="trigger"]':
@@ -996,16 +1006,6 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-  webform_variant:
-    '#type': webform_variant
-    '#title': 'Variant'
-    '#states':
-      disabled:
-        ':input[name="trigger"]':
-          checked: true
-      required:
-        ':input[name="trigger"]':
-          checked: true
   webform_video_file:
     '#type': webform_video_file
     '#title': 'Video file'
@@ -1016,7 +1016,6 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-
 css: ''
 javascript: ''
 settings:
@@ -1204,5 +1203,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
index c51faa1926ff6836f6de70d38e97ae555044ed9a..67ca393b28f4a66bf9f64927b8885a0f55068d7e 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_invisible.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -86,7 +85,7 @@ elements: |
       invisible:
         ':input[name="trigger"]':
           checked: true
-  'webform_entity_print_attachment:pdf':
+  webform_entity_print_attachment_pdf:
     '#type': webform_entity_print_attachment
     '#title': 'Attachment PDF'
     '#default_value': Loremipsum
@@ -259,7 +258,7 @@ elements: |
   date:
     '#type': date
     '#title': Date
-    '#default_value': '2013-03-16T13:06:41-0400'
+    '#default_value': '2022-11-06T09:35:54-0500'
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -268,7 +267,7 @@ elements: |
     '#type': datetime
     '#title': Date/time
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2419131">Issue #2419131: #states attribute does not work on #type datetime</a>'
-    '#default_value': '2028-03-18T15:58:00-0400'
+    '#default_value': '2035-11-08T21:25:29-0500'
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -276,7 +275,7 @@ elements: |
   datelist:
     '#type': datelist
     '#title': 'Date list'
-    '#default_value': '2031-12-15T00:45:18-0500'
+    '#default_value': '2020-01-15T09:55:30-0500'
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -381,6 +380,14 @@ elements: |
       invisible:
         ':input[name="trigger"]':
           checked: true
+  webform_height:
+    '#type': webform_height
+    '#title': 'Height (feet/inches)'
+    '#default_value': 47
+    '#states':
+      invisible:
+        ':input[name="trigger"]':
+          checked: true
   webform_horizontal_rule:
     '#type': webform_horizontal_rule
     '#attributes':
@@ -734,11 +741,11 @@ elements: |
   webform_term_checkboxes:
     '#type': webform_term_checkboxes
     '#title': 'Term checkboxes'
-    '#vocabulary': second
+    '#vocabulary': tags
     '#default_value':
-      - 161
-      - 101
-      - 177
+      - Loremipsum
+      - Oratione
+      - Dixisset
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -746,8 +753,8 @@ elements: |
   webform_term_select:
     '#type': webform_term_select
     '#title': 'Term select'
-    '#vocabulary': second
-    '#default_value': 161
+    '#vocabulary': tags
+    '#default_value': Loremipsum
     '#states':
       invisible:
         ':input[name="trigger"]':
@@ -815,13 +822,6 @@ elements: |
       invisible:
         ':input[name="trigger"]':
           checked: true
-  webform_variant:
-    '#type': webform_variant
-    '#title': 'Variant'
-    '#states':
-      invisible:
-        ':input[name="trigger"]':
-          checked: true
   webform_video_file:
     '#type': webform_video_file
     '#title': 'Video file'
@@ -829,7 +829,6 @@ elements: |
       invisible:
         ':input[name="trigger"]':
           checked: true
-
 css: ''
 javascript: ''
 settings:
@@ -1017,5 +1016,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
index b07b1c89a7bcaf9b397995d21fbc6cab5a97d481..5a9bac88c47be22a9e580683c28ebf808e7388c6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_required.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -147,7 +146,6 @@ elements: |
         two: Two
         three: Three
       '#required': true
-  
 css: ''
 javascript: ''
 settings:
@@ -335,5 +333,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
index 5dfd4d1b3182218e3bf077137f62463d619b6524..48d366241874b396ba07582cc317c9a81b5b89d3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_client_visible.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -107,7 +106,7 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-  'webform_entity_print_attachment:pdf':
+  webform_entity_print_attachment_pdf:
     '#type': webform_entity_print_attachment
     '#title': 'Attachment PDF'
     '#default_value': Loremipsum
@@ -328,7 +327,7 @@ elements: |
   date:
     '#type': date
     '#title': Date
-    '#default_value': '2037-02-02T21:33:13-0500'
+    '#default_value': '2015-12-16T06:43:56-0500'
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -340,7 +339,7 @@ elements: |
     '#type': datetime
     '#title': Date/time
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2419131">Issue #2419131: #states attribute does not work on #type datetime</a>'
-    '#default_value': '2032-02-12T16:45:54-0500'
+    '#default_value': '2040-10-30T22:38:28-0500'
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -351,7 +350,7 @@ elements: |
   datelist:
     '#type': datelist
     '#title': 'Date list'
-    '#default_value': '2020-02-27T14:56:48-0500'
+    '#default_value': '2023-04-06T13:22:31-0400'
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -410,7 +409,7 @@ elements: |
     '#selection_settings':
       include_anonymous: true
     '#description': '<b>Known Issues:</b><br /><a href="https://www.drupal.org/node/2826451">Issue #2826451: TermSelection returning HTML characters in select list</a>'
-    '#default_value': 10
+    '#default_value': 1
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -486,6 +485,17 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
+  webform_height:
+    '#type': webform_height
+    '#title': 'Height (feet/inches)'
+    '#default_value': 37
+    '#states':
+      visible:
+        ':input[name="trigger"]':
+          checked: true
+      required:
+        ':input[name="trigger"]':
+          checked: true
   webform_horizontal_rule:
     '#type': webform_horizontal_rule
     '#attributes':
@@ -929,11 +939,11 @@ elements: |
   webform_term_checkboxes:
     '#type': webform_term_checkboxes
     '#title': 'Term checkboxes'
-    '#vocabulary': second
+    '#vocabulary': tags
     '#default_value':
-      - 161
-      - 101
-      - 177
+      - Loremipsum
+      - Oratione
+      - Dixisset
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -944,8 +954,8 @@ elements: |
   webform_term_select:
     '#type': webform_term_select
     '#title': 'Term select'
-    '#vocabulary': second
-    '#default_value': 161
+    '#vocabulary': tags
+    '#default_value': Loremipsum
     '#states':
       visible:
         ':input[name="trigger"]':
@@ -1037,16 +1047,6 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-  webform_variant:
-    '#type': webform_variant
-    '#title': 'Variant'
-    '#states':
-      visible:
-        ':input[name="trigger"]':
-          checked: true
-      required:
-        ':input[name="trigger"]':
-          checked: true
   webform_video_file:
     '#type': webform_video_file
     '#title': 'Video file'
@@ -1057,7 +1057,6 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
-
 css: ''
 javascript: ''
 settings:
@@ -1245,5 +1244,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
index dc88e20abb6620f316a36f94ac503b3c73e51b53..ec9c1199f419ece95643e2372426604cee29de4a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_crosspage.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -46,7 +45,6 @@ elements: |
             checked: true
           ':input[name="trigger_2"]':
             checked: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
index 76a26a75db2fdc865d38e1395def28098c6a5371..df5254a23b15159abe99a83713c29106b575eade 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_disabled.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,7 +59,6 @@ elements: |
       disabled:
         ':input[name="disabled"]':
           checked: true
-  
 css: ''
 javascript: ''
 settings:
@@ -248,5 +246,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
index 6961de174e0cd3ffb4c9a945177789aec8965f63..3cd8a74a1999da36317b2d63a52da301b6622763 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_clear.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -103,7 +102,6 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
-  
 css: ''
 javascript: ''
 settings:
@@ -291,5 +289,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
index 633a57fb1f3b12fb1174a447f7d6b95416eaad7d..f9c57c8c3378347f6df4fe1733020096fed2b1fb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_comp.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -77,7 +76,6 @@ elements: |
       '#first__title': webform_name_nested_first
       '#last__required': true
       '#last__title': webform_name_nested_last
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
index a5f9cef42bd4d5465bc8e48f24c633f48db10c94..48cf5ad6ab155dc12daba2c60631ebc9a7906ab6 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_containers.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -74,7 +73,6 @@ elements: |
             checked: true
           ':input[name="visible_slide_textfield"]':
             filled: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
index 5c3c906a899386e8622d1201af0154313b7735fc..3c4d4ed07b6392d6cdbdf345c82294539ec1d1bb 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_custom.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -150,7 +149,6 @@ elements: |
       visible-slide:
         ':input[name="trigger_visible_slide"]':
           checked: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
index af8cf8a75d4f3c7a3626e718586d7dbf5a7e4095..97be7de50a5d30d48df3730d10e6d69972edb1bc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_file.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,7 +25,6 @@ elements: |
       required:
         ':input[name="files[trigger_file]"]':
           filled: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
index 5cc36f3a4c09c4a7f624c1dcd2fcf89054859397..1e5f013013aa0718ec45e7e6290020448989366f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_hidden.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -139,7 +138,6 @@ elements: |
         invisible:
           ':input[name="trigger_checkbox"]':
             checked: true
-  
 css: ''
 javascript: ''
 settings:
@@ -327,5 +325,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
index 8ea039b63f898a738bf352cfc4d76d7d548b3d14..b0cabed396afcaa7ccc8494ab4e3c93398c2793c 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_likert.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,7 +22,7 @@ elements: |
   dependent_likert:
     '#type': webform_likert
     '#title': dependent_likert
-    '#required': true,
+    '#required': 'true,'
     '#questions':
       q1: q1
       q2: q2
@@ -34,7 +33,6 @@ elements: |
       visible:
         ':input[name="trigger_likert"]':
           checked: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
index 3761fc597c6274b9f4b92670ea16489518347c76..7417dcaea589d20bf7f7ea3acc20125840f26a79 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -28,7 +27,6 @@ elements: |
       required:
         ':input[name="trigger_required"]':
           checked: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
index 5d645fdd82289d3628045d40629d4f4876b74d7e..e77c84e769b7763548c1d48633bb5fe0cddb1e37 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_nested.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,7 +58,6 @@ elements: |
                 checked: true
               ':input[name="b"]':
                 checked: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
index 14143032cbb6a804559fb59308dbb1c1fd11718a..b7516ea887737eed193ef57596e17f1b3ac22b63 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_preview.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -53,7 +52,6 @@ elements: |
       '#type': textfield
       '#title': nested_textfield
       '#default_value': '{value}'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
index 5ec1ce259dde7c3223d60099b27e8da73c3d6657..3e40e4dcb74970f4f52d135fb1d955a95b9deefc 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_required.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -334,7 +333,6 @@ elements: |
         visible:
           ':input[name="currency_trigger"]':
             checked: true
-  
   address_trigger_details:
     '#type': details
     '#title': address_trigger
@@ -448,7 +446,6 @@ elements: |
         required:
           ':input[name="composite_sub_elements_required_trigger"]':
             value: b
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
index 4f7365315bdd742334ab165118ac7ef72761fa48..f61047073f295db876c7659a96f6d21d7586d1ac 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_save.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -71,7 +70,6 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
-  
 css: ''
 javascript: ''
 settings:
@@ -259,5 +257,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
index a3bbc2e359ee0f480dcfce328f8255537b78975a..ed7fd63a583c95e2d1afaf6c05d7181ff107e743 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_server_wizard.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -234,7 +233,6 @@ elements: |
       '#default_value': '{default_value}'
       '#required': '{default_value}'
       '#description': '<b>Required:</b> page_01_trigger_checkbox:checked'
-  
 css: ''
 javascript: ''
 settings:
@@ -422,5 +420,7 @@ handlers:
     status: true
     conditions: {  }
     weight: 1
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
index 21217bbbad90ffb845f99f60826f81161a6d8a54..177d1566228f65a330b07bebe06c07ee43de500f 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_to_text.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -48,10 +47,10 @@ elements: |
       required:
         - ':input[name="some_trigger"]':
             unchecked: false
-        - 'or'
+        - or
         - ':input[name="some_value"]':
             value: 1
-        - 'or'
+        - or
         - ':input[name="some_number"]':
             value:
               greater_equal: 1
@@ -65,11 +64,10 @@ elements: |
         -
           - ':input[name="some_value"]':
               value: 1
-          - 'or'
+          - or
           - ':input[name="some_number"]':
               value:
                 between: '1:10'
-
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
index fea61d99cd97f9046cfccf1682cc6e98c979e59e..0ceaaee813097fc9c36c17592bb4baa9ff7032f9 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_states_triggers.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -131,7 +130,6 @@ elements: |
         visible:
           'details[data-webform-key="collapsed_trigger"]':
             collapsed: true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
index 604a44246643a613fea9d1309df2a62d5f0391a6..b7cdfcebbe84c4c397ef5d2560e0e0cc5473ea5a 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_label.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': textfield
     '#title': Name
     '#required': true
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
index 4f2957226562cb3138d9973a5e4ea5d67d970094..2fd098585d400787d7e0e4fd0c3201daf2fca44b 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_log.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   value:
     '#type': textfield
     '#title': 'Enter a value'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
index b92c84dc99aece70052bbcc6c8d2d0992c932a19..d3d18c125761862c3abc3058ce2c0fcf7eb71d28 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_submission_views.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,7 +18,6 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
index 1aa178810f0af6c5dfa4ad32e1ec7bfb24d65953..4f1c00ed084da2c5514bc702d995fe5543f83049 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -35,7 +34,7 @@ elements: |
       Close long: [webform:close:long]
       Element title: [webform:element:webform_tokens:title]
       Element description: [webform:element:webform_tokens:description]
-  
+      
   webform_submission_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -68,7 +67,7 @@ elements: |
       URL: [webform_submission:url]
       URL Edit Webform: [webform_submission:url:edit-form]
       UUID: [webform_submission:uuid]
-  
+      
   webform_submission_source_entity_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -97,7 +96,7 @@ elements: |
       Summary: [webform_submission:source-entity:summary]
       Title: [webform_submission:source-entity:title]
       URL: [webform_submission:source-entity:url]
-  
+      
   webform_submission_node_tokens:
     '#type': webform_codemirror
     '#mode': text
@@ -126,7 +125,6 @@ elements: |
       Summary: [webform_submission:node:summary]
       Title: [webform_submission:node:title]
       URL: [webform_submission:node:url]
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
index b087ba4c023c8807fcbc35ce399ac27f4c249703..07cd561f91a285c0e4c507f28d41855ce86b8017 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_operations.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
index 7d02817481ebd3bf1edf168e78c68a6bdf147121..01c3ebcebdd2e3956540d7631a4454095dfd5058 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_token_submission_value.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -142,7 +141,6 @@ elements: |
     '#type': textfield
     '#title': script
     '#default_value': '<script>alert(''hi'');</script>'
-  
 css: ''
 javascript: ''
 settings:
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
index 00f6c61b3219ace7d23d60a1b6713dd4bb3ebb94..b5bb577c5de9b30d947ecd0cfd00bd4479ac7dc1 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,7 +19,6 @@ elements: |
     '#type': webform_variant
     '#title': test_offcanvas_width
     '#variant': test_offcanvas_width
-  
 css: ''
 javascript: ''
 settings:
@@ -208,5 +206,7 @@ handlers:
     status: false
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
index 26c68e9770cb616123e0044297e15864c2902c62..26c34198263a0a70648e2f64c136319aee5d149d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_multiple.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,7 +33,6 @@ elements: |
     '#wrapper_attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px; '
     '#markup': '{0}'
-  
 css: ''
 javascript: ''
 settings:
@@ -222,7 +220,9 @@ handlers:
     status: false
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants:
   a:
     id: override
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
index 8ad0aeb0aa8824078e4f16749c8684d60c7f78da..905ba3099425bac30257fd6d5cf65d8bb2106fc5 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_override.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -24,7 +23,6 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-
 css: ''
 javascript: ''
 settings:
@@ -212,7 +210,9 @@ handlers:
     status: false
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants:
   settings:
     id: override
@@ -241,7 +241,7 @@ variants:
       elements: |
         textfield:
           '#placeholder': 'This is a placeholder'
-
+        
       handlers: {  }
       debug: true
   handlers:
@@ -287,6 +287,6 @@ variants:
       elements: |
         '#method': get
         '#action': 'https://drupal.org'
-
+        
       handlers: {  }
       debug: true
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
index 4332bfe28e73f1329aa63ef861273202d704ebad..75e7597c1f967f6c4805fec36ada202c3897d1e0 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_variant_randomize.yml
@@ -1,4 +1,3 @@
-uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,7 +25,6 @@ elements: |
     '#attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px;'
     '#markup': '{X}'
-  
 css: ''
 javascript: ''
 settings:
@@ -214,7 +212,9 @@ handlers:
     status: false
     conditions: {  }
     weight: 0
-    settings: {  }
+    settings:
+      format: yaml
+      submission: false
 variants:
   a:
     id: override
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_description_tooltip.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_description_tooltip.inc
index 3b4146e2a70778fa4103ce8759cab5e3c112f58c..c11643e6acb9f2fc69b86f2370bd03c3f917d691 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_description_tooltip.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_description_tooltip.inc
@@ -42,7 +42,8 @@ function webform_test_test_element_description_tooltip() {
     $element['#description'] = (string) t("This is a description for the '@type' element.", ['@type' => $element_type]);
     $element['#description_display'] = 'tooltip';
 
-    $data[$category_id][$element_type] = $element;
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$category_id][$element_key] = $element;
   }
 
   // Move other elements last.
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_disabled.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_disabled.inc
index b6af22d39975f19279cb374a617e27e80a594b07..1d103ef71e1848028576eb8909fd170716be87de 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_disabled.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_disabled.inc
@@ -29,7 +29,8 @@ function webform_test_test_element_disabled() {
     // Set disabled.
     $element['#disabled'] = TRUE;
 
-    $data[$element_type] = $element;
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$element_key] = $element;
   }
 
   return $data;
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_format.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_format.inc
index 7075ee76b0e29b6d6a30d9bcd98dd83089a6a16e..486a18869a89160173edffcad1eb680ffebfd3f6 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_format.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_format.inc
@@ -113,7 +113,9 @@ function webform_test_test_element_format(WebformInterface $webform, $composite
         '#open' => TRUE,
       ];
     }
-    $data[$category_id][$element_type] = [
+
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$category_id][$element_key] = [
       '#type' => 'details',
       '#title' => $element['#title'],
     ];
@@ -124,7 +126,8 @@ function webform_test_test_element_format(WebformInterface $webform, $composite
       }
 
       foreach ($items_formats as $items_format_name => $items_format_title) {
-        $format_element_type = implode('_', array_filter([$element_type, $item_format_name, $items_format_name]));
+        $format_element_type = implode('_', array_filter([$element_key, $item_format_name, $items_format_name]));
+        $format_element_type = str_replace(':', '_', $format_element_type);
         $format_element_title = $element['#title'] . ' (' . implode(' - ', array_filter([$item_format_title, $items_format_title])) . ')';
 
         $format_element = $element;
@@ -135,7 +138,7 @@ function webform_test_test_element_format(WebformInterface $webform, $composite
         if ($items_format_name) {
           $format_element['#format_items'] = $items_format_name;
         }
-        $data[$category_id][$element_type][$format_element_type] = $format_element;
+        $data[$category_id][$element_key][$format_element_type] = $format_element;
       }
     }
   }
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_help_display.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_help_display.inc
index b458155edc8a7835e775677f364e529dd801b47b..7f81d96411f5aa8a65e76ffab06f5b279b4bf0a5 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_help_display.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_help_display.inc
@@ -57,7 +57,8 @@ function webform_test_test_element_help_display() {
       'element_after' => 'element_after',
     ];
 
-    $data[$category_id][$element_type . '_help'] = [
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$category_id][$element_key . '_help'] = [
       '#markup' => (isset($element['#title'])) ? $element['#title'] . ' (' . $element_type . ')' : $element_type,
       '#prefix' => '<h3>',
       '#suffix' => '</h3>',
@@ -72,9 +73,9 @@ function webform_test_test_element_help_display() {
       else {
         $example_element['#help'] .= ' (' . $help_display . ')';
       }
-      $data[$category_id][$element_type . '_' . $help_display] = $example_element;
+      $data[$category_id][$element_key . '_' . $help_display] = $example_element;
     }
-    $data[$category_id][$element_type . '_hr'] = ['#type' => 'webform_horizontal_rule'];
+    $data[$category_id][$element_key . '_hr'] = ['#type' => 'webform_horizontal_rule'];
 
   }
 
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_title_display.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_title_display.inc
index 211ebeb4958731342865ba32c11a94838a856405..0b28b4c36442455e0f2ea6b79d85898865231428 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_title_display.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_element_title_display.inc
@@ -93,7 +93,8 @@ function webform_test_test_element_title_display() {
       unset($title_displays['inline']);
     }
 
-    $data[$category_id][$element_type . '_title'] = [
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$category_id][$element_key . '_title'] = [
       '#markup' => $element['#title'] . ' (' . $element_type . ')',
       '#prefix' => '<h3>',
       '#suffix' => '</h3>',
@@ -102,9 +103,9 @@ function webform_test_test_element_title_display() {
       $example_element = $element;
       $example_element['#title'] .= ' (' . $title_display . ')';
       $example_element['#title_display'] = $title_display;
-      $data[$category_id][$element_type . '_' . $title_display] = $example_element;
+      $data[$category_id][$element_key . '_' . $title_display] = $example_element;
     }
-    $data[$category_id][$element_type . '_hr'] = ['#type' => 'webform_horizontal_rule'];
+    $data[$category_id][$element_key . '_hr'] = ['#type' => 'webform_horizontal_rule'];
 
   }
 
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements.inc
index ef243b8c005e05f0e111392aae86af4d056080ba..e9ac0011cc36f3dbd507e7e3d1fce770312ad371 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements.inc
@@ -43,7 +43,8 @@ function webform_test_test_example_elements() {
         '#open' => TRUE,
       ];
     }
-    $data[$category_id][$element_type] = $element;
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$category_id][$element_key] = $element;
 
     // Multiple value composite.
     if ($webform_element->supportsMultipleValues() && !$webform_element->hasMultipleValues($element)) {
@@ -57,7 +58,7 @@ function webform_test_test_example_elements() {
           if ($property === 'multiple' && $webform_element->hasProperty('select2')) {
             $multiple_element['#select2'] = TRUE;
           }
-          $data[$category_id][$element_type . '_' . $property] = $multiple_element;
+          $data[$category_id][$element_key . '_' . $property] = $multiple_element;
         }
       }
     }
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements_composite.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements_composite.inc
index 5ddb25a517aab8b763e8c5eeacb00a95cd5cbc82..3f3fd3299e119662cf185f89f9a5a482bc888d1f 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements_composite.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_example_elements_composite.inc
@@ -38,8 +38,10 @@ function webform_test_test_example_elements_composite() {
       '#open' => TRUE,
     ];
 
+    $element_key = str_replace(':', '_', $element_type);
+
     // Single value composite.
-    $data[$element_type . '_example'][$element_type] = $element;
+    $data[$element_key . '_example'][$element_key] = $element;
 
     // Multiple value composite.
     if ($webform_element->supportsMultipleValues()) {
@@ -48,7 +50,7 @@ function webform_test_test_example_elements_composite() {
       if ((!in_array($element_type, ['webform_contact']) && $webform_element->hasProperty('multiple__header'))) {
         $element['#multiple__header'] = TRUE;
       }
-      $data[$element_type . '_example'][$element_type . '_multiple'] = $element;
+      $data[$element_key . '_example'][$element_key . '_multiple'] = $element;
     }
   }
   return $data;
diff --git a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_states.inc b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_states.inc
index 76b79c7e1aa633931290af10a15309e6d9b20500..ed2d20197440bccad175443b64523f847f6e80cd 100644
--- a/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_states.inc
+++ b/web/modules/webform/tests/modules/webform_test/includes/webform_test.test_states.inc
@@ -75,7 +75,9 @@ function _webform_test_states($type, array $default_properties = []) {
     $element += $default_properties;
 
     $group = ($webform_element->isContainer($element)) ? 'containers' : 'elements';
-    $data[$group][$element_type] = $element;
+
+    $element_key = str_replace(':', '_', $element_type);
+    $data[$group][$element_key] = $element;
   }
 
   return $data['containers'] + $data['elements'];
diff --git a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
index 443369e524a0eb1f6abf4a7f6cb6c400885fcac8..25e5865c738b446f215bb453ce9fb4e30bcbe532 100644
--- a/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
+++ b/web/modules/webform/tests/modules/webform_test/webform_test.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test/webform_test.module b/web/modules/webform/tests/modules/webform_test/webform_test.module
index d908b423b56a21bb2a467328276028c1104424f2..9f0f4628da21a877e970e1d65ab7c4bab8313251 100644
--- a/web/modules/webform/tests/modules/webform_test/webform_test.module
+++ b/web/modules/webform/tests/modules/webform_test/webform_test.module
@@ -146,6 +146,7 @@ function _webform_test_get_element_preview($type, array $options = []) {
   static $skipped = [
     'webform_example_element',
     'webform_example_composite',
+    'webform_test_offcanvas_width_element',
   ];
 
   // Skip certain elements that should never be included in test forms.
@@ -166,6 +167,12 @@ function _webform_test_get_element_preview($type, array $options = []) {
     return FALSE;
   }
 
+  // Skip custom options.
+  // @see \Drupal\webform_options_custom\Entity\WebformOptionsCustom::getPreview
+  if (isset($element['#type']) && $element['#type'] === 'webform_options_custom') {
+    return FALSE;
+  }
+
   // Add known issues to #description.
   if ($options['issues']) {
     $issues = _webform_test_issues();
diff --git a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
index 02b7062d393d55088ef252045a0d589ca6d550d4..83b694736bc9a07f730089968813048ba1669289 100644
--- a/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_ajax/webform_test_ajax.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
index 58ef8847cc7557fe12dd4d18f7daeb5daa2c449b..f8275450bdae006721abcba3dc1ad490b2727b87 100644
--- a/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_alter_hooks/webform_test_alter_hooks.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
index 19650a6eb55d22120359b67f4eda774bf9201a15..2179671b18d575633a02a01bf20d647d2aa34b83 100644
--- a/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_context/webform_test_block_context.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
index f3eb976f0517451f3bcb3a3f6555112b40cfac0c..2856bb74d6ab1360377d0527093a500ece687038 100644
--- a/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_custom/webform_test_block_custom.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'drupal:block_content'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
index 270bdeb65f96064e5bfb244221c903661ba2ef32..99ee4a7562aa3d4e228729a26eb88e2f8b7f7892 100644
--- a/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_block_submission_limit/webform_test_block_submission_limit.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:block'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
index 5f3445f8a7c68e98633ecf57020423d858d333b2..c94d4fdb0c5ce6d2d3d26fec58a1f6ceb00a372e 100644
--- a/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_config_performance/webform_test_config_performance.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_editorial/webform_test_editorial.info.yml b/web/modules/webform/tests/modules/webform_test_editorial/webform_test_editorial.info.yml
index 013b5485c1bd6b5353363f4ed103ba9102f1d661..881ab90456a165d7d5da224730811c8a6d63e69d 100644
--- a/web/modules/webform/tests/modules/webform_test_editorial/webform_test_editorial.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_editorial/webform_test_editorial.info.yml
@@ -7,7 +7,7 @@ configure: webform_test_editorial.index
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
index b40c57b07249c1c122da50af04cdc76466349915..4c48a1a64c084e55b0b52eacf95260d91008919b 100644
--- a/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/webform_test_element.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
index 1c7216a1d4e61c6ae82d524ad796aed64f3ceec2..09d7b60f597540d2fd9bcfadc8a6a968055767a8 100644
--- a/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_element_input_masks/webform_test_element_input_masks.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
index 9054be4f745750583af5555d25b27cf52e53df58..1ce13e1aa48f4cdb9b354fbd08effd39b04251d7 100644
--- a/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/webform_test_entity_reference_views.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:views'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
index a4add6e0c96db358c300b5d681f352f41fed6493..3a41b49f8c4d611780375989877f3add501bc855 100644
--- a/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_exporter/webform_test_exporter.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
index 99e13afc5b5a0aa2efe50eea076dbfa466a628ea..19c69ec3579e27f210f107064cdee87d6584bb60 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/webform_test_handler.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
index 11d0bc560e41ae86e28e8fdd53efc84ab59f4ed1..eb89cefdb0a64cb64d8d3da53eda556fca7acae6 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_invoke_alter/webform_test_handler_invoke_alter.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
index e352becd8d0545a2d28943f01036da61db198d06..ca2cdbf0574e55fef7bc039e2d1425e2e9e69f29 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/webform_test_handler_remote_post.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
index beba7803b4099fc8c9d7fec1a6d8fe52607bca32..0fc65c43c1fcb50988c9b228836bc08e97d62753 100644
--- a/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_markup/webform_test_markup.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
index e56843741f7aec483ef5dad829968d226611a0d3..60c5023ecfa7a004b9040d8f3e5f0bdb24168694 100644
--- a/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_message_custom/webform_test_message_custom.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
index 4ed57f8c2e3d2b3cd47a49d973644d2517a98151..c67dba30e99be028dd1b2de741853c707fb3a41d 100644
--- a/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_options/webform_test_options.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
index 327f2d38b517696c15eb5522e03c6b3b87858f2f..6077d3969836e8bcab1bfe91e4d486cf66c6ecdb 100644
--- a/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_paragraphs/webform_test_paragraphs.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'paragraphs:paragraphs'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
index 51e388d3f7681221c54e3643de688299bde27599..2bf9b40a6e4998019f9324b95bf5cdfa5e83d3dc 100644
--- a/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_rest/webform_test_rest.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:serialization'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
index 4e9c6deeed11065e6a763877db0ad17c588aa961..86087b1b304e7c1948fe603dc1a8778d6d4d0199 100644
--- a/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_states/webform_test_states.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
index 4f57dfa459befa24a80819fc4e40950c76a7d54e..d95ce2edfb0c73250b25662e5c891ecccd14e257 100644
--- a/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_submissions/webform_test_submissions.info.yml
@@ -7,7 +7,7 @@ dependencies:
   - 'drupal:node'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
index 995bbafff48fb5091a5960e4b6d6e1a8b6b3cace..4a95a72d5aec4a6fa7b57cbeb8825cfa7560c50a 100644
--- a/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_third_party_settings/webform_test_third_party_settings.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
index 027cfad455f9d80a5aebb2f09dbd638fd7189e63..91551411d1b61adf02d2baf583461c1eb140232d 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/webform.webform.test_translation.yml
@@ -80,6 +80,19 @@ elements: |
     '#type': webform_computed_token
     '#title': 'Computed (token)'
     '#value': 'Site name: [site:name]'
+  autocomplete_options:
+    '#type': autocomplete
+    '#title': 'Autocomplete (options)'
+    '#format_items': comma
+    '#autocomplete_items': test_translation
+  autocomplete_custom:
+    '#type': autocomplete
+    '#title': 'Autocomplete (custom)'
+    '#format_items': comma
+    '#autocomplete_items':
+      - Seven
+      - Eight
+      - Nine
   actions:
     '#type': webform_actions
     '#title': 'Submit button(s)'
diff --git a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
index 815d2004e6445ad9bb5848d3a5087b3b1a1cc11a..ebda1e56dcd39dd6fbded0c22514ad6c1e6bd65b 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/webform_test_translation.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'webform:webform'
   - 'webform:webform_image_select'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
index da9576dac50581222b698b4c913865f290e7a315..42dbf387e6db6c2676031c426d874b6b854188f7 100644
--- a/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation_lingotek/webform_test_translation_lingotek.info.yml
@@ -10,7 +10,7 @@ dependencies:
   - 'lingotek:lingotek'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
index e671413ac3ef960bf8c1ac47a551ce756aee57e0..495ce940f41162a328490e111ce4999677aebcd3 100644
--- a/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_validate/webform_test_validate.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
index ab516a338c038f68823475386ae531219bf263a2..845cec1c32bb3bbf0c1618075eab0bb76f017dc3 100644
--- a/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_variant/webform_test_variant.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
index b94c103b2e07df87b00ed6da4fb059bdf58895d4..3521dee35ba568a6fa2187f1732f3e4d16f6fa36 100644
--- a/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_views/webform_test_views.info.yml
@@ -9,7 +9,7 @@ dependencies:
   - 'drupal:views'
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
index 033bbe7b260cc604ad11c9f519d65e8e2b0d668e..3ac3a7b3082d64a826bd0536fea9bf962eb3a7e8 100644
--- a/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
+++ b/web/modules/webform/tests/modules/webform_test_wizard_custom/webform_test_wizard_custom.info.yml
@@ -6,7 +6,7 @@ core_version_requirement: ^8.8 || ^9
 dependencies:
   - 'webform:webform'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/tests/src/Functional/Cache/WebformCacheTest.php b/web/modules/webform/tests/src/Functional/Cache/WebformCacheTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8cd84472cb60bfd0a381f6495e1f663fc36c70a9
--- /dev/null
+++ b/web/modules/webform/tests/src/Functional/Cache/WebformCacheTest.php
@@ -0,0 +1,113 @@
+<?php
+
+namespace Drupal\Tests\webform\Functional\Cache;
+
+use Drupal\Tests\webform\Functional\WebformBrowserTestBase;
+use Drupal\webform\Entity\Webform;
+use Drupal\webform\Entity\WebformSubmission;
+
+/**
+ * Tests for #cache properties.
+ *
+ * @group webform
+ */
+class WebformCacheTest extends WebformBrowserTestBase {
+
+  /**
+   * Test cache.
+   */
+  public function testCache() {
+    /** @var \Drupal\Core\Entity\EntityFormBuilder $entity_form_builder */
+    $entity_form_builder = \Drupal::service('entity.form_builder');
+
+    $account = $this->createUser();
+
+    /** @var \Drupal\webform\WebformInterface $webform */
+    $webform = Webform::load('contact');
+    /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
+    $webform_submission = WebformSubmission::create(['webform_id' => 'contact']);
+
+    /**************************************************************************/
+
+    $form = $entity_form_builder->getForm($webform_submission, 'add');
+
+    // Check that the form includes 'user.roles:authenticated' because the
+    // '[current-user:mail]' token.
+    $this->assertEqual($form['#cache'], [
+      'contexts' => [
+        'user.roles:authenticated',
+      ],
+      'tags' => [
+        'config:core.entity_form_display.webform_submission.contact.add',
+        'config:webform.settings',
+        'config:webform.webform.contact',
+        'webform:contact',
+      ],
+      'max-age' => -1,
+    ]);
+
+    // Check that the name element does not have #cache because the
+    // '[current-user:mail]' is set via
+    // \Drupal\webform\WebformSubmissionForm::setEntity
+    $this->assertFalse(isset($form['elements']['email']['#cache']));
+    $this->assertEqual($form['elements']['email']['#default_value'], '');
+
+    // Login and check the #cache property.
+    $this->drupalLogin($account);
+    $webform_submission->setOwnerId($account);
+    \Drupal::currentUser()->setAccount($account);
+
+    // Must create a new submission with new data which is set via
+    // WebformSubmissionForm::setEntity.
+    // @see \Drupal\webform\WebformSubmissionForm::setEntity
+    $webform_submission = WebformSubmission::create(['webform_id' => 'contact']);
+
+    $form = $entity_form_builder->getForm($webform_submission, 'add');
+
+    // Check that the form includes 'user.roles:authenticated' because the
+    // '[current-user:mail]' token.
+    $this->assertEqual($form['#cache'], [
+      'contexts' => [
+        'user',
+        'user.roles:authenticated',
+      ],
+      'tags' => [
+        'config:core.entity_form_display.webform_submission.contact.add',
+        'config:webform.settings',
+        'config:webform.webform.contact',
+        'user:2',
+        'webform:contact',
+      ],
+      'max-age' => -1,
+    ]);
+    $this->assertFalse(isset($form['elements']['email']['#cache']));
+    $this->assertEqual($form['elements']['email']['#default_value'], $account->getEmail());
+
+    // Add the '[current-user:mail]' to the name elements' description.
+    $element = $webform->getElementDecoded('email')
+      + ['#description' => '[current-user:mail]'];
+    $webform
+      ->setElementProperties('email', $element)
+      ->save();
+
+    $form = $entity_form_builder->getForm($webform_submission, 'add');
+
+    // Check that the 'email' element does have '#cache' property because the
+    // '#description' is using the '[current-user:mail]' token.
+    $this->assertEqual($form['elements']['email']['#cache'], [
+      'contexts' => [
+        'user',
+      ],
+      'tags' => [
+        'config:webform.settings',
+        'config:webform.webform.contact',
+        'user:2',
+        'webform:contact',
+      ],
+      'max-age' => -1,
+    ]);
+    $this->assertEqual($form['elements']['email']['#default_value'], $account->getEmail());
+    $this->assertEqual($form['elements']['email']['#description']['#markup'], $account->getEmail());
+  }
+
+}
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementCounterTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementCounterTest.php
index 00f99a89c2444ef42b718f6e3744dac0d2ea6fe1..88a00755fb04985e7d0f128dc79e5b08804c6c0b 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementCounterTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementCounterTest.php
@@ -23,13 +23,13 @@ public function testCounter() {
 
     // Check counters.
     $this->drupalGet('/webform/test_element_counter');
-    $this->assertRaw('<input data-counter-type="character" data-counter-minimum="5" data-counter-minimum-message="%d character(s) entered. This is custom text" class="js-webform-counter webform-counter form-text" data-drupal-selector="edit-counter-characters-min-message" type="text" id="edit-counter-characters-min-message" name="counter_characters_min_message" value="" size="60" maxlength="255" />');
+    $this->assertRaw('<input data-counter-type="character" data-counter-minimum="5" data-counter-minimum-message="%d character(s) entered. This is custom text" class="js-webform-counter webform-counter form-text" minlength="5" data-drupal-selector="edit-counter-characters-min-message" type="text" id="edit-counter-characters-min-message" name="counter_characters_min_message" value="" size="60" maxlength="255" />');
     $this->assertRaw('<input data-counter-type="character" data-counter-maximum="10" data-counter-maximum-message="%d character(s) remaining. This is custom text" class="js-webform-counter webform-counter form-text" data-drupal-selector="edit-counter-characters-max-message" type="text" id="edit-counter-characters-max-message" name="counter_characters_max_message" value="" size="60" maxlength="10" />');
     $this->assertRaw('<textarea data-counter-type="word" data-counter-minimum="5" data-counter-minimum-message="%d word(s) entered. This is custom text" class="js-webform-counter webform-counter form-textarea" data-drupal-selector="edit-counter-words-min-message" id="edit-counter-words-min-message" name="counter_words_min_message" rows="5" cols="60"></textarea>');
     $this->assertRaw('<textarea data-counter-type="word" data-counter-maximum="10" data-counter-maximum-message="%d character(s) remaining. This is custom text" class="js-webform-counter webform-counter form-textarea" data-drupal-selector="edit-counter-words-max-message" id="edit-counter-words-max-message" name="counter_words_max_message" rows="5" cols="60"></textarea>');
 
     // Check counter for XSS.
-    $this->assertRaw('<input data-counter-type="character" data-counter-minimum="5" data-counter-minimum-message="alert(&#039;XSS&#039;);&lt;em&gt;%d&lt;/em&gt; character(s) entered." data-counter-maximum="10" data-counter-maximum-message="alert(&#039;XSS&#039;);&lt;em&gt;%d&lt;/em&gt; character(s) remaining." class="js-webform-counter webform-counter form-text" data-drupal-selector="edit-counter-characters-xss" type="text" id="edit-counter-characters-xss" name="counter_characters_xss" value="" size="60" maxlength="10" />');
+    $this->assertRaw('<input data-counter-type="character" data-counter-minimum="5" data-counter-minimum-message="alert(&#039;XSS&#039;);&lt;em&gt;%d&lt;/em&gt; character(s) entered." data-counter-maximum="10" data-counter-maximum-message="alert(&#039;XSS&#039;);&lt;em&gt;%d&lt;/em&gt; character(s) remaining." class="js-webform-counter webform-counter form-text" minlength="5" data-drupal-selector="edit-counter-characters-xss" type="text" id="edit-counter-characters-xss" name="counter_characters_xss" value="" size="60" maxlength="10" />');
 
     // Check counter min/max validation error (min: 5 / max: 10).
     $edit = [
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
index f5f0d8c69b0a0827ebfa3deab45d76fee205554c..059d347b1ccf995539afed6a5fc5b5b5babeeb6d 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFormatTest.php
@@ -50,7 +50,6 @@ public function testFormat() {
     $body = $this->getMessageBody($submission, 'email_html');
     $elements = [
       'Checkbox (Value)' => 'Yes',
-      'Radios (Description)' => 'This is the <strong>first</strong> description',
       'Color (Color swatch)' => '<font color="#ffffcc">█</font> #ffffcc',
       'Email (Link)' => '<a href="mailto:example@example.com">example@example.com</a>',
       'Email confirm (Link)' => '<a href="mailto:example@example.com">example@example.com</a>',
@@ -89,7 +88,6 @@ public function testFormat() {
     $body = $this->getMessageBody($submission, 'email_text');
     $elements = [
       'Checkbox (Value): Yes',
-      'Radios (Description)' => 'This is the *first* description',
       'Color (Color swatch): #ffffcc',
       'Email (Link): example@example.com',
       'Email multiple (Link): example@example.com, test@test.com, random@random.com',
@@ -183,7 +181,7 @@ public function testFormat() {
       'Checkboxes (And)' => 'One, Two, and Three',
       'Checkboxes (Ordered list)' => '<ol><li>One</li><li>Two</li><li>Three</li></ol>',
       'Checkboxes (Unordered list)' => '<ul><li>One</li><li>Two</li><li>Three</li></ul>',
-      'Checkboxes (Checklist)' => '<span style="font-size: 1.4em; line-height: 1em">☑</span> One<br /><span style="font-size: 1.4em; line-height: 1em">☑</span> Two<br /><span style="font-size: 1.4em; line-height: 1em">☑</span> Three<br />',
+      'Checkboxes (Checklist (☑/☐))' => '<span style="font-size: 1.4em; line-height: 1em">☑</span> One<br /><span style="font-size: 1.4em; line-height: 1em">☑</span> Two<br /><span style="font-size: 1.4em; line-height: 1em">☑</span> Three<br />',
     ];
     foreach ($elements as $label => $value) {
       $this->assertStringContainsString('<b>' . $label . '</b><br />' . $value, $body, new FormattableMarkup('Found @label: @value', [
@@ -217,7 +215,7 @@ public function testFormat() {
 - One
 - Two
 - Three',
-      'Checkboxes (Checklist):
+      'Checkboxes (Checklist (☑/☐)):
 ☑ One
 ☑ Two
 ☑ Three',
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementInputMaskTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementInputMaskTest.php
index 274fe6e5216b3e43c5b87a7b8a471e9a05f40f5b..d3598d172063b8107ac9f86ded828ffae7af0faa 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementInputMaskTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementInputMaskTest.php
@@ -34,6 +34,8 @@ public function testInputMask() {
     // Check default values.
     $this->postSubmission($webform);
     $this->assertRaw("currency: '$ 1.00'
+currency_negative: '-$ 1.00'
+currency_positive_negative: '$ 1.00'
 datetime: ''
 decimal: ''
 email: ''
@@ -57,6 +59,8 @@ public function testInputMask() {
       'decimal' => '9.9',
       'ip' => '255.255.255.255',
       'currency' => '$ 9.99',
+      'currency_negative' => '-$ 9.99',
+      'currency_positive_negative' => '-$ 9.99',
       'percentage' => '99 %',
       'phone' => '(999) 999-9999',
       'license_plate' => '9-AAA-999',
@@ -70,6 +74,8 @@ public function testInputMask() {
     ];
     $this->postSubmission($webform, $edit);
     $this->assertRaw("currency: '$ 9.99'
+currency_negative: '-$ 9.99'
+currency_positive_negative: '-$ 9.99'
 datetime: '2007-06-09''T''17:46:21'
 decimal: '9.9'
 email: example@example.com
@@ -89,6 +95,8 @@ public function testInputMask() {
     // Check pattern validation error messages.
     $edit = [
       'currency' => '$ 9.9_',
+      'currency_negative' => '-$ 9.9_',
+      'currency_positive_negative' => '-$ 9.9_',
       'decimal' => '9._',
       'ip' => '255.255.255.__',
       'mac' => '99-99-99-99-99-_)',
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
index df56c8ec4579f9876b55cb088a7c1e9eca954240..0c107bab9ba0011fe991ae81826c73d41b63a3e7 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
@@ -34,7 +34,7 @@ public function testLikertElement() {
     // Check advanced likert element with N/A.
     $this->assertPattern('#<tr>\s+<th><span class="visually-hidden">Questions</span></th>\s+<th>Option 1</th>\s+<th>Option 2</th>\s+<th>Option 3</th>\s+<th>Not applicable</th>\s+</tr>#');
     $this->assertRaw('<td><div class="js-form-item form-item js-form-type-radio form-item-likert-advanced-q1 js-form-item-likert-advanced-q1">');
-    $this->assertRaw('<input aria-labelledby="edit-likert-advanced-table-q1-likert-question" data-drupal-selector="edit-likert-advanced-q1" type="radio" id="edit-likert-advanced-q1--4" name="likert_advanced[q1]" value="N/A" class="form-radio" />');
+    $this->assertRaw('<input aria-labelledby="edit-likert-advanced-table-q1-likert-question" required="required" aria-required="true" data-drupal-selector="edit-likert-advanced-q1" type="radio" id="edit-likert-advanced-q1--4" name="likert_advanced[q1]" value="N/A" class="form-radio" />');
     $this->assertRaw('<label for="edit-likert-advanced-q1--4" class="option"><span class="webform-likert-label visually-hidden">Not applicable</span></label>');
 
     // Check likert with description.
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
index a102f6e4061015405321c6f97bf043fbd9173203..be4d48afa295970c40e1e85c63d330c2eeb1a246 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementOtherTest.php
@@ -40,7 +40,7 @@ public function testBuildingOtherElements() {
     $this->assertRaw('<select data-webform-required-error="This is a custom required error message." data-drupal-selector="edit-select-other-advanced-select" id="edit-select-other-advanced-select" name="select_other_advanced[select]" class="form-select required" required="required" aria-required="true">');
     $this->assertRaw('<option value="_other_" selected="selected">Is there another option you wish to enter?</option>');
     $this->assertRaw('<label for="edit-select-other-advanced-other">Other</label>');
-    $this->assertRaw('<input data-webform-required-error="This is a custom required error message." data-counter-type="character" data-counter-minimum="4" data-counter-maximum="10" class="js-webform-counter webform-counter form-text" data-drupal-selector="edit-select-other-advanced-other" aria-describedby="edit-select-other-advanced-other--description" type="text" id="edit-select-other-advanced-other" name="select_other_advanced[other]" value="Four" size="20" maxlength="10" placeholder="What is this other option" />');
+    $this->assertRaw('<input data-webform-required-error="This is a custom required error message." data-counter-type="character" data-counter-minimum="4" data-counter-maximum="10" class="js-webform-counter webform-counter form-text" minlength="4" data-drupal-selector="edit-select-other-advanced-other" aria-describedby="edit-select-other-advanced-other--description" type="text" id="edit-select-other-advanced-other" name="select_other_advanced[other]" value="Four" size="20" maxlength="10" placeholder="What is this other option" />');
     $this->assertRaw('<div id="edit-select-other-advanced-other--description" class="webform-element-description">Other select description</div>');
 
     // Check multiple select_other.
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
index f8956415c36949853f46519f0abfe258ebeb4c41..8518c2d907b43c59379da3e56165366c8fd74ae0 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
@@ -4371,6 +4371,7 @@ protected function getExpectedElementDefaultProperties() {
   title_attributes: {  }
   title_display: ''
   title_tag: h2
+  description_display: ''
 webform_select_other:
   access: true
   access_create_permissions: {  }
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementScaleTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementScaleTest.php
index d9709df96da70149ec32fd401c645687f192c2f1..fa6c9eca9a52d9a4535db30ce46df1da71e0b238 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementScaleTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementScaleTest.php
@@ -34,10 +34,12 @@ public function testRating() {
     // Check processing.
     $edit = [
       'scale' => 1,
+      'scale_required' => 1,
       'scale_text' => 2,
     ];
     $this->drupalPostForm('/webform/test_element_scale', $edit, 'Submit');
     $this->assertRaw("scale: '1'
+scale_required: '1'
 scale_text: '2'
 scale_text_above: null
 scale_small: null
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
index e4360ccaa7f9fb2d0f70cc2f180541fbf52d57e1..fe71408838de4aa1f08c8bd27065d1240cbf0464 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
@@ -35,6 +35,18 @@ public function testSection() {
     // Check section title_display: invisible.
     $this->assertRaw('<h2 class="visually-hidden webform-section-title">webform_section_title_invisible</h2>');
 
+    // Check section description_display: default.
+    $this->assertPattern('/Display default description.+name="webform_section_description_display_default_textfield"/ms');
+
+    // Check section description_display: before.
+    $this->assertPattern('/Display before description.+name="webform_section_description_display_before_textfield"/ms');
+
+    // Check section description_display: after.
+    $this->assertPattern('/name="webform_section_description_display_after_textfield".+Display after description/ms');
+
+    // Check section description_display: invisible.
+    $this->assertRaw('<div class="description"><div id="edit-webform-section-description-display-invisible--description" class="webform-element-description visually-hidden">Display invisible description.</div>');
+
     // Check change default title tag.
     \Drupal::configFactory()->getEditable('webform.settings')
       ->set('element.default_section_title_tag', 'address')
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementTermsOfServiceTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementTermsOfServiceTest.php
index c814cf11ed1e86fff2922f1a5d692f64c9c4a8fd..3687047785ba4882c5a87f1bd983aa76e51fb777 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementTermsOfServiceTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementTermsOfServiceTest.php
@@ -44,7 +44,7 @@ public function testTermsOfService() {
 
     // Check validation.
     $this->drupalPostForm('/webform/test_element_terms_of_service', [], 'Preview');
-    $this->assertRaw('I agree to the {terms of service}. (default) field is required.');
+    $this->assertRaw('I agree to the terms of service. (default) field is required.');
 
     // Check preview.
     $edit = [
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementValidateMinlengthTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementValidateMinlengthTest.php
index 8d4cb823c032e3da7452fd33ee1cb0be89a01797..4e06b42b586eb229f51cbcf7eb6135a00bb2b1e3 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementValidateMinlengthTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementValidateMinlengthTest.php
@@ -22,8 +22,19 @@ class WebformElementValidateMinlengthTest extends WebformElementBrowserTestBase
    * Tests element validate minlength.
    */
   public function testValidateMinlength() {
+
     $webform = Webform::load('test_element_validate_minlength');
 
+    /* Render */
+
+    $this->drupalGet('/webform/test_element_validate_minlength');
+
+    // Check minlength attribute.
+    $this->assertCssSelect('#edit-minlength-textfield[minlength="5"]');
+    $this->assertCssSelect('#edit-minlength-textfield-required[minlength="5"]');
+
+    /* Validate */
+
     // Check minlength validation.
     $this->postSubmission($webform, ['minlength_textfield' => 'X']);
     $this->assertRaw('<em class="placeholder">minlength_textfield</em> cannot be less than <em class="placeholder">5</em> characters but is currently <em class="placeholder">1</em> characters long.');
diff --git a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerEmailAdvancedTest.php b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerEmailAdvancedTest.php
index 13481bc328143620c400b947e8df54223e7bcdc4..f035f5e46ebe78c5041ce5044e48cf2914a8f287 100644
--- a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerEmailAdvancedTest.php
+++ b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerEmailAdvancedTest.php
@@ -60,13 +60,14 @@ public function testAdvancedEmailHandler() {
     $this->assertEqual($sent_email['params']['custom_parameter'], 'test');
     $this->assertArrayNotHasKey('parameters', $sent_email['params']);
 
-    $email_handler = $webform->getHandler('email');
-    $configuration = $email_handler->getConfiguration();
-    $configuration['settings']['reply_to'] = '';
-    $configuration['settings']['return_path'] = '';
-    $configuration['settings']['sender_mail'] = '';
-    $configuration['settings']['sender_name'] = '';
-    $email_handler->setConfiguration($configuration);
+    $webform
+      ->getHandler('email')
+      ->setSettings([
+        'reply_to' => '',
+        'return_path' => '',
+        'sender_mail' => '',
+        'sender_name' => '',
+      ]);
     $webform->save();
 
     // Check no custom reply to and return path.
@@ -168,9 +169,7 @@ public function testAdvancedEmailHandler() {
     $email_handler = $webform->getHandler('email');
 
     // Exclude file attachment.
-    $configuration = $email_handler->getConfiguration();
-    $configuration['settings']['exclude_attachments'] = TRUE;
-    $email_handler->setConfiguration($configuration);
+    $email_handler->setSetting('exclude_attachments', TRUE);
     $webform->save();
 
     // Check excluding attachments.
@@ -180,9 +179,7 @@ public function testAdvancedEmailHandler() {
     $this->assertArrayHasKey('filecontent', $sent_email['params']['attachments'][0]);
 
     // Exclude file element.
-    $configuration = $email_handler->getConfiguration();
-    $configuration['settings']['excluded_elements'] = ['file' => 'file'];
-    $email_handler->setConfiguration($configuration);
+    $email_handler->setSetting('excluded_elements', ['file' => 'file']);
     $webform->save();
 
     // Check excluding files.
@@ -197,10 +194,10 @@ public function testAdvancedEmailHandler() {
     $this->assertStringNotContainsString('<b>Optional</b><br />{Empty}<br /><br />', $sent_email['params']['body']);
 
     // Include empty.
-    $configuration = $email_handler->getConfiguration();
-    $configuration['settings']['exclude_empty'] = FALSE;
-    $configuration['settings']['exclude_empty_checkbox'] = FALSE;
-    $email_handler->setConfiguration($configuration);
+    $email_handler->setSettings([
+      'exclude_empty' => FALSE,
+      'exclude_empty_checkbox' => FALSE
+    ]);
     $webform->save();
 
     // Check empty included.
@@ -218,10 +215,8 @@ public function testAdvancedEmailHandler() {
     $this->assertStringContainsString('<b>Notes</b><br />These notes are private.<br /><br />', $sent_email['params']['body']);
 
     // Disable ignore_access.
-    $email_handler = $webform->getHandler('email');
-    $configuration = $email_handler->getConfiguration();
-    $configuration['settings']['ignore_access'] = FALSE;
-    $email_handler->setConfiguration($configuration);
+    $webform->getHandler('email')
+      ->setSetting('ignore_access', FALSE);
     $webform->save();
 
     // Check that private is excluded from email because 'ignore_access' is FALSE.
diff --git a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
index c240d08f1e011deaa423bedef948445989116460..b9828df0e531acf1d530643cf2daae106cc95791 100644
--- a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
+++ b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
@@ -133,12 +133,10 @@ public function testRemotePostHandler() {
     $this->assertNoRaw('Unable to process this submission. Please contact the site administrator.');
 
     // Check excluded data.
-    $handler = $webform->getHandler('remote_post');
-    $configuration = $handler->getConfiguration();
-    $configuration['settings']['excluded_data'] = [
-      'last_name' => 'last_name',
-    ];
-    $handler->setConfiguration($configuration);
+    $webform->getHandler('remote_post')
+      ->setSetting('excluded_data', [
+        'last_name' => 'last_name',
+      ]);
     $webform->save();
     $sid = $this->postSubmission($webform);
     $this->assertRaw('first_name: John');
@@ -159,9 +157,7 @@ public function testRemotePostHandler() {
 
     // Check default custom response message.
     $handler = $webform->getHandler('remote_post');
-    $configuration = $handler->getConfiguration();
-    $configuration['settings']['message'] = 'This is a custom response message';
-    $handler->setConfiguration($configuration);
+    $handler->setSetting('message', 'This is a custom response message');
     $webform->save();
     $this->postSubmission($webform, ['response_type' => '500']);
     $this->assertRaw('Failed to process completed request.');
@@ -206,9 +202,7 @@ public function testRemotePostHandler() {
 
     // Set remote post error URL to homepage.
     $handler = $webform->getHandler('remote_post');
-    $configuration = $handler->getConfiguration();
-    $configuration['settings']['error_url'] = $webform->toUrl('canonical', ['query' => ['error' => '1']])->toString();
-    $handler->setConfiguration($configuration);
+    $handler->setSetting('error_url', $webform->toUrl('canonical', ['query' => ['error' => '1']])->toString());
     $webform->save();
 
     // Check 404 Not Found with custom error uri.
@@ -314,6 +308,20 @@ public function testRemotePostHandler() {
     /** @var \Drupal\webform\WebformInterface $webform */
     $webform = Webform::load('test_handler_remote_post_cast');
 
+    $this->postSubmission($webform);
+    $this->assertRaw("form_params:
+  boolean_true: true
+  integer: 100
+  float: 100.01
+  checkbox: false
+  number: ''
+  number_multiple: {  }
+  custom_composite:
+    -
+      textfield: ''
+      number: !!float 0
+      checkbox: false");
+
     $edit = [
       'checkbox' => TRUE,
       'number' => '10',
diff --git a/web/modules/webform/tests/src/Functional/Token/WebformTokenSuffixesTest.php b/web/modules/webform/tests/src/Functional/Token/WebformTokenSuffixesTest.php
index 1eb39b94efd979749aad6a5a54d8a1b2f0afc890..215f11e9c177a08ecb4dff6f17ef786b3cf07bf2 100644
--- a/web/modules/webform/tests/src/Functional/Token/WebformTokenSuffixesTest.php
+++ b/web/modules/webform/tests/src/Functional/Token/WebformTokenSuffixesTest.php
@@ -64,6 +64,22 @@ public function testTokenSuffixes() {
         'message' => 'Basic token with decoded HTML markup',
         'options' => [],
       ],
+      // :urlencode.
+      [
+        'site_name' => 'Two words',
+        'text' => '[site:name:urlencode]',
+        'expected' => 'Two+words',
+        'message' => 'Basic token with url encode',
+        'options' => [],
+      ],
+      // :rawurlencode.
+      [
+        'site_name' => 'Two words',
+        'text' => '[site:name:rawurlencode]',
+        'expected' => 'Two%20words',
+        'message' => 'Basic token with raw url encode',
+        'options' => [],
+      ],
       // :xmlencode.
       [
         'site_name' => '<b>Testing</b>',
diff --git a/web/modules/webform/tests/src/Functional/WebformEditorTest.php b/web/modules/webform/tests/src/Functional/WebformEditorTest.php
index 98ee003a833b7cc5aaff032cf46b9d7b0d9ed270..3f648174e5be80d9bb7d3cd3073ad61bd0ad33f9 100644
--- a/web/modules/webform/tests/src/Functional/WebformEditorTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformEditorTest.php
@@ -20,7 +20,7 @@ class WebformEditorTest extends WebformBrowserTestBase {
    *
    * @var array
    */
-  public static $modules = ['file', 'webform'];
+  public static $modules = ['file', 'filter', 'webform', 'webform_ui'];
 
   /**
    * The file usage service.
@@ -35,6 +35,9 @@ class WebformEditorTest extends WebformBrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
+    // Create filters.
+    $this->createFilters();
+
     $this->fileUsage = $this->container->get('file.usage');
   }
 
@@ -57,6 +60,7 @@ public function testWebformSettingsFiles() {
     $this->assertTrue($images[0]->isTemporary());
     $this->assertTrue($images[1]->isTemporary());
     $this->assertTrue($images[2]->isTemporary());
+    $this->assertTrue($images[3]->isTemporary());
 
     // Upload the first image.
     $edit = [
@@ -69,6 +73,7 @@ public function testWebformSettingsFiles() {
     $this->assertFalse($images[0]->isTemporary());
     $this->assertTrue($images[1]->isTemporary());
     $this->assertTrue($images[2]->isTemporary());
+    $this->assertTrue($images[3]->isTemporary());
 
     // Check create first image file usage.
     $this->assertIdentical(['editor' => ['webform' => ['contact' => '1']]], $this->fileUsage->listUsage($images[0]), 'The file has 1 usage.');
@@ -84,6 +89,7 @@ public function testWebformSettingsFiles() {
     $this->assertFalse($images[0]->isTemporary());
     $this->assertFalse($images[1]->isTemporary());
     $this->assertTrue($images[2]->isTemporary());
+    $this->assertTrue($images[3]->isTemporary());
 
     // Check first and second image file usage.
     $this->assertIdentical(['editor' => ['webform' => ['contact' => '1']]], $this->fileUsage->listUsage($images[0]), 'The file has 1 usage.');
@@ -100,22 +106,29 @@ public function testWebformSettingsFiles() {
     $this->assertTrue($images[0]->isTemporary());
     $this->assertFalse($images[1]->isTemporary());
     $this->assertTrue($images[2]->isTemporary());
+    $this->assertTrue($images[3]->isTemporary());
 
     // Check first and second image file usage.
     $this->assertIdentical([], $this->fileUsage->listUsage($images[0]), 'The file has 0 usage.');
     $this->assertIdentical(['editor' => ['webform' => ['contact' => '1']]], $this->fileUsage->listUsage($images[1]), 'The file has 1 usage.');
 
-    // Set all files back to temporary.
+    // Check that processed text's image is parsed.
     $edit = [
-      'description[value]' => '',
+      'key' => 'test',
+      'properties[text][value]' => '<img data-entity-type="file" data-entity-uuid="' . $images[3]->uuid() . '"/>',
     ];
-    $this->drupalPostForm('/admin/structure/webform/manage/contact/settings', $edit, 'Save');
+    $this->drupalPostForm('/admin/structure/webform/manage/contact/element/add/processed_text', $edit, 'Save');
     $this->reloadImages($images);
 
-    // Check that first and second image are temporary.
-    $this->assertTrue($images[0]->isTemporary());
-    $this->assertTrue($images[1]->isTemporary());
-    $this->assertTrue($images[2]->isTemporary());
+    // Check that fourth is not temporary.
+    $this->assertFalse($images[3]->isTemporary());
+
+    // Delete the processed text.
+    $this->drupalPostForm('admin/structure/webform/manage/contact/element/test/delete', [], 'Delete');
+    $this->reloadImages($images);
+
+    // Check that fourth image is temporary.
+    $this->assertTrue($images[3]->isTemporary());
 
     // Stop marking unused files as temporary.
     \Drupal::configFactory()->getEditable('webform.settings')
diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
index 461f8c39383f3e679ac2d6435b3c0906b576ccac..824fe6fb8b90057f71a4a271536dd2af45b36f6e 100644
--- a/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformSubmissionTokenOperationsTest.php
@@ -62,6 +62,9 @@ public function testTokenOperationsTest() {
     $this->assertRaw('Submission information');
     $this->assertRaw('<label>textfield</label>');
 
+    // Check that the 'Delete submission' link has token appended to it.
+    $this->assertLinkByHref($webform_submission->getTokenUrl('delete')->setAbsolute(FALSE)->toString());
+
     // Check token view access denied.
     $webform->setSetting('token_view', FALSE)->save();
     $this->drupalLogin($normal_user);
@@ -70,6 +73,7 @@ public function testTokenOperationsTest() {
     $this->assertNoRaw('Submission information');
     $this->assertNoRaw('<label>textfield</label>');
 
+
     /**************************************************************************/
     /* Update */
     /**************************************************************************/
diff --git a/web/modules/webform/tests/src/FunctionalJavascript/States/WebformStatesRequiredJavaScriptTest.php b/web/modules/webform/tests/src/FunctionalJavascript/States/WebformStatesRequiredJavaScriptTest.php
index 0c7a16acab963823cc317d59096d570c3c8f2327..29e2f2d467a696426d948fc587a87cce7bc81176 100644
--- a/web/modules/webform/tests/src/FunctionalJavascript/States/WebformStatesRequiredJavaScriptTest.php
+++ b/web/modules/webform/tests/src/FunctionalJavascript/States/WebformStatesRequiredJavaScriptTest.php
@@ -31,10 +31,8 @@ class WebformStatesRequiredJavaScriptTest extends WebformWebDriverTestBase {
    * Tests webform (custom) #states required logic.
    */
   public function testRequiredState() {
-    // @todo Fix random test failure that can't be reproduced locally.
-    // My best guess is a different version of the clientside_validation.module
-    // is being enabled via DrupalCI.
-    $this->assert(TRUE);
+    // @todo Fix broken test on Drupal.org that working as expected locally.
+    $this->assertTrue(TRUE);
     return;
 
     $session = $this->getSession();
diff --git a/web/modules/webform/tests/src/Unit/Cache/WebformBubbleableMetadataTest.php b/web/modules/webform/tests/src/Unit/Cache/WebformBubbleableMetadataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..32611cf8f4335554b54ceb785dad75d4ee73d72b
--- /dev/null
+++ b/web/modules/webform/tests/src/Unit/Cache/WebformBubbleableMetadataTest.php
@@ -0,0 +1,85 @@
+<?php
+
+namespace Drupal\Tests\webform\Unit\Cache;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Tests\UnitTestCase;
+use Drupal\webform\Cache\WebformBubbleableMetadata;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * Tests webform bubbleable metadata.
+ *
+ * @coversDefaultClass \Drupal\webform\Cache\WebformBubbleableMetadata
+ * @group Cache
+ */
+class WebformBubbleableMetadataTest extends UnitTestCase {
+
+  /**
+   * Tests appendTo renderable array.
+   *
+   * @param \Drupal\webform\Cache\WebformBubbleableMetadata $bubbleable_metadata
+   *   Bubbleable metadata.
+   * @param array $build
+   *   A render array.
+   * @param array $expected
+   *   The expected render array.
+ * @covers ::appendTo
+   *
+   * @dataProvider providerTestAppendTo
+   *
+   * @see \Drupal\Tests\Core\Cache\CacheableMetadataTest
+   */
+  public function testAppendTo(WebformBubbleableMetadata $bubbleable_metadata, array $build, array $expected) {
+    // Mock CacheContextsManager::assertValidTokens
+    // @see \Drupal\Core\Cache\Cache::mergeContexts
+    $cache_contexts_manager = $this->getMockBuilder('Drupal\Core\Cache\Context\CacheContextsManager')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $cache_contexts_manager->method('assertValidTokens')->willReturn(TRUE);
+    $container = new ContainerBuilder();
+    $container->set('cache_contexts_manager', $cache_contexts_manager);
+    \Drupal::setContainer($container);
+
+    /**************************************************************************/
+
+    $bubbleable_metadata->appendTo($build);
+    $this->assertEquals($expected, $build);
+  }
+
+  /**
+   * Provides test data for testAppendTo().
+   *
+   * @return array
+   */
+  public function providerTestAppendTo() {
+    return [
+      [
+        (new WebformBubbleableMetadata())->setCacheContexts(['bar']),
+        [],
+        ['#cache' => ['contexts' => ['bar'], 'tags' => [], 'max-age' => Cache::PERMANENT], '#attached' => []],
+      ],
+      [
+        (new WebformBubbleableMetadata())->setCacheContexts(['bar']),
+        ['#cache' => ['contexts' => ['bar']]],
+        ['#cache' => ['contexts' => ['bar'], 'tags' => [], 'max-age' => Cache::PERMANENT], '#attached' => []],
+      ],
+      [
+        (new WebformBubbleableMetadata())->setCacheContexts(['bar', 'foo']),
+        ['#cache' => ['contexts' => ['bar']]],
+        ['#cache' => ['contexts' => ['bar', 'foo'], 'tags' => [], 'max-age' => Cache::PERMANENT], '#attached' => []],
+      ],
+      [
+        (new WebformBubbleableMetadata())->setCacheMaxAge(99),
+        [],
+        ['#cache' => ['contexts' => [], 'tags' => [], 'max-age' => 99], '#attached' => []],
+      ],
+      [
+        (new WebformBubbleableMetadata())->setCacheContexts(['bar']),
+        ['#cache' => ['max-age' => 99]],
+        ['#cache' => ['contexts' => ['bar'], 'tags' => [], 'max-age' => 99], '#attached' => []],
+      ],
+    ];
+  }
+
+}
diff --git a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
index e474d97fcf6d1661e54afd97bc96b9cf45bb38d2..c65e2d4cfc1182d9320d5b876e997c8d6b5321ad 100644
--- a/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
+++ b/web/modules/webform/tests/themes/webform_test_bartik/webform_test_bartik.info.yml
@@ -5,7 +5,7 @@ name: 'Webform Bartik test'
 description: 'Support theme for webform Bartik integration testing.'
 package: 'Webform Testing'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/webform.info.yml b/web/modules/webform/webform.info.yml
index 3a5d3d6a74bfc68083cd909ff558689427f42998..78eda227c348a8d1a6c5be2cac87ac619cda7f0d 100644
--- a/web/modules/webform/webform.info.yml
+++ b/web/modules/webform/webform.info.yml
@@ -8,7 +8,7 @@ dependencies:
   - 'drupal:field'
   - 'drupal:user'
 
-# Information added by Drupal.org packaging script on 2021-05-05
-version: '6.0.3'
+# Information added by Drupal.org packaging script on 2021-08-25
+version: '6.0.5'
 project: 'webform'
-datestamp: 1620250261
+datestamp: 1629903950
diff --git a/web/modules/webform/webform.libraries.yml b/web/modules/webform/webform.libraries.yml
index db04f2273a72959c3a7bb997300b179d5f7ab176..da9f7ed477a34adb8188d3c9f81064e232802401 100644
--- a/web/modules/webform/webform.libraries.yml
+++ b/web/modules/webform/webform.libraries.yml
@@ -1023,15 +1023,15 @@ libraries.choices:
 
 libraries.codemirror.text:
   remote: https://github.com/codemirror/codemirror
-  version: &webform_codemirror_version '5.53.2'
+  version: &webform_codemirror_version '5.61.1'
   license: &webform_codemirror_license
     name: MIT
     url: http://codemirror.net/LICENSE
     gpl-compatible: true
   directory: &webform_codemirror_directory codemirror
   cdn: &webform_codemirror_cdn
-    /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/
-    /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.53.2/
+    /libraries/codemirror/lib/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.61.1/
+    /libraries/codemirror/: https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.61.1/
   css:
     component:
       /libraries/codemirror/lib/codemirror.css: {}
@@ -1129,14 +1129,14 @@ libraries.algolia.places:
 
 libraries.jquery.inputmask:
   remote: https://github.com/RobinHerbots/jquery.inputmask
-  version: '5.0.5'
+  version: '5.0.6'
   license:
     name: MIT
     url: http://opensource.org/licenses/mit-license.php
     gpl-compatible: true
   directory: jquery.inputmask
   cdn:
-    /libraries/jquery.inputmask/: https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@5.0.5/
+    /libraries/jquery.inputmask/: https://cdn.jsdelivr.net/gh/RobinHerbots/Inputmask@5.0.6/
   js:
     /libraries/jquery.inputmask/dist/jquery.inputmask.min.js: { minified: true }
   dependencies:
@@ -1233,14 +1233,14 @@ libraries.jquery.textcounter:
 
 libraries.jquery.timepicker:
   remote: https://github.com/jonthornton/jquery-timepicker
-  version: '1.13.14'
+  version: '1.13.18'
   license:
     name: MIT
     url: http://opensource.org/licenses/mit-license.php
     gpl-compatible: true
   directory: jquery.timepicker
   cdn:
-    /libraries/jquery.timepicker/: https://cdn.jsdelivr.net/gh/jonthornton/jquery-timepicker@1.13.14/
+    /libraries/jquery.timepicker/: https://cdn.jsdelivr.net/gh/jonthornton/jquery-timepicker@1.13.18/
   css:
     component:
       /libraries/jquery.timepicker/jquery.timepicker.min.css: { minified: true }
diff --git a/web/modules/webform/webform.module b/web/modules/webform/webform.module
index 1c3aad37bbda3aaa99024172ca4f39aee01243b6..2a1577d73739df2c316342bf4df4f0a46d178201 100644
--- a/web/modules/webform/webform.module
+++ b/web/modules/webform/webform.module
@@ -259,23 +259,33 @@ function webform_menu_local_tasks_alter(&$data, $route_name, RefinableCacheableD
   }
 
   // Allow webform query string parameters to be transferred
-  // from canonical to test URL.
+  // from a canonical URL to a test URL.
+  //
+  // Please note: This behavior is only applicable when a user can
+  // test a webform.
   $route_names = [
-    'entity.webform.canonical', 'entity.webform.test_form',
-    'entity.node.canonical', 'entity.node.webform.test_form',
+    'entity.webform.test_form' => 'entity.webform.canonical',
+    'entity.node.webform.test_form' => 'entity.node.canonical',
   ];
-  if (in_array($route_name, $route_names)) {
-    if ($query = \Drupal::request()->query->all()) {
-      foreach ($route_names as $route_name) {
-        if (isset($data['tabs'][0][$route_name])) {
-          $url =& $data['tabs'][0][$route_name]['#link']['url'];
-          $url->setOption('query', $query);
+  if (in_array($route_name, $route_names) || array_key_exists($route_name, $route_names)) {
+    $query = \Drupal::request()->query->all();
+    $has_test_tab = FALSE;
+    foreach ($route_names as $test_route_name => $view_route_name) {
+      if (isset($data['tabs'][0][$test_route_name])
+        && isset($data['tabs'][0][$test_route_name])) {
+        $has_test_tab = TRUE;
+        if ($query) {
+          $data['tabs'][0][$test_route_name]['#link']['url']
+            ->setOption('query', $query);
+          $data['tabs'][0][$view_route_name]['#link']['url']
+            ->setOption('query', $query);
         }
       }
     }
-
     // Query string to cache context webform canonical and test routes.
-    $cacheability->addCacheContexts(['url.query_args']);
+    if ($has_test_tab) {
+      $cacheability->addCacheContexts(['url.query_args']);
+    }
   }
 }
 
@@ -303,6 +313,7 @@ function webform_token_info_alter(&$data) {
     '<ul>' .
     '<li>' . t('<code>:clear</code> removes the token when it is not replaced.') . '</li>' .
     '<li>' . t('<code>:urlencode</code> URL encodes returned value.') . '</li>' .
+    '<li>' . t('<code>:rawurlencode</code> Raw URL encodes returned value with only hex digits.') . '</li>' .
     '<li>' . t('<code>:xmlencode</code> XML encodes returned value.') . '</li>' .
     '<li>' . t('<code>:htmldecode</code> decodes HTML entities in returned value.') . '<br/><b>' . t('This suffix has security implications.') . '</b><br/>' . t('Use <code>:htmldecode</code> with <code>:striptags</code>.') . '</li>' .
     '<li>' . t('<code>:striptags</code> removes all HTML tags from returned value.') . '</li>' .