diff --git a/composer.lock b/composer.lock
index 143db1183a6b25681a4417eaca8d1ea3c5cda9f5..06555cc03665309c910c79454b71aff187fe9f05 100644
--- a/composer.lock
+++ b/composer.lock
@@ -7980,17 +7980,17 @@
         },
         {
             "name": "drupal/webform",
-            "version": "6.0.5",
+            "version": "6.1.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/webform.git",
-                "reference": "6.0.5"
+                "reference": "6.1.0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/webform-6.0.5.zip",
-                "reference": "6.0.5",
-                "shasum": "a925d604e3b4a29f5a688a8e84fdb3a93490f641"
+                "url": "https://ftp.drupal.org/files/projects/webform-6.1.0.zip",
+                "reference": "6.1.0",
+                "shasum": "0dae48cc100133a4144ca8219d5506b917888588"
             },
             "require": {
                 "drupal/core": "^8.8 || ^9"
@@ -8038,8 +8038,8 @@
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "6.0.5",
-                    "datestamp": "1629909787",
+                    "version": "6.1.0",
+                    "datestamp": "1635676666",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 87ceb137906950eb00cd47f903e25c4be574bc49..f2c3cba795c6794dae580de3c484c271636a68e1 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -8315,18 +8315,18 @@
         },
         {
             "name": "drupal/webform",
-            "version": "6.0.5",
-            "version_normalized": "6.0.5.0",
+            "version": "6.1.0",
+            "version_normalized": "6.1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://git.drupalcode.org/project/webform.git",
-                "reference": "6.0.5"
+                "reference": "6.1.0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/webform-6.0.5.zip",
-                "reference": "6.0.5",
-                "shasum": "a925d604e3b4a29f5a688a8e84fdb3a93490f641"
+                "url": "https://ftp.drupal.org/files/projects/webform-6.1.0.zip",
+                "reference": "6.1.0",
+                "shasum": "0dae48cc100133a4144ca8219d5506b917888588"
             },
             "require": {
                 "drupal/core": "^8.8 || ^9"
@@ -8374,8 +8374,8 @@
             "type": "drupal-module",
             "extra": {
                 "drupal": {
-                    "version": "6.0.5",
-                    "datestamp": "1629909787",
+                    "version": "6.1.0",
+                    "datestamp": "1635676666",
                     "security-coverage": {
                         "status": "covered",
                         "message": "Covered by Drupal's security advisory policy"
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index be9090159984a66b39153fed4caf30f02037120d..1e63755e084feeb5a42af11b20d70a011fb5cf3b 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -5,7 +5,7 @@
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
-        'reference' => '1302399ef0325d509963157dd3e51fa3365d5b9f',
+        'reference' => '5baa0f240fa9db4ac35dde696ec3fe32e6e3eec2',
         'name' => 'osu-asc-webservices/d8-upstream',
         'dev' => true,
     ),
@@ -1838,12 +1838,12 @@
             ),
         ),
         'drupal/webform' => array(
-            'pretty_version' => '6.0.5',
-            'version' => '6.0.5.0',
+            'pretty_version' => '6.1.0',
+            'version' => '6.1.0.0',
             'type' => 'drupal-module',
             'install_path' => __DIR__ . '/../../web/modules/webform',
             'aliases' => array(),
-            'reference' => '6.0.5',
+            'reference' => '6.1.0',
             'dev_requirement' => false,
         ),
         'drupal/workflows' => array(
@@ -2104,7 +2104,7 @@
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
-            'reference' => '1302399ef0325d509963157dd3e51fa3365d5b9f',
+            'reference' => '5baa0f240fa9db4ac35dde696ec3fe32e6e3eec2',
             'dev_requirement' => false,
         ),
         'pantheon-systems/quicksilver-pushback' => array(
diff --git a/web/modules/webform/README.md b/web/modules/webform/README.md
index f32f8190a6fb4022ee9c9960f59acbf862d301fe..bf4d8b54213e494bc8cd464a9c44d041f8c4ecce 100644
--- a/web/modules/webform/README.md
+++ b/web/modules/webform/README.md
@@ -45,15 +45,16 @@ INSTALLATION
 
 The installation of this module is like other Drupal modules.
 
- 1. Copy/upload the webform module to the modules directory of your Drupal
-   installation.
+ 1. If your site is [managed via Composer](https://www.drupal.org/node/2718229),
+    use Composer to download the webform module running
+    ```composer require "drupal/webform"```. Otherwise copy/upload the webform
+    module to the modules directory of your Drupal installation.
 
  2. Enable the 'Webform' module and desired sub-modules in 'Extend'.
    (/admin/modules)
 
  3. Set up user permissions. (/admin/people/permissions#module-webform)
 
-
 RECOMMENDED MODULES
 -------------------
 
diff --git a/web/modules/webform/composer.libraries.json b/web/modules/webform/composer.libraries.json
index efbccb97aaa770ef1476c683b9d316b64f4c5ad5..1c5fa51d326deadd5802e729d37fdb7788a62137 100644
--- a/web/modules/webform/composer.libraries.json
+++ b/web/modules/webform/composer.libraries.json
@@ -73,9 +73,6 @@
                 "dist": {
                     "url": "https://registry.npmjs.org/places.js/-/places.js-1.19.0.tgz",
                     "type": "tar"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -91,9 +88,6 @@
                 "dist": {
                     "url": "https://github.com/jshjohnson/Choices/archive/v9.0.1.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -109,9 +103,6 @@
                 "dist": {
                     "url": "https://download.ckeditor.com/autogrow/releases/autogrow_4.16.2.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -127,9 +118,6 @@
                 "dist": {
                     "url": "https://github.com/w8tcha/CKEditor-CodeMirror-Plugin/releases/download/v1.17.12/CKEditor-CodeMirror-Plugin.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -145,9 +133,6 @@
                 "dist": {
                     "url": "https://download.ckeditor.com/fakeobjects/releases/fakeobjects_4.16.2.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -163,9 +148,6 @@
                 "dist": {
                     "url": "https://download.ckeditor.com/image/releases/image_4.16.2.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -181,9 +163,6 @@
                 "dist": {
                     "url": "https://download.ckeditor.com/link/releases/link_4.16.2.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -199,9 +178,6 @@
                 "dist": {
                     "url": "https://github.com/components/codemirror/archive/5.61.1.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -217,9 +193,6 @@
                 "dist": {
                     "url": "https://github.com/harvesthq/chosen/releases/download/v1.8.7/chosen_v1.8.7.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -235,9 +208,6 @@
                 "dist": {
                     "url": "https://github.com/ubilabs/geocomplete/archive/1.7.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -253,9 +223,6 @@
                 "dist": {
                     "url": "https://github.com/jeresig/jquery.hotkeys/archive/0.2.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -271,9 +238,6 @@
                 "dist": {
                     "url": "https://github.com/fronteed/icheck/archive/1.0.2.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -289,9 +253,6 @@
                 "dist": {
                     "url": "https://github.com/rvera/image-picker/archive/0.3.1.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -307,9 +268,6 @@
                 "dist": {
                     "url": "https://github.com/RobinHerbots/jquery.inputmask/archive/5.0.6.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -325,9 +283,6 @@
                 "dist": {
                     "url": "https://github.com/jackocnr/intl-tel-input/archive/v16.1.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -343,9 +298,6 @@
                 "dist": {
                     "url": "https://github.com/gjunge/rateit.js/archive/1.1.3.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -361,9 +313,6 @@
                 "dist": {
                     "url": "https://github.com/select2/select2/archive/4.0.13.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -379,9 +328,6 @@
                 "dist": {
                     "url": "https://github.com/ractoon/jQuery-Text-Counter/archive/0.9.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -397,9 +343,6 @@
                 "dist": {
                     "url": "https://github.com/jonthornton/jquery-timepicker/archive/1.13.18.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -415,9 +358,6 @@
                 "dist": {
                     "url": "https://github.com/simontabor/jquery-toggles/archive/v4.0.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -433,9 +373,6 @@
                 "dist": {
                     "url": "https://github.com/NigelOToole/progress-tracker/archive/2.0.6.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -451,9 +388,6 @@
                 "dist": {
                     "url": "https://github.com/szimek/signature_pad/archive/v2.3.0.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -469,9 +403,6 @@
                 "dist": {
                     "url": "https://github.com/ariutta/svg-pan-zoom/archive/3.6.1.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -487,9 +418,6 @@
                 "dist": {
                     "url": "https://github.com/cferdinandi/tabby/archive/v12.0.3.zip",
                     "type": "zip"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -505,9 +433,6 @@
                 "dist": {
                     "url": "https://unpkg.com/tippy.js@5.2.1/dist/tippy-bundle.iife.min.js",
                     "type": "file"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         },
@@ -523,9 +448,6 @@
                 "dist": {
                     "url": "https://unpkg.com/tippy.js@6.2.6/dist/tippy-bundle.umd.min.js",
                     "type": "file"
-                },
-                "require": {
-                    "composer/installers": "~1.0"
                 }
             }
         }
diff --git a/web/modules/webform/config/install/system.action.webform_archive_action.yml b/web/modules/webform/config/install/system.action.webform_archive_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fa48322f9e63ed3341912a18155fee9a32567c55
--- /dev/null
+++ b/web/modules/webform/config/install/system.action.webform_archive_action.yml
@@ -0,0 +1,10 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - webform
+id: webform_archive_action
+label: 'Archive webform'
+type: webform
+plugin: webform_archive_action
+configuration: {  }
diff --git a/web/modules/webform/config/install/system.action.webform_close_action.yml b/web/modules/webform/config/install/system.action.webform_close_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c8e223b80afc5e3c5a36992e61c9539479151168
--- /dev/null
+++ b/web/modules/webform/config/install/system.action.webform_close_action.yml
@@ -0,0 +1,10 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - webform
+id: webform_close_action
+label: 'Close webform'
+type: webform
+plugin: webform_close_action
+configuration: {  }
diff --git a/web/modules/webform/config/install/system.action.webform_delete_action.yml b/web/modules/webform/config/install/system.action.webform_delete_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4e81f52a17500cbf1e7b7855abc052a2c0405256
--- /dev/null
+++ b/web/modules/webform/config/install/system.action.webform_delete_action.yml
@@ -0,0 +1,10 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - webform
+id: webform_delete_action
+label: 'Delete webform'
+type: webform
+plugin: webform_delete_action
+configuration: {  }
diff --git a/web/modules/webform/config/install/system.action.webform_open_action.yml b/web/modules/webform/config/install/system.action.webform_open_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..35960eedbec6814d5852e269e193cf0c40d72800
--- /dev/null
+++ b/web/modules/webform/config/install/system.action.webform_open_action.yml
@@ -0,0 +1,10 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - webform
+id: webform_open_action
+label: 'Open webform'
+type: webform
+plugin: webform_open_action
+configuration: {  }
diff --git a/web/modules/webform/config/install/system.action.webform_submission_make_sticky_action.yml b/web/modules/webform/config/install/system.action.webform_submission_make_sticky_action.yml
index 85ea0ab6631ba63634b6121fdc3e0c421658cbc7..54512e4660773f9d075a477ea8216056f8da8e9d 100644
--- a/web/modules/webform/config/install/system.action.webform_submission_make_sticky_action.yml
+++ b/web/modules/webform/config/install/system.action.webform_submission_make_sticky_action.yml
@@ -4,7 +4,7 @@ dependencies:
   module:
     - webform
 id: webform_submission_make_sticky_action
-label: 'Star/Flag submission'
+label: 'Star/flag submission'
 type: webform_submission
 plugin: webform_submission_make_sticky_action
 configuration: {  }
diff --git a/web/modules/webform/config/install/system.action.webform_unarchive_action.yml b/web/modules/webform/config/install/system.action.webform_unarchive_action.yml
new file mode 100644
index 0000000000000000000000000000000000000000..eb1033aac89429bbf7391f3f40cafb191c88b50b
--- /dev/null
+++ b/web/modules/webform/config/install/system.action.webform_unarchive_action.yml
@@ -0,0 +1,10 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - webform
+id: webform_unarchive_action
+label: 'Restore webform'
+type: webform
+plugin: webform_unarchive_action
+configuration: {  }
diff --git a/web/modules/webform/config/install/webform.settings.yml b/web/modules/webform/config/install/webform.settings.yml
index c83daa5e64c671be205221d47048011e403d4800..1a16206a772d2875a164a9db8b3d6e4d619139d9 100644
--- a/web/modules/webform/config/install/webform.settings.yml
+++ b/web/modules/webform/config/install/webform.settings.yml
@@ -1,6 +1,6 @@
 settings:
   default_status: open
-  default_page_base_path: '/form'
+  default_page_base_path: /form
   default_ajax: false
   default_ajax_effect: fade
   default_ajax_speed: 500
@@ -30,7 +30,7 @@ settings:
     messages messages--error
     messages messages--warning
     messages messages--status
-
+    
   button_classes: ''
   default_wizard_prev_button_label: '< Previous'
   default_wizard_next_button_label: 'Next >'
@@ -76,15 +76,15 @@ settings:
     messages messages--error
     messages messages--warning
     messages messages--status
-
+    
   confirmation_classes: |
     messages messages--error
     messages messages--warning
     messages messages--status
-
+    
   confirmation_back_classes: |
     button
-
+    
   default_limit_total_message: 'No more submissions are permitted.'
   default_limit_user_message: 'No more submissions are permitted.'
   default_share: false
@@ -101,6 +101,20 @@ settings:
     wide:
       title: Wide
       width: 1000
+  webform_bulk_form: true
+  webform_bulk_form_actions:
+    - webform_open_action
+    - webform_close_action
+    - webform_archive_action
+    - webform_unarchive_action
+    - webform_delete_action
+  webform_submission_bulk_form: true
+  webform_submission_bulk_form_actions:
+    - webform_submission_make_sticky_action
+    - webform_submission_make_unsticky_action
+    - webform_submission_make_lock_action
+    - webform_submission_make_unlock_action
+    - webform_submission_delete_action
 assets:
   css: ''
   javascript: ''
@@ -139,10 +153,11 @@ batch:
 purge:
   cron_size: 100
 form:
+  limit: 50
   filter_category: ''
   filter_state: ''
 element:
-  machine_name_pattern: 'a-z0-9_'
+  machine_name_pattern: a-z0-9_
   empty_message: '{Empty}'
   allowed_tags: admin
   wrapper_classes: |
@@ -151,14 +166,14 @@ element:
     messages messages--error
     messages messages--warning
     messages messages--status
-
+    
   classes: |
     container-inline clearfix
     form--inline clearfix
     messages messages--error
     messages messages--warning
     messages messages--status
-
+    
   horizontal_rule_classes: |
     webform-horizontal-rule--solid
     webform-horizontal-rule--dashed
@@ -169,7 +184,7 @@ element:
     webform-horizontal-rule--thick
     webform-horizontal-rule--flaired
     webform-horizontal-rule--glyph
-
+    
   default_description_display: ''
   default_more_title: More
   default_section_title_tag: h2
@@ -212,16 +227,16 @@ mail:
   default_body_text: |
     Submitted on [webform_submission:created]
     Submitted by: [webform_submission:user]
-
+    
     Submitted values are:
     [webform_submission:values]
-
+    
   default_body_html: |
     <p>Submitted on [webform_submission:created]</p>
     <p>Submitted by: [webform_submission:user]</p>
     <p>Submitted values are:</p>
     [webform_submission:values]
-
+    
   roles: {  }
 test:
   types: |
@@ -264,7 +279,7 @@ test:
     webform_time:
       - '09:00'
       - '17:00'
-
+    
   names: |
     first_name:
       - 'John'
@@ -304,7 +319,7 @@ test:
       - 'Loremipsum'
       - 'Oratione'
       - 'Dixisset'
-
+    
 ui:
   video_display: dialog
   details_save: true
diff --git a/web/modules/webform/config/install/webform.webform.contact.yml b/web/modules/webform/config/install/webform.webform.contact.yml
index e2696a080e7098665119d0a18653c23e761988ff..c42e65938bc6379c7c4530ed749f7686788b3a30 100644
--- a/web/modules/webform/config/install/webform.webform.contact.yml
+++ b/web/modules/webform/config/install/webform.webform.contact.yml
@@ -40,7 +40,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -82,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/config/install/webform.webform_options.likert_agreement.yml b/web/modules/webform/config/install/webform.webform_options.likert_agreement.yml
index 5e7399d1415abc7cefe1029fb4211b1039b6d43f..794429f0cb7a246f578f8807ecb9cd6d5a24c8a7 100644
--- a/web/modules/webform/config/install/webform.webform_options.likert_agreement.yml
+++ b/web/modules/webform/config/install/webform.webform_options.likert_agreement.yml
@@ -9,8 +9,8 @@ label: 'Likert: Agreement'
 category: Likert
 likert: true
 options: |
-  1: 'Much Worse'
-  2: 'Somewhat Worse'
-  3: 'About the Same'
-  4: 'Somewhat Better'
-  5: 'Much Better'
+  1: Strongly Disagree
+  2: Disagree
+  3: Neutral
+  4: Agree
+  5: Strongly Agree
diff --git a/web/modules/webform/config/install/webform.webform_options.likert_comparison.yml b/web/modules/webform/config/install/webform.webform_options.likert_comparison.yml
index c0959b0495bc309c8cf1b446b1dd5ad5998fb730..89f6af25d9f47b4e485beebb67286f3a7c15ff9f 100644
--- a/web/modules/webform/config/install/webform.webform_options.likert_comparison.yml
+++ b/web/modules/webform/config/install/webform.webform_options.likert_comparison.yml
@@ -9,8 +9,8 @@ label: 'Likert: Comparison'
 category: Likert
 likert: true
 options: |
-  1: Strongly Disagree
-  2: Disagree
-  3: Neutral
-  4: Agree
-  5: Strongly Agree
+  1: Much Worse
+  2: Somewhat Worse
+  3: About the Same
+  4: Somewhat Better
+  5: Much Better
diff --git a/web/modules/webform/config/install/webform.webform_options.sex_icao.yml b/web/modules/webform/config/install/webform.webform_options.sex_icao.yml
index 5650c06fb497b87328d58fe4bd82d4552e87f503..9b307495d13f2dfbd436ae51a6f89597fa7b6955 100644
--- a/web/modules/webform/config/install/webform.webform_options.sex_icao.yml
+++ b/web/modules/webform/config/install/webform.webform_options.sex_icao.yml
@@ -5,7 +5,7 @@ dependencies:
     module:
       - webform
 id: sex_icao
-label: Sex - International Civil Aviation Organization (ICAO)
+label: 'Sex - International Civil Aviation Organization (ICAO)'
 category: Demographic
 likert: false
 options: |
diff --git a/web/modules/webform/config/schema/webform.action.schema.yml b/web/modules/webform/config/schema/webform.action.schema.yml
index 4ebbd150577564f83d9fe3dea006b658a066c280..51e1c8905e8cb424168b8075f27dbd37c8e26e7e 100644
--- a/web/modules/webform/config/schema/webform.action.schema.yml
+++ b/web/modules/webform/config/schema/webform.action.schema.yml
@@ -1,3 +1,19 @@
+action.configuration.webform_delete_action:
+  type: action_configuration_default
+  label: 'Delete webform configuration'
+action.configuration.webform_open_action:
+  type: action_configuration_default
+  label: 'Open webform configuration'
+action.configuration.webform_close_action:
+  type: action_configuration_default
+  label: 'Close webform configuration'
+action.configuration.webform_archive_action:
+  type: action_configuration_default
+  label: 'Archive webform configuration'
+action.configuration.webform_unarchive_action:
+  type: action_configuration_default
+  label: 'Unarchive webform configuration'
+
 action.configuration.webform_submission_delete_action:
   type: action_configuration_default
   label: 'Delete submission configuration'
diff --git a/web/modules/webform/config/schema/webform.entity.webform.schema.yml b/web/modules/webform/config/schema/webform.entity.webform.schema.yml
index 0b278b5447452114d34a0d99e1c645c5237f5004..9224ac0b2fe3ea723d7a31522d3e67aa70de9896 100644
--- a/web/modules/webform/config/schema/webform.entity.webform.schema.yml
+++ b/web/modules/webform/config/schema/webform.entity.webform.schema.yml
@@ -171,6 +171,15 @@
         form_elements_attributes:
           type: ignore
           label: 'Form elements attributes'
+        form_attributes:
+          type: ignore
+          label: 'Form attributes'
+        form_method:
+          type: string
+          label: 'Form method'
+        form_action:
+          type: string
+          label: 'Form action'
         share:
           type: boolean
           label: 'Enable form sharing'
diff --git a/web/modules/webform/config/schema/webform.plugin.handler.schema.yml b/web/modules/webform/config/schema/webform.plugin.handler.schema.yml
index 2802f735b8f82539ebb21b9fd4101729c2b03681..2943b98607df7660768effa25a515e50b124edcb 100644
--- a/web/modules/webform/config/schema/webform.plugin.handler.schema.yml
+++ b/web/modules/webform/config/schema/webform.plugin.handler.schema.yml
@@ -159,6 +159,9 @@ webform.handler.remote_post:
     custom_options:
       label: 'Custom options'
       type: string
+    file_data:
+      type: boolean
+      label: 'Include files as Base64 encoded post data'
     cast:
       type: boolean
       label: 'Cast remote post data'
diff --git a/web/modules/webform/config/schema/webform.settings.schema.yml b/web/modules/webform/config/schema/webform.settings.schema.yml
index 92ca80d006a799680bbee45a6d9597a24ab52d89..459897f1f5ad2642d0f97473c405ec943b6f960b 100644
--- a/web/modules/webform/config/schema/webform.settings.schema.yml
+++ b/web/modules/webform/config/schema/webform.settings.schema.yml
@@ -265,6 +265,24 @@ webform.settings:
         default_share_theme_name:
           type: string
           label: 'Default shared form theme'
+        webform_bulk_form:
+          type: boolean
+          label: 'Enable webform operations bulk form'
+        webform_bulk_form_actions:
+          type: sequence
+          label: 'Webform operations bulk form actions'
+          sequence:
+            type: string
+            label: Action
+        webform_submission_bulk_form:
+          type: boolean
+          label: 'Enable submission operations bulk form'
+        webform_submission_bulk_form_actions:
+          type: sequence
+          label: 'Webform submission operations bulk form actions'
+          sequence:
+            type: string
+            label: Action
         dialog:
           type: boolean
           label: 'Enable webform dialog support'
@@ -301,6 +319,9 @@ webform.settings:
       type: mapping
       label: 'Form default settings'
       mapping:
+        limit:
+          type: integer
+          label: 'Webforms per page'
         filter_category:
           type: label
           label: 'Filter category'
diff --git a/web/modules/webform/css/webform.admin.css b/web/modules/webform/css/webform.admin.css
index be4c63fba20061afbebf339e54b64cf07486829e..4893cd25d81f00bd3612824fcd511f11fb8bf498 100644
--- a/web/modules/webform/css/webform.admin.css
+++ b/web/modules/webform/css/webform.admin.css
@@ -11,9 +11,15 @@
 }
 
 /**
- * Submission.
+ * Bulk form.
  */
+.webform-bulk-form .form-item {
+    margin-right: 5px;
+}
 
+/**
+ * Submission.
+ */
 .webform-submission-information .button {
   font-size: 1em;
 }
@@ -22,15 +28,20 @@
  * Webform setting button displays a table rows icon.
  * @see /admin/structure/webform/manage/contact/results/submissions
  */
-.button.button-webform-table-setting {
+a.button.button-webform-table-setting {
+  float: right;
   margin: 0 0 1em 0;
 }
 
-.button.button-webform-table-setting:before {
+a.button.button-webform-table-setting:before {
   content: "☷";
   font-size: 1.2em;
 }
 
+[dir="rtl"] a.button.button-webform-table-setting {
+  float: left;
+}
+
 /**
  * Results table.
  * @see /admin/structure/webform/submissions/manage
diff --git a/web/modules/webform/css/webform.element.message.css b/web/modules/webform/css/webform.element.message.css
index 05205dd31dc0dbbce23e29bb10f76f8e126f4f4d..40142867ed01cfcc5f40ef84ba440e6a189fb66b 100644
--- a/web/modules/webform/css/webform.element.message.css
+++ b/web/modules/webform/css/webform.element.message.css
@@ -5,24 +5,6 @@
  * @see /webform/test_element_message
  */
 
-/**
- * Add styles to default (info) message,
- */
-.messages.messages--info {
-  color: #31708f;
-  border-color: #0074bd #0074bd #0074bd transparent; /* LTR */
-  background-color: #d9edf7;
-  background-image: url(../images/icons/info.svg);
-  background-repeat: no-repeat;
-  background-position: 10px 17px;
-  box-shadow: -8px 0 0 #0074bd; /* LTR */
-}
-[dir="rtl"] .messages.messages--info {
-  margin-left: 0;
-  border-color: #0074bd transparent #0074bd #0074bd;
-  box-shadow: 8px 0 0 #0074bd;
-}
-
 /**
  * Webform message close container.
  */
@@ -78,3 +60,10 @@ html[dir="rtl"].js .webform-message--close .webform-message__link {
 html.js .js-webform-message--close-storage {
   display: none;
 }
+
+/**
+ * Hide Gin themes dismiss button even when it appears on the node edit form.
+ */
+.js-webform-message--close .button--dismiss {
+  display: none;
+}
diff --git a/web/modules/webform/css/webform.element.message.info.css b/web/modules/webform/css/webform.element.message.info.css
new file mode 100644
index 0000000000000000000000000000000000000000..e50cf69e890d065c737ff434256e2fad866431d1
--- /dev/null
+++ b/web/modules/webform/css/webform.element.message.info.css
@@ -0,0 +1,21 @@
+/**
+ * @file
+ * Message element info styles.
+ *
+ * @see /webform/test_element_message
+ */
+
+.messages.messages--info {
+  color: #31708f;
+  border-color: #0074bd #0074bd #0074bd transparent; /* LTR */
+  background-color: #d9edf7;
+  background-image: url(../images/icons/info.svg);
+  background-repeat: no-repeat;
+  background-position: 10px 17px;
+  box-shadow: -8px 0 0 #0074bd; /* LTR */
+}
+[dir="rtl"] .messages.messages--info {
+  margin-left: 0;
+  border-color: #0074bd transparent #0074bd #0074bd;
+  box-shadow: 8px 0 0 #0074bd;
+}
diff --git a/web/modules/webform/css/webform.element.options.css b/web/modules/webform/css/webform.element.options.css
index 1b610a43e71fe0055429224e066bc228942eff49..fd73bce6cb222738b8703db20014328ef47f01a2 100644
--- a/web/modules/webform/css/webform.element.options.css
+++ b/web/modules/webform/css/webform.element.options.css
@@ -40,6 +40,7 @@
  */
 .webform-options-display-buttons,
 .form-composite.webform-fieldset--title-inline .fieldset-wrapper > div.webform-options-display-buttons {
+  position: relative;
   display: flex;
   flex-wrap: wrap;
   margin: 0 -5px;
diff --git a/web/modules/webform/css/webform.theme.claro.css b/web/modules/webform/css/webform.theme.claro.css
index 1bc4afcc685ac408da72b56c0cf07a9bb66e85e2..23ecd8a9db5e346c3a7e42783427e57a3253843a 100644
--- a/web/modules/webform/css/webform.theme.claro.css
+++ b/web/modules/webform/css/webform.theme.claro.css
@@ -148,12 +148,6 @@ table td > .button:only-child {
   margin-top: 0;
   margin-bottom: 0;
 }
-/**
- * Results table.
- */
-th.webform-results-table__icon.sortable-heading {
-  padding: 0 1rem;
-}
 
 /**
  * Table select element.
diff --git a/web/modules/webform/css/webform.theme.gin.css b/web/modules/webform/css/webform.theme.gin.css
new file mode 100644
index 0000000000000000000000000000000000000000..6d1b2df63c282b81047199f2cf34f92285fe6fcd
--- /dev/null
+++ b/web/modules/webform/css/webform.theme.gin.css
@@ -0,0 +1,34 @@
+/**
+ * @file
+ * Gin theme styles.
+ */
+
+/**
+ * Help Block.
+ */
+div.block-help-block {
+  max-width: none;
+}
+
+/**
+ * Fix webform promotion message link color.
+ *
+ * @see /admin/structure/webform
+ * @see webform.promotions.css
+ * @see claro/css/src/components/messages.css
+ */
+.webform-message .messages.messages--webform {
+  color: #fff;
+  background-color: #353641;
+  box-shadow: none;
+  border-radius: 12px;
+  border: 2px solid transparent;
+}
+
+.webform-message .messages.messages--webform {
+  padding-left: 0;
+}
+
+.webform-message .messages.messages--webform .messages__content {
+  margin-left: 3.5rem;
+}
diff --git a/web/modules/webform/css/webform.theme.seven.css b/web/modules/webform/css/webform.theme.seven.css
index 21fc7afef18e56901f6b03850f4557de387f34d2..14c8306ffc6d2da176b91d364a2f820967c8bd40 100644
--- a/web/modules/webform/css/webform.theme.seven.css
+++ b/web/modules/webform/css/webform.theme.seven.css
@@ -84,7 +84,7 @@ pre.webform-codemirror-runmode {
 /**
  * Form action are moved to a dialogs footer and don't need to be visually
  * hidden.
-
+ *
  * @see Drupal.behaviors.dialog.prepareDialogButtons
  */
 .webform-ui-dialog .form-actions input[type=submit],
@@ -92,6 +92,15 @@ pre.webform-codemirror-runmode {
   display: none !important;
 }
 
+/**
+ * Primary button font color is not white.
+ *
+ * @see https://www.drupal.org/project/webform/issues/3228968
+ */
+.webform-ui-dialog a.button--primary  {
+  color: #fff;
+}
+
 /* System tray divider */
 
 .ui-dialog.ui-dialog-off-canvas.webform-off-canvas {
diff --git a/web/modules/webform/drush/webform.drush.inc b/web/modules/webform/drush/webform.drush.inc
index 57dba355a01809bc82f6b5a4d2f1e5a6c165dc76..fc9c75e57aaf243ec2c30057f54887b197e14d46 100644
--- a/web/modules/webform/drush/webform.drush.inc
+++ b/web/modules/webform/drush/webform.drush.inc
@@ -44,6 +44,7 @@ function webform_drush_command() {
         'range-latest' => 'Integer specifying the latest X submissions will be downloaded. Used if "range-type" is "latest" or no other range options are provided.',
         'range-start' => 'The submission ID or start date at which to start exporting.',
         'range-end' => 'The submission ID or end date at which to end exporting.',
+        'uid' => 'The ID of the user who submitted the form.',
         'order' => 'The submission order "asc" (default) or "desc".',
         'state' => 'Submission state to be included: "completed", "draft" or "all" (default).',
         'sticky' => 'Flagged/starred submission status.',
diff --git a/web/modules/webform/includes/webform.install.update.inc b/web/modules/webform/includes/webform.install.update.inc
index a9b831dcd9b7ebcaf86f5ead25d16111a95a50e1..357f4921eb114c38e4ffe2ec861dcf475be7b3e7 100644
--- a/web/modules/webform/includes/webform.install.update.inc
+++ b/web/modules/webform/includes/webform.install.update.inc
@@ -10,7 +10,6 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Url;
 use Drupal\views\Entity\View;
@@ -233,10 +232,10 @@ function webform_update_8011() {
       continue;
     }
 
-    $elements = Yaml::decode($data['elements']);
+    $elements = WebformYaml::decode($data['elements']);
     _webform_update_8011($elements);
 
-    $data['elements'] = Yaml::encode($elements);
+    $data['elements'] = WebformYaml::encode($elements);
     $webform_config->setData($data);
     $webform_config->save();
   }
@@ -303,13 +302,13 @@ function webform_update_8014() {
 
     // Get data, get elements, and update elements #type.
     $data = $webform_config->getRawData();
-    $elements = Yaml::decode($data['elements']);
+    $elements = WebformYaml::decode($data['elements']);
     // Make sure $elements has been decoded into an array.
     if (is_array($elements)) {
       _webform_update_8014($elements);
 
       // Set elements, set data, and save data.
-      $data['elements'] = Yaml::encode($elements);
+      $data['elements'] = WebformYaml::encode($elements);
       $webform_config->setData($data);
       $webform_config->save();
     }
@@ -423,7 +422,7 @@ function webform_update_8021() {
     if (!$webform_option->get('category')) {
       if (file_exists("$config_install_path/webform.webform_options.$id.yml")) {
         $yaml = file_get_contents("$config_install_path/webform.webform_options.$id.yml");
-        $data = Yaml::decode($yaml);
+        $data = WebformYaml::decode($yaml);
         $webform_option->set('category', $data['category']);
         $webform_option->save();
       }
@@ -1058,12 +1057,12 @@ function _webform_update_8046_convert_data(array $data) {
 
   // Append actions element to elements.
   if ($actions_element) {
-    $elements = Yaml::decode($data['elements']);
+    $elements = WebformYaml::decode($data['elements']);
     $elements['actions'] = [
       '#type' => 'webform_actions',
       '#title' => (string) t('Submit button(s)'),
     ] + $actions_element;
-    $data['elements'] = Yaml::encode($elements);
+    $data['elements'] = WebformYaml::encode($elements);
   }
 
   return $data;
@@ -1955,13 +1954,13 @@ function webform_update_8103() {
   $test_date_values = ['1942-06-18', '1940-07-07', '1943-02-25', '1940-10-09'];
   $config = \Drupal::configFactory()->getEditable('webform.settings');
   $data = $config->getRawData();
-  $types = Yaml::decode($data['test']['types']);
+  $types = WebformYaml::decode($data['test']['types']);
   foreach ($test_date_elements as $test_date_element) {
     if (isset($types[$test_date_element]) && $types[$test_date_element] === $test_date_values) {
       unset($types[$test_date_element]);
     }
   }
-  $data['test']['types'] = Yaml::encode($types);
+  $data['test']['types'] = WebformYaml::encode($types);
   $config->setData($data);
   $config->save();
 }
@@ -2172,7 +2171,7 @@ function webform_update_8116() {
  */
 function webform_update_8117() {
   $config = \Drupal::configFactory()->getEditable('webform.settings');
-  $names = Yaml::decode($config->get('test.names'));
+  $names = WebformYaml::decode($config->get('test.names'));
   $names += [
     'postal_code' => ['11111', '12345', '12345-6789'],
   ];
@@ -2264,9 +2263,9 @@ function webform_update_8124() {
     $webform_config = $config_factory->getEditable($webform_config_name);
     $data = $webform_config->getRawData();
     if (strpos($data['elements'], "'#type': hidden") !== FALSE) {
-      $elements = Yaml::decode($data['elements']);
+      $elements = WebformYaml::decode($data['elements']);
       _webform_update_8124($elements);
-      $data['elements'] = Yaml::encode($elements);
+      $data['elements'] = WebformYaml::encode($elements);
 
       $webform_config->setData($data);
       $webform_config->save();
@@ -2424,7 +2423,7 @@ function webform_update_8133() {
   foreach ($config_factory->listAll('webform.webform.') as $webform_config_name) {
     $webform_config = $config_factory->getEditable($webform_config_name);
     $data = $webform_config->getRawData();
-    $yaml = Yaml::encode($data);
+    $yaml = WebformYaml::encode($data);
     if (strpos($yaml, 'webform_toggle')) {
       return;
     }
@@ -2468,10 +2467,10 @@ function webform_update_8136() {
       continue;
     }
 
-    $elements = Yaml::decode($data['elements']);
+    $elements = WebformYaml::decode($data['elements']);
     _webform_update_8136($elements);
 
-    $data['elements'] = Yaml::encode($elements);
+    $data['elements'] = WebformYaml::encode($elements);
     $webform_config->setData($data);
     $webform_config->save();
   }
@@ -2602,7 +2601,7 @@ function webform_update_8141() {
   $message = NULL;
   if (\Drupal::moduleHandler()->moduleExists('views') && !View::load('webform_submissions')) {
     $config_path = drupal_get_path('module', 'webform') . '/config/optional/views.view.webform_submissions.yml';
-    $data = ['uuid' => (new Uuid())->generate()] + Yaml::decode(file_get_contents($config_path));
+    $data = ['uuid' => (new Uuid())->generate()] + WebformYaml::decode(file_get_contents($config_path));
     \Drupal::configFactory()->getEditable('views.view.webform_submissions')->setData($data)->save(TRUE);
     $message = 'The new webform submissions view has been created.';
   }
@@ -2788,7 +2787,7 @@ function webform_update_8151() {
 
     // Try to decode elements.
     try {
-      $elements = Yaml::decode($elements);
+      $elements = WebformYaml::decode($elements);
     }
     catch (\Exception $exception) {
       continue;
@@ -2813,7 +2812,7 @@ function webform_update_8151() {
       }
     }
     if ($has_computed_element) {
-      $webform_config->set('elements', Yaml::encode($elements));
+      $webform_config->set('elements', WebformYaml::encode($elements));
       $webform_config->save(TRUE);
     }
   }
@@ -2886,7 +2885,7 @@ function webform_update_8155() {
 
     // Try to decode elements.
     try {
-      $elements = Yaml::decode($elements);
+      $elements = WebformYaml::decode($elements);
     }
     catch (\Exception $exception) {
       continue;
@@ -2915,7 +2914,7 @@ function webform_update_8155() {
       }
     }
     if ($has_date_element) {
-      $webform_config->set('elements', Yaml::encode($elements));
+      $webform_config->set('elements', WebformYaml::encode($elements));
       $webform_config->save(TRUE);
     }
   }
@@ -3055,7 +3054,7 @@ function webform_update_8160() {
   $elements = WebformYaml::decode($config->get('elements'));
   if (isset($elements['calculation']) && isset($elements['calculation']['calculation'])) {
     $path = drupal_get_path('module', 'webform') . '/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml';
-    $data = Yaml::decode(file_get_contents($path));
+    $data = WebformYaml::decode(file_get_contents($path));
     $config->set('elements', $data['elements'])->save();
   }
 }
@@ -3318,7 +3317,7 @@ function webform_update_8179() {
 
     // Try to decode elements.
     try {
-      $elements = Yaml::decode($elements);
+      $elements = WebformYaml::decode($elements);
     }
     catch (\Exception $exception) {
       continue;
@@ -3344,7 +3343,7 @@ function webform_update_8179() {
       }
     }
     if ($has_actions_element) {
-      $webform_config->set('elements', Yaml::encode($elements));
+      $webform_config->set('elements', WebformYaml::encode($elements));
       $webform_config->save(TRUE);
     }
   }
@@ -3465,7 +3464,7 @@ function webform_update_8186() {
 
     // Try to decode elements.
     try {
-      $elements = Yaml::decode($elements);
+      $elements = WebformYaml::decode($elements);
     }
     catch (\Exception $exception) {
       continue;
@@ -3502,7 +3501,7 @@ function webform_update_8186() {
     }
 
     if ($has_numeric_element_property) {
-      $webform_config->set('elements', Yaml::encode($elements));
+      $webform_config->set('elements', WebformYaml::encode($elements));
       $webform_config->save(TRUE);
     }
   }
@@ -3915,6 +3914,28 @@ function webform_update_8210() {
   _webform_update_webform_settings();
 }
 
+/**
+ * Issue #000000: Add support options to help and add-ons.
+ */
+function webform_update_8212() {
+  _webform_update_admin_settings();
+}
+
+/**
+ * Issue #3220703: Add support for bulk operations on webform entities.
+ */
+function webform_update_8213() {
+  _webform_update_actions();
+  _webform_update_admin_settings();
+}
+
+/**
+ * Issue #3216928: Allow Base64 encoded file data to be excluded from remote posts.
+ */
+function webform_update_8214() {
+  _webform_update_webform_handler_settings();
+}
+
 /******************************************************************************/
 // Webform 6.x.
 /******************************************************************************/
@@ -3935,14 +3956,14 @@ function webform_update_8601() {
   $config_factory = \Drupal::configFactory();
   foreach ($config_factory->listAll('webform.webform.') as $webform_config_name) {
     $webform_config = $config_factory->getEditable($webform_config_name);
-    $yaml = Yaml::encode($webform_config->getRawData());
+    $yaml = WebformYaml::encode($webform_config->getRawData());
     if (strpos($yaml, '[webform_submission:view-url') !== FALSE
       || strpos($yaml, '[webform_submission:update-url') !== FALSE
       || strpos($yaml, '[webform_submission:delete-url') !== FALSE) {
       $yaml = str_replace('[webform_submission:view-url', '[webform_submission:token-view-url', $yaml);
       $yaml = str_replace('[webform_submission:update-url', '[webform_submission:token-update-url', $yaml);
       $yaml = str_replace('[webform_submission:delete-url', '[webform_submission:token-delete-url', $yaml);
-      $webform_config->setData(Yaml::decode($yaml));
+      $webform_config->setData(WebformYaml::decode($yaml));
       $webform_config->save();
     }
   }
@@ -4219,8 +4240,57 @@ function webform_update_8622() {
 }
 
 /**
- * Issue #000000: Add support options to help and add-ons.
+ * Issue #3220703: Add support for bulk operations on webform entities.
  */
-function webform_update_8212() {
+function webform_update_8623() {
+  _webform_update_actions();
   _webform_update_admin_settings();
 }
+
+/**
+ * Issue #3216928: Allow Base64 encoded file data to be excluded from remote posts.
+ */
+function webform_update_8624() {
+  _webform_update_webform_handler_settings();
+}
+
+/**
+ * Issue #3240393: Allow the number of webform per page to configurable.
+ */
+function webform_update_8625() {
+  _webform_update_actions();
+}
+
+/**
+ * Issue #3240399: Move form #method, #action, and #attributes from properties to settings
+ */
+function webform_update_8626() {
+  // Add new method, action, and attributes settings to all webforms.
+  _webform_update_webform_settings();
+
+  // Move properties to settings.
+  $properties = [
+    '#method' => 'form_method',
+    '#action' => 'form_action',
+    '#attributes' => 'form_attributes',
+  ];
+  $config_factory = \Drupal::configFactory();
+  foreach ($config_factory->listAll('webform.webform.') as $webform_config_name) {
+    $webform_config = $config_factory->getEditable($webform_config_name);
+    $data = $webform_config->getRawData();
+    $elements = WebformYaml::decode($data['elements']);
+    $has_property = FALSE;
+    foreach ($properties as $property_name => $setting_name) {
+      if (isset($elements[$property_name])) {
+        $data['settings'][$setting_name] = $elements[$property_name];
+        unset($elements[$property_name]);
+        $has_property = TRUE;
+      }
+    }
+    if ($has_property) {
+      $data['elements'] = WebformYaml::encode($elements);
+      $webform_config->setData($data);
+      $webform_config->save();
+    }
+  }
+}
diff --git a/web/modules/webform/includes/webform.libraries.inc b/web/modules/webform/includes/webform.libraries.inc
index 3e7b56a54437b356e2aa36a463edfb5b74a1a9c4..506cbe94b2e9ee80edf8358e303c3d7e81b21033 100644
--- a/web/modules/webform/includes/webform.libraries.inc
+++ b/web/modules/webform/includes/webform.libraries.inc
@@ -77,7 +77,7 @@ function webform_library_info_alter(&$libraries, $extension) {
   // If chosen_lib.module is installed, then update the dependency.
   if (\Drupal::moduleHandler()->moduleExists('chosen_lib')) {
     if (isset($libraries['webform.element.chosen'])) {
-      $dependencies =& $libraries['webform.element.chosen']['dependencies'];
+      $dependencies = &$libraries['webform.element.chosen']['dependencies'];
       foreach ($dependencies as $index => $dependency) {
         if ($dependency === 'webform/libraries.jquery.chosen') {
           $dependencies[$index] = 'chosen_lib/chosen';
@@ -91,7 +91,7 @@ function webform_library_info_alter(&$libraries, $extension) {
   // If select2.module is installed, then update the dependency.
   if (\Drupal::moduleHandler()->moduleExists('select2')) {
     if (isset($libraries['webform.element.select2'])) {
-      $dependencies =& $libraries['webform.element.select2']['dependencies'];
+      $dependencies = &$libraries['webform.element.select2']['dependencies'];
       foreach ($dependencies as $index => $dependency) {
         if ($dependency === 'webform/libraries.jquery.select2') {
           $dependencies[$index] = 'select2/select2';
diff --git a/web/modules/webform/includes/webform.theme.inc b/web/modules/webform/includes/webform.theme.inc
index 410ae7a917fece938632617c2772fd1d824f25f4..1428a0db2bce90d01d126f51d3ba7bc2394f2c0e 100644
--- a/web/modules/webform/includes/webform.theme.inc
+++ b/web/modules/webform/includes/webform.theme.inc
@@ -307,7 +307,7 @@ function webform_preprocess_select(&$variables) {
   // @see \Drupal\webform\Element\WebformOtherBase::processWebformOther
   // @see template_preprocess_select().
   if (!empty($element['#sort_options']) && !empty($element['#webform_other'])) {
-    $options =& $variables['options'];
+    $options = &$variables['options'];
     foreach ($options as $index => $option) {
       if ($option['value'] === WebformSelectOther::OTHER_OPTION) {
         unset($options[$index]);
@@ -484,12 +484,13 @@ function webform_preprocess_fieldset(&$variables) {
     $variables['attributes']['class'][] = 'webform-type-' . Html::getClass($element['#type']);
   }
 
-  // Remove invalid 'required' and 'aria-required' attributes from fieldset.
+  // Remove invalid 'required' attributes from fieldset.
+  //
+  // Issue #3174459: W3C Validation: required attribute not allowed on
+  // fieldset tag.
+  // @see https://www.drupal.org/project/drupal/issues/3174459
   if (isset($element['#webform_key'])) {
-    unset(
-      $variables['attributes']['required'],
-      $variables['attributes']['aria-required']
-    );
+    unset($variables['attributes']['required']);
   }
 }
 
@@ -562,7 +563,7 @@ function webform_preprocess_form_element_label(&$variables) {
   $element = &$variables['element'];
 
   // Fix variable title #markup tha contains a render array which is most
-  // likely a help tooltip.
+  // likely a Help tooltip.
   // @see template_preprocess_form_element_label()
   // @see webform_preprocess_form_element()
   if (isset($variables['title'])
@@ -659,7 +660,7 @@ function webform_preprocess_file_upload_help(&$variables) {
       if ($description instanceof TranslatableMarkup
         && $description->getUntranslatedString() === 'Allowed types: @extensions.') {
         $arguments = $description->getArguments();
-        if (strpos($arguments['@extensions'], ',') === FALSE) {
+        if (is_string($arguments['@extensions']) && strpos($arguments['@extensions'], ',') === FALSE) {
           $arguments['@extensions'] = preg_replace('/ +/', ', ', $arguments['@extensions']);
           $variables['descriptions'][$index] = new TranslatableMarkup($description->getUntranslatedString(), $arguments);
         }
@@ -712,7 +713,7 @@ function webform_preprocess_image(&$variables) {
  * reset the element's 'attributes';
  */
 function _webform_preprocess_options(array &$variables) {
-  $element =& $variables['element'];
+  $element = &$variables['element'];
 
   $variables['attributes']['class'][] = Html::getClass('js-webform-' . $element['#type']);
 
@@ -738,7 +739,7 @@ function _webform_preprocess_options(array &$variables) {
  * @see /webform/templates/webform-section.html.twig
  */
 function _webform_preprocess_element(array &$variables, $title_parents = ['title']) {
-  $element =& $variables['element'];
+  $element = &$variables['element'];
   $type = (isset($element['#type'])) ? $element['#type'] : '';
 
   // Fix details 'description' property which does not have description.content.
@@ -847,7 +848,7 @@ function _webform_preprocess_description_help(array &$variables) {
  * Append #help to title or element variable.
  */
 function _webform_preprocess_help(array &$variables, $title_parents = ['title']) {
-  $element =& $variables['element'];
+  $element = &$variables['element'];
   $type = (isset($element['#type'])) ? $element['#type'] : '';
 
   if (empty($element['#help'])) {
@@ -878,7 +879,7 @@ function _webform_preprocess_help(array &$variables, $title_parents = ['title'])
   }
   else {
     $variables += [$target => []];
-    $target_element =& $variables[$target];
+    $target_element = &$variables[$target];
   }
 
   // Default #help_title to element's #title.
diff --git a/web/modules/webform/includes/webform.theme.template.inc b/web/modules/webform/includes/webform.theme.template.inc
index 4c38f82517685df0255936cc192869c8ca50d418..029a2894ee5ac9b3553f1939c9402b41e0c3e63a 100644
--- a/web/modules/webform/includes/webform.theme.template.inc
+++ b/web/modules/webform/includes/webform.theme.template.inc
@@ -876,6 +876,7 @@ function template_preprocess_webform_element_help(array &$variables) {
   $attributes['class'][] = 'js-webform-element-help';
   $attributes['role'] = 'tooltip';
   $attributes['tabindex'] = '0';
+  $attributes['aria-label'] = $variables['help_title'] ?: t('Help tooltip');
 
   $content = (is_array($variables['help'])) ? \Drupal::service('renderer')->render($variables['help']) : $variables['help'];
 
diff --git a/web/modules/webform/includes/webform.translation.inc b/web/modules/webform/includes/webform.translation.inc
index 40c1ad22c30faedb05ed2dd5c18e9a0ab0d3e70c..0f751dd9965671135c2047d829bb301df8ec9cf2 100644
--- a/web/modules/webform/includes/webform.translation.inc
+++ b/web/modules/webform/includes/webform.translation.inc
@@ -33,7 +33,7 @@ function webform_form_language_content_settings_form_alter(array &$form, FormSta
 function webform_form_locale_translate_edit_form_alter(&$form, FormStateInterface $form_state) {
   // Don't allow YAML to be validated using locale string translation.
   foreach (Element::children($form['strings']) as $key) {
-    $element =& $form['strings'][$key];
+    $element = &$form['strings'][$key];
     if ($element['original']
       && !empty($element['original']['#plain_text'])
       && preg_match("/'#[^']+':/", $element['original']['#plain_text'])
diff --git a/web/modules/webform/js/webform.admin.js b/web/modules/webform/js/webform.admin.js
index 343a1649f2dfbd2cf90b739fac8ad79de1c2c07d..69b5be8a41a38c03c782ca5f2cac91e31ded3cc8 100644
--- a/web/modules/webform/js/webform.admin.js
+++ b/web/modules/webform/js/webform.admin.js
@@ -43,7 +43,7 @@
       // Only attach the click event handler to the entire table and determine
       // which row triggers the event.
       $('.webform-results-table', context).once('webform-results-table').on('click', function (event) {
-        if (event.target.tagName === 'A' || event.target.tagName === 'BUTTON') {
+        if (event.target.tagName === 'A' || event.target.tagName === 'BUTTON' || event.target.tagName === 'INPUT') {
           return true;
         }
 
@@ -51,6 +51,14 @@
           return true;
         }
 
+        var $input = $(event.target).closest('td').find('input');
+        if ($input.length) {
+          if ($input.attr('type') === 'checkbox') {
+            $input.click();
+          }
+          return true;
+        }
+
         var $tr = $(event.target).parents('tr[data-webform-href]');
         if (!$tr.length) {
           return true;
diff --git a/web/modules/webform/js/webform.jquery.ui.dialog.js b/web/modules/webform/js/webform.drupal.dialog.js
similarity index 78%
rename from web/modules/webform/js/webform.jquery.ui.dialog.js
rename to web/modules/webform/js/webform.drupal.dialog.js
index 993d8d27e0e83274d1eb6d1b6f30252cae33f573..8fc104d6f9f87fad88b19a551021eace1136fe9a 100644
--- a/web/modules/webform/js/webform.jquery.ui.dialog.js
+++ b/web/modules/webform/js/webform.drupal.dialog.js
@@ -12,13 +12,15 @@
    *
    * @see http://stackoverflow.com/questions/20533487/how-to-ensure-that-ckeditor-has-focus-when-displayed-inside-of-jquery-ui-dialog
    */
-  var _allowInteraction = $.ui.dialog.prototype._allowInteraction;
-  $.ui.dialog.prototype._allowInteraction = function (event) {
-    if ($(event.target).closest('.cke_dialog').length) {
-      return true;
-    }
-    return _allowInteraction.apply(this, arguments);
-  };
+  if ($.ui && $.ui.dialog && $.ui.dialog.prototype._allowInteraction) {
+    var _allowInteraction = $.ui.dialog.prototype._allowInteraction;
+    $.ui.dialog.prototype._allowInteraction = function (event) {
+      if ($(event.target).closest('.cke_dialog').length) {
+        return true;
+      }
+      return _allowInteraction.apply(this, arguments);
+    };
+  }
 
   /**
    * Attaches webform dialog behaviors.
diff --git a/web/modules/webform/js/webform.element.help.js b/web/modules/webform/js/webform.element.help.js
index 0e56e52a43f0057d23590b76a8c78515c1ff9659..59db8786e36ba6fc91c1aaadcb684bb8a986e080 100644
--- a/web/modules/webform/js/webform.element.help.js
+++ b/web/modules/webform/js/webform.element.help.js
@@ -24,6 +24,29 @@
         return;
       }
 
+      // Hide on escape.
+      // @see https://atomiks.github.io/tippyjs/v6/plugins/#hideonesc
+      var hideOnEsc = {
+        name: 'hideOnEsc',
+        defaultValue: true,
+        fn({hide}) {
+          function onKeyDown(event) {
+            if (event.keyCode === 27) {
+              hide();
+            }
+          }
+
+          return {
+            onShow() {
+              document.addEventListener('keydown', onKeyDown);
+            },
+            onHide() {
+              document.removeEventListener('keydown', onKeyDown);
+            },
+          };
+        },
+      };
+
       $(context).find('.js-webform-element-help').once('webform-element-help').each(function () {
         var $link = $(this);
 
@@ -36,7 +59,8 @@
           content: $link.attr('data-webform-help'),
           delay: 100,
           allowHTML: true,
-          interactive: true
+          interactive: true,
+          plugins: [hideOnEsc]
         }, Drupal.webform.elementHelpIcon.options);
 
         tippy(this, options);
diff --git a/web/modules/webform/js/webform.wizard.track.js b/web/modules/webform/js/webform.wizard.track.js
index f7c7e0352caac3016e0366c24c40a4256af2ee70..d08ef59d62f371b5956ddb016bc17ee1ff88e0ec 100644
--- a/web/modules/webform/js/webform.wizard.track.js
+++ b/web/modules/webform/js/webform.wizard.track.js
@@ -21,7 +21,9 @@
       // parameter is correct since conditional logic can skip pages.
       // Note: window.history is only supported by IE 10+.
       if (window.history && window.history.replaceState) {
-        var $form = $(context).find('[data-webform-wizard-current-page]');
+        var $form = $(context).hasData('webform-wizard-current-page')
+          ? $(context)
+          : $(context).find('[data-webform-wizard-current-page]');
         // Make sure the form is visible before updating the URL.
         if ($form.length && $form.is(':visible')) {
           // Append the form's current page data attribute to the browser's URL.
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 db78ff1c2429fcf799d8b600291a11ac79543344..842fe84e5dc13835380604c2f47948e01e27d92f 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
index c51dd6ec2d0ad28e35cf3648f0e7879bfb06c963..926f5903fe736aa1a4b558e3a1e2d3036fd45fce 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_access.yml
@@ -89,6 +89,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
index 56608b129d10896257f6e1d0ebad81202fba73bb..2b7d857c5526f1cffb5d05e0c0a203cc62aac207 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_email.yml
@@ -110,6 +110,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
index cbf2a907c3832e2954e2f22925a64156b6c5bc64..d09e41acc4e14039e91204e7f1b32b65ac4e8b74 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_sanitize.yml
@@ -69,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
index c3e6524bfd34843ce136783d21260a0aa00a5b8b..86e1c00c6dc168b781ba257f075996e0aba7979c 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_states.yml
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
index 2bd953adb26e2f3b928bc74810bf87fde5afbcc5..bb3748dc96da42a019f0dae344e25b10dc58ac1a 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_token.yml
@@ -77,6 +77,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
index 57081d72534a36b5b29943068223c7d3606c49bd..07f272adc4771093404120180b852da325bfedbd 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_twig.yml
@@ -79,6 +79,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
index e2e1422c28a36ab100a2727922b2cdde6a7f16d6..12774a362b078c66a9031794ef0254b2237d62b5 100644
--- a/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
+++ b/web/modules/webform/modules/webform_attachment/tests/modules/webform_attachment_test/config/install/webform.webform.test_attachment_url.yml
@@ -80,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8df158a8d4971a68ef5a4f0183b4918047d94421..b5e342cf3908de91bcc3cef1fd8d042de3814f41 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 eda9e2c2d14f4e89b1da01541ad0e00a826ce1d2..9bfd9ddb5aa1e0bcacfbc1f949598fbb289f8d69 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 3c72ea12150b76234bdca30650f2bf9e18533c7d..541704bc3007444e804334946ac56fa239876d74 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 5caf152c3fe787fd8a87c2961771944a74da5ae7..e347869d8eb0dbd659efdebe5055dcbb7a0e10ee 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 5b99bb1d8e1335ae2bfe04179671776fdeb3ce68..5556642da97c56c3db7627131750ac85bd9616b6 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_cards/src/WebformCardsManager.php b/web/modules/webform/modules/webform_cards/src/WebformCardsManager.php
index ddbe2ece51d973fba7285a562a6b1f3c7e4f6549..4f47ef9c83d13f814cb7d36cf5712ecc2662e97a 100644
--- a/web/modules/webform/modules/webform_cards/src/WebformCardsManager.php
+++ b/web/modules/webform/modules/webform_cards/src/WebformCardsManager.php
@@ -44,16 +44,24 @@ public function __construct(WebformElementManagerInterface $element_manager, Web
    * {@inheritdoc}
    */
   public function hasCards(WebformInterface $webform) {
+    return ($this->getNumberOfCards($webform) > 0) ? TRUE : FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getNumberOfCards(WebformInterface $webform) {
     $elements = $webform->getElementsDecoded();
+    $count = 0;
     foreach ($elements as $element) {
       if (is_array($element)) {
         $element_plugin = $this->elementManager->getElementInstance($element);
         if ($element_plugin instanceof WebformCard) {
-          return TRUE;
+          $count++;
         }
       }
     }
-    return FALSE;
+    return $count;
   }
 
   /**
diff --git a/web/modules/webform/modules/webform_cards/src/WebformCardsManagerInterface.php b/web/modules/webform/modules/webform_cards/src/WebformCardsManagerInterface.php
index 7020b027eb3d425f6fbb65cb0a209c93475419b8..cc6135c22c7da8f360bb21c53d522beda47d8544 100644
--- a/web/modules/webform/modules/webform_cards/src/WebformCardsManagerInterface.php
+++ b/web/modules/webform/modules/webform_cards/src/WebformCardsManagerInterface.php
@@ -21,6 +21,17 @@ interface WebformCardsManagerInterface {
    */
   public function hasCards(WebformInterface $webform);
 
+  /**
+   * Counts the number of cards used in a webform.
+   *
+   * @param \Drupal\webform\WebformInterface $webform
+   *   A webform.
+   *
+   * @return int
+   *   The number of cards for the webform.
+   */
+  public function getNumberOfCards(WebformInterface $webform);
+
   /**
    * Build webform's cards based on the current operation.
    *
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
index 4dc9a4608a40750fb49b55a0b3c5a10bb49f7848..09acea283f02f5580baefd9de954dac55dd43f86 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_access.yml
@@ -99,6 +99,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
index 7a7c670fe2ccbe4af99386af3e71ae21cf7f2000..3859aea19c4446225c2f7905208d6225c2807b78 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_ajax.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
index b73b497583b673c63b50c159eb58d4f87e5fa358..aff089489c4ee9647ffbb51e65488c89766348ba 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward.yml
@@ -134,6 +134,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
index d99701e0947f84e5441ba7d41ae40db2039ffbe0..6f9799875e2a271d4b79022d743b5c4ed240e716 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_auto_forward_hide.yml
@@ -67,7 +67,7 @@ elements: |
         kitten_3:
           text: 'Cute Kitten 3'
           src: 'http://placekitten.com/130/200'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -109,6 +109,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
index e57296b2117a34583ded240bd0f234b964f6bcd2..ff66012a27088c2c283b82b1b5df02252c4cd0de 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_draft.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
index 1ab5541c97025a083f8893bc962da5cc2f11f026..463ca8b12fc166ed874b2802cea879c0cd500d03 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_javascript.yml
@@ -95,6 +95,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
index 290f974e15404b3fa1be775221c09fe297558c7f..733fc732592aa83aa12e55ed45e0b9dbaf141227 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_long_100.yml
@@ -658,6 +658,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
index b273ca01f47e4f9c8ec4bbf2445aacab93a346ab..e80f94484afa40693c49d2b651345b0e46a30a41 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
index 73cf2f1077031afcdb23f5622c2da93f7f13db32..3f804231c25d086f3567d13f4638fe08a1be986c 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_custom.yml
@@ -161,6 +161,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
index c53f36a72576d828652cf4ae64854516b9e8e98a..dc99de7f111a477259b747fe95e939e10bf610c2 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_progress_links.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
index 94fc93ade12a15407df9a235324f6b61220e32ea..fa6393601b082fe1cff1ea775f9793ba8c435f63 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_states.yml
@@ -161,6 +161,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
index bf5830ab1b7238de9b9f4494240924404786e68d..606fe6923887d1a99f3e4ffd1751766101bfcc84 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_titles.yml
@@ -75,6 +75,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
index 5444ee3d1feebdc19248f3ad7178f705589325a0..f9187c75655612b7ae680f69e3de0a71b8442893 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_toggle.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
index 93be92058f3433b31c5e2ead29e9ab406a91bdcb..244ba7a660ee175c4b7b6a443e78cd6bb5520636 100644
--- a/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
+++ b/web/modules/webform/modules/webform_cards/tests/modules/webform_cards_test/config/install/webform.webform.test_cards_validation_errors.yml
@@ -80,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c04500b1781381d3a6dd7a4624c0864702923a6e..89286d80ade4e07a17949ae649919fd4cdc6faa5 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 3812074fdc31e1ed06d2b72463f7db6bfcf12fc1..210351e8a4e4b408851c931770e75e5bb18df9e4 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_cards/webform_cards.module b/web/modules/webform/modules/webform_cards/webform_cards.module
index d6fe0e50b4ebf00c6da11b3699f34d06fb4ff11b..e888089387b12a0ae1830f863ad7e521ebcf04a8 100644
--- a/web/modules/webform/modules/webform_cards/webform_cards.module
+++ b/web/modules/webform/modules/webform_cards/webform_cards.module
@@ -90,6 +90,7 @@ function webform_cards_webform_submission_form_alter(array &$form, FormStateInte
 
   /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
   $webform_submission = $form_object->getEntity();
+
   /** @var \Drupal\webform\WebformInterface $webform */
   $webform = $webform_submission->getWebform();
 
@@ -360,14 +361,7 @@ function webform_cards_form_webform_admin_config_elements_form_alter(array &$for
  * @see /admin/structure/webform/manage/{webform}/settings
  */
 function webform_cards_form_webform_settings_form_alter(array &$form, FormStateInterface $form_state) {
-  /** @var \Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm $form_object */
-  $form_object = $form_state->getFormObject();
-  /** @var \Drupal\webform\WebformInterface $webform */
-  $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.
-  $has_cards = $webform_cards_manager->hasCards($webform);
+  $has_cards = _webform_cards_form_state_has_cards($form_state);
   if (!$has_cards) {
     return;
   }
@@ -395,22 +389,41 @@ function webform_cards_form_webform_settings_form_alter(array &$form, FormStateI
  * @see /admin/structure/webform/manage/{webform}/settings/form
  */
 function webform_cards_form_webform_settings_form_form_alter(array &$form, FormStateInterface $form_state) {
+  $has_cards = _webform_cards_form_state_has_cards($form_state);
+  if ($has_cards) {
+    unset($form['wizard_settings']['#states']);
+  }
+
   _webform_cards_form_alter_elements($form, [
     'wizard_settings' => [
       '#title' => t('Form wizard/cards settings'),
+      // Progress.
       'wizard_progress_bar' => [
         '#title' => t('Show wizard/cards progress bar'),
       ],
+      'wizard_progress_link' => [
+        '#title' => t('Link to previous pages/cards in progress bar'),
+        '#description' => t('If checked, previous pages/cards will be link in the progress bar.'),
+      ],
       'wizard_progress_pages' => [
         '#title' => t('Show wizard/cards progress pages'),
       ],
       'wizard_progress_percentage' => [
         '#title' => t('Show wizard/cards progress percentage'),
       ],
+      'wizard_preview_link' => [
+        '#title' => t('Link to previous pages/cards in preview'),
+        '#description' => t("If checked, the preview page/card will included 'Edit' buttons for each previous page/card.") . '<br/><br/>' .
+        '<em>' . t("This settings is only available when 'Enable preview page/card' is enabled.") . '</em>',
+      ],
       'wizard_progress_states' => [
         '#title' => t("Update wizard/cards progress bar's pages based on conditions"),
         '#description' => t("If checked, the wizard/cards progress bar's pages will be hidden or shown based on each pages conditional logic."),
       ],
+      // Navigation.
+      'wizard_navigation_title' => [
+        '#access' => TRUE,
+      ],
       'wizard_auto_forward' => [
         '#access' => TRUE,
       ],
@@ -420,6 +433,28 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
       'wizard_keyboard' => [
         '#access' => TRUE,
       ],
+      // Pages.
+      'wizard_pages_title' => [
+        '#states' => [],
+      ],
+      'wizard_confirmation' => [
+        '#title' => t('Include confirmation page/card in progress'),
+        '#description' => t("If checked, the confirmation page/card will be included in the progress bar."),
+      ],
+      'wizard_toggle' => [
+        '#title' => t('Display show/hide all wizard/cards pages link'),
+        '#description' => t('If checked, a hide/show all elements link will be added to this webform when there are wizard/cards pages.'),
+        '#access' => TRUE,
+      ],
+      // Labels.
+      'wizard_toggle_show_label' => [
+        '#title' => t('Wizard/cards show all elements label'),
+        '#access' => TRUE,
+      ],
+      'wizard_toggle_hide_label' => [
+        '#title' => t('Wizard/card hide all elements label'),
+        '#access' => TRUE,
+      ],
       'wizard_start_label' => [
         '#title' => t('Wizard/cards start label'),
         '#description' => t('The first page label in the progress bar. Subsequent pages are titled by their wizard/card page title.'),
@@ -427,13 +462,6 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
       'wizard_confirmation_label' => [
         '#title' => t('Wizard/cards end label'),
       ],
-      'wizard_track' => [
-        '#title' => t('Track wizard/cards progress in the URL by'),
-        '#options' => [
-          'name' => t("Page/card name (?page=contact)"),
-          'index' => t("Page/card index (?page=2)"),
-        ],
-      ],
       'wizard_prev_button_label' => [
         '#title' => t('Wizard/cards previous page button label'),
         '#description' => t('This is used for the previous page button within a wizard/cards.'),
@@ -442,18 +470,13 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
         '#title' => t('Wizard/cards next page button label'),
         '#description' => t('This is used for the next page button within a wizard/cards.'),
       ],
-      'wizard_toggle' => [
-        '#title' => t('Display show/hide all wizard/cards pages link'),
-        '#description' => t('If checked, a hide/show all elements link will be added to this webform when there are wizard/cards pages.'),
-        '#access' => TRUE,
-      ],
-      'wizard_toggle_show_label' => [
-        '#title' => t('Wizard/cards show all elements label'),
-        '#access' => TRUE,
-      ],
-      'wizard_toggle_hide_label' => [
-        '#title' => t('Wizard/card hide all elements label'),
-        '#access' => TRUE,
+      // Tracking.
+      'wizard_track' => [
+        '#title' => t('Track wizard/cards progress in the URL by'),
+        '#options' => [
+          'name' => t("Page/card name (?page=contact)"),
+          'index' => t("Page/card index (?page=2)"),
+        ],
       ],
     ],
   ]);
@@ -466,15 +489,8 @@ function webform_cards_form_webform_settings_form_form_alter(array &$form, FormS
  * @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)) {
+  $has_cards = _webform_cards_form_state_has_cards($form_state);
+  if ($has_cards) {
     $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;
@@ -490,6 +506,29 @@ function webform_cards_form_webform_settings_submissions_form_alter(array &$form
   }
 }
 
+/**
+ * Determine if the form state's related webform has cards.
+ *
+ * @param \Drupal\Core\Form\FormStateInterface $form_state
+ *   The current state of the form.
+ *
+ * @return bool
+ *   TRUE if the form states entity webform has cards.
+ */
+function _webform_cards_form_state_has_cards(FormStateInterface $form_state) {
+  /** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
+  $form_object = $form_state->getFormObject();
+
+  /** @var \Drupal\webform\WebformInterface $entity */
+  $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.
+  return $webform_cards_manager->hasCards($webform);
+}
+
 /**
  * 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 f0f8a07b16ba4752818e46b44d9dd2031d1c81ca..ce47a96ba3f9b0a2dc33a6967ee6ec755ffb7ba5 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
@@ -37,7 +37,7 @@
       $(context).find(':input[type="date"], :input[type="time"], :input[type="datetime"]')
         .removeAttr('step')
         .removeAttr('min')
-        .removeAttr('min');
+        .removeAttr('max');
     }
   };
 
@@ -65,7 +65,7 @@
         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);
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 cfa4ca3eaadeb4a60d10d1901d7500796b77ac9b..e761ffe79c538228205e78b3f6dcee5e722f67f2 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
@@ -235,7 +235,7 @@ elements: |
       '#type': webform_signature
       '#title': signature
       '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -277,6 +277,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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
index 53f20cea373eefc5620d17c6bc36b05788b3f211..7d00c79c3115736d5fd6b3fe8d25f2483ffb361b 100644
--- 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
@@ -12,7 +12,6 @@ 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'
@@ -218,7 +217,7 @@ elements: |
         '#type': webform_signature
         '#title': signature
         '#required': true
-
+  
 css: ''
 javascript: ''
 settings:
@@ -260,6 +259,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3e4f36d4de0b5593596e2fc86944c9597d925d5b..7aa9cbe02c40575412fc3b7f4e3320a252fcb2dc 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 be8e8ee3eb1facce9b351ad720f83bdb3500b0e5..7a3e1c5e496f8e3e50e087361136c1dd03b16c9e 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
index 1cc2b0df3d611c209f87b039b7c03105bf2d0490..0dfec4519f325e2e2e7f9a96a12a9e407e8eb496 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application.yml
@@ -1,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -158,6 +159,7 @@ elements: |
       '#access_update_roles': {  }
       '#access_view_roles':
         - authenticated
+  
 css: ''
 javascript: ''
 settings:
@@ -199,6 +201,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
index 054342112bb3461f45483017328ca1e40d16272e..2d9088f203427be7021d14546e93b34f368e5eaa 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/config/install/webform.webform.demo_application_evaluation.yml
@@ -26,12 +26,12 @@ elements: |
       {{ children }}
       <div>{{ 'Submitted by'|t }}: <em>[webform_submission:user]</em></div>
       <hr/>
-  
+      
     '#format_text': |
       {{ children }}
       {{ 'Submitted by'|t }} [webform_submission:user]
       ------------------------------------------------------------
-  
+      
     rating:
       '#type': webform_rating
       '#title': Rating
@@ -81,6 +81,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 88f25e2cdb38dcf37b8bbc16b2039a75381d8273..548ea764bca1c8a2a3f378c7f503a0df3d00754e 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.install b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.install
index 353adf70497a264e809d77b5e82b28e009f83bc8..5f06adeefea42601b617f06ee732da17dcb57697 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.install
+++ b/web/modules/webform/modules/webform_demo/webform_demo_application_evaluation/webform_demo_application_evaluation.install
@@ -66,6 +66,7 @@ function webform_demo_application_evaluation_install() {
 function webform_demo_application_evaluation_uninstall() {
   // Delete all webform:demo_application nodes.
   $entity_ids = \Drupal::entityQuery('node')
+    ->accessCheck(TRUE)
     ->condition('webform.target_id', 'demo_application')
     ->execute();
   if ($entity_ids) {
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
index ff4f9524a58a011521713e75c449ade0110565bf..b9ce40fec396cefcefbf02b44bba0193c40af5d6 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/config/install/webform.webform.demo_event_registration.yml
@@ -103,6 +103,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: true
   share_theme_name: ''
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 109a4f1977c3eb2e0718066486a5a7abcef9b732..7fa6b6549df4ef1f6ef0ac14de95bd3d1c193742 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
index cf6a00c47462ee8c59efc93b8ef5fcea08659e30..77b7c7e54070061a2de3caff10fe81b35a84c977 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
+++ b/web/modules/webform/modules/webform_demo/webform_demo_event_registration/webform_demo_event_registration.install
@@ -41,6 +41,7 @@ function webform_demo_event_registration_install() {
 function webform_demo_event_registration_uninstall() {
   // Delete all webform:demo_event_registration nodes.
   $entity_ids = \Drupal::entityQuery('node')
+    ->accessCheck(TRUE)
     ->condition('type', 'webform_demo_event')
     ->condition('webform.target_id', 'demo_event_registration')
     ->execute();
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
index e828f508c5e935dc1ef30fe1fb952c387634c2cb..851ecb7605c4554829f0028bac59767875201528 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_group/config/install/webform.webform.webform_group_contact.yml
@@ -129,6 +129,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 797079016753d74a8ac0cd3f7bd61eebb0f77cf0..a478a44f69281d76f9f584968fd068c818a58f89 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
index 374bdeca17f0577344df731007c20843211812ad..ce3e6aed7c70a20cc5baa0e5092a20b3a2cfd47c 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
+++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/config/install/webform.webform.demo_region_contact.yml
@@ -82,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9e90b64e32aecc869d8148b415c5fb863bea19b4..13f8471a4f40207001228166d7337c090645726c 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.install b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.install
index eceed94eeb6343af39b6954960fb240f9102b39d..9541bf75d068d66392056f2175acca59b35e8f38 100644
--- a/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.install
+++ b/web/modules/webform/modules/webform_demo/webform_demo_region_contact/webform_demo_region_contact.install
@@ -141,6 +141,7 @@ function webform_demo_region_contact_install() {
 function webform_demo_region_contact_uninstall() {
   // Delete all 'webform:demo_region_contact' nodes.
   $entity_ids = \Drupal::entityQuery('node')
+    ->accessCheck(TRUE)
     ->condition('type', 'webform_demo_region')
     ->condition('webform.target_id', 'demo_region_contact')
     ->execute();
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 c4a21fdbd995205574cf530bb1e16ada300f65ee..4fc58b291b572ad56c97af2830dcc06941fcf9f1 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
index 23090904dd908ab88dc1b2d7e96f99d7cd754c74..4092289923373057a73891835d9062ab06399cd0 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print.yml
@@ -28,7 +28,7 @@ elements: |
     '#type': webform_image_file
     '#title': image_file
     '#file_extensions': gif
-
+  
 css: '/** custom webform css **/'
 javascript: ''
 settings:
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -132,6 +135,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>You can view your submission via <a href="[webform_submission:view-url]">[webform_submission:view-url:relative]</a></p>
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
diff --git a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
index f505fe65a4f6f868ab30c4c08114ae4d5edba5c8..81a5e58e99122c21c5281f7c3857918d90917d76 100644
--- a/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
+++ b/web/modules/webform/modules/webform_entity_print/tests/modules/webform_entity_print_test/config/install/webform.webform.test_entity_print_custom.yml
@@ -75,6 +75,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 239ac9cb036052c2839c2a11f7e651cec63fe7ac..1b4ad283fc1b9779fccbe3bda6ddc94ebb6f8335 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 07aff781ba7f296ed84156db66f88f2df8733b52..fb879b28aa59c0d34934b797ea06ddac126116a3 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
index daae5fe5b8c3de4c420bf7f3da32115398ba57eb..4505b8702f9db35118c872db749cbdc657b5306a 100644
--- a/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
+++ b/web/modules/webform/modules/webform_entity_print_attachment/tests/modules/webform_entity_print_attachment_test/config/install/webform.webform.test_entity_print_attachment.yml
@@ -76,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 df904f475b7b2365b037c7403e9ca904d07b3a20..9a22805bbbd66faff5b0402cafaa3986db589c92 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 7e1cfb17ffd21041f1d76e6533d2f8ec3864679c..58e82d34af67cd24621727d79d80281bf379a804 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
index e7213e88657237b62c52c75619453eea9dbed4ad..ca79dd0454dfe85ec7ecc150d744424af7009929 100644
--- a/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
+++ b/web/modules/webform/modules/webform_example_composite/config/install/webform.webform.webform_example_composite.yml
@@ -66,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ef04dd023e5c768fb1ea677b4800b628ee2473d4..1938903a6f22993344a23d0f7bd8793a9dc315be 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_composite/webform_example_composite.module b/web/modules/webform/modules/webform_example_composite/webform_example_composite.module
index 5911af46beffd6da7bbaf127d44fb0f3d795ab3e..ed4e273ce94c6edd39e0acbfad057bbecedb7935 100644
--- a/web/modules/webform/modules/webform_example_composite/webform_example_composite.module
+++ b/web/modules/webform/modules/webform_example_composite/webform_example_composite.module
@@ -5,7 +5,7 @@
  * Provides an example that shows how to create a Webform composite.
  */
 
-module_load_include('inc', 'webform', 'includes/webform.theme.template');
+include_once __DIR__ . '/../../includes/webform.theme.template.inc';
 
 /**
  * Implements hook_theme().
diff --git a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
index 370043e946a601ce7efc601b6da2f61fbe50cae7..edbbf0a70d0d7aea117171e8a8650dbf5b945867 100644
--- a/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
+++ b/web/modules/webform/modules/webform_example_custom_form/config/install/webform.webform.webform_example_custom_form.yml
@@ -346,6 +346,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b1da53e01d4836332a1230a838f34572a2c1a85a..ecde84b88c075e6ceebc9988a73192ff663326ab 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
index 0ab3d9a197ac370d7c90464947ed07c3bb6c3a0e..f14234a11361e44797a7f1e9ceb9606c48963a74 100644
--- a/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
+++ b/web/modules/webform/modules/webform_example_element/config/install/webform.webform.webform_example_element.yml
@@ -65,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ead20fcba80e694628697582010ca92c722b12b3..6d0dd899f822e5b872c36c2381cbcfb88e6fa7ef 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 7f10ac9e8101dd7f5842d12080648564244b4815..f0528852d2b95e9b9182b9940d23daafe5bcede8 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
index c9b677d71910d0886af5ab0955ca59f9db4ab5f0..b33688ddc2efb8cd317822b09034364471f16936 100644
--- a/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
+++ b/web/modules/webform/modules/webform_example_handler/config/install/webform.webform.webform_example_handler.yml
@@ -65,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ef40fd33fada513a794cc4ad61e340189b18eae3..b5545f46f64153d1fab5653f2fa769683245722e 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
index 830a26912cbcf6632fe541e1e5402bbde99f7c9e..f4042656a3a8f8230b3ec1e38ee7ce05d675a5c6 100644
--- a/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
+++ b/web/modules/webform/modules/webform_example_remote_post/config/install/webform.webform.example_remote_post.yml
@@ -82,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -257,6 +260,7 @@ handlers:
         custom_all: true
         
       custom_options: ''
+      file_data: true
       cast: false
       debug: true
       completed_url: '[site:url]webform_example_remote_post/completed'
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 af336869c15cbdf2365eaa674ef495225a8d41dd..d34f74ce2683fb7e7cf1051d34e6bc2c898a439f 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
index 9903cfb22f9eb1d565d677b5cc709a764092953b..0b4f1cc8814e0ba03606a89bf9a4cb5f4d7745f2 100644
--- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
+++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_ab_test.yml
@@ -46,7 +46,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Submit feedback'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -88,6 +88,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -332,7 +335,7 @@ variants:
           '#title_display': 'inline'
         actions:
           '#title': 'Submit'
-
+        
       handlers:
         email_confirmation:
           status: false
diff --git a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
index 027abac0f7cf87b8f671448de3d4d6a6a47706ee..589b24dc996f7c4958a341559a3758552216eb59 100644
--- a/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
+++ b/web/modules/webform/modules/webform_example_variant/config/install/webform.webform.webform_example_variant_segments.yml
@@ -76,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4a3c3c69b1b060a806901bb13485da2e2c43cbb1..8764731cd6e631c4f1cb2fb274ae403b0be7f427 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
index 21f30b6f30986d611b7777803c6fae06cec2a530..1395c36e8f1fe27ac4a03c43638a77de2b0331d9 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements.yml
@@ -89,6 +89,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
index 04a375664a26fad0d582b2bff24b74e05b41b96f..5971b4d1d04a6c82597f8b446638ebe1048154ff 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_computed_elements_ajax.yml
@@ -78,7 +78,7 @@ elements: |
           type: _none
     user_preview:
       '#type': webform_computed_token
-      '#title': 'User'
+      '#title': User
       '#title_display': none
       '#ajax': true
       '#hide_empty': true
@@ -88,6 +88,7 @@ elements: |
         <strong>User: Email:</strong> [webform_submission:values:user:entity:mail:clear]<br/>
         <strong>User: URL:</strong> [webform_submission:values:user:entity:url:clear]<br/>
         <strong>User: Created:</strong> [webform_submission:values:user:entity:created:clear]
+        
       '#display_on': form
     user_uid:
       '#type': webform_computed_token
@@ -120,18 +121,19 @@ elements: |
     '#description': |
       Formula: weight (lb) / [height (in)]2 x 703<br/>
       @see <a href="https://www.cdc.gov/nccdphp/dnpao/growthcharts/training/bmiage/page5_2.html">https://www.cdc.gov/nccdphp/dnpao/growthcharts/training/bmiage/page5_2.html</a>
+      
     weight:
       '#type': number
       '#title': Weight
       '#field_suffix': ' pounds'
       '#default_value': 37.25
-      '#step': .25
+      '#step': 0.25
       '#min': 1
     height:
       '#type': webform_height
       '#title': Height
       '#default_value': 41.5
-      '#inches__step': .5
+      '#inches__step': 0.5
     bmi:
       '#type': webform_computed_twig
       '#title': BMI
@@ -187,6 +189,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
index c6a1a0a5b66a67a2a1098bab7dec7b18687a3df8..904dfbec42734f210fd608173788a75b2f7c2c2b 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_element_states.yml
@@ -234,6 +234,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
index 929f864c1ecbc4cfcae0dfea2b62b06c1c8a2441..9daa15bcb41023854788cab9fb3c20db5c54a1fd 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_flexbox_layout.yml
@@ -160,6 +160,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
index 2f1750c95f656f0f48b004fc96eb94ac69fb10d4..7f743832add41e0862a8948f4db964245fb3798c 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_input_masks.yml
@@ -128,6 +128,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
index 6426d4236a2ff0874498a554f28b28f4b0d5ce9d..9cd562207ee2bec77575da27811b4245fdebf7c1 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_style_guide.yml
@@ -80,7 +80,6 @@ elements: |
     checkboxes_description:
       '#type': checkboxes
       '#title': 'Checkboxes with descriptions'
-      '#options_description_display': description
       '#options':
         one: 'One -- This is a description.'
         two: 'Two -- This is a description.'
@@ -158,9 +157,6 @@ elements: |
     range:
       '#type': range
       '#title': Range
-      '#min': 0
-      '#max': 100
-      '#step': 1
       '#output': right
       '#output__field_prefix': $
       '#output__field_suffix': '.00'
@@ -239,7 +235,6 @@ elements: |
     webform_scale:
       '#type': webform_scale
       '#title': Scale
-      '#min': 1
       '#max': 10
       '#min_text': '1 = disagree'
       '#max_text': '10 = agree'
@@ -273,6 +268,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
     entity_autocomplete_tags:
       '#type': entity_autocomplete
       '#title': 'Entity autocomplete tags'
@@ -280,6 +277,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#tags': true
     entity_autocomplete_multiple:
       '#type': entity_autocomplete
@@ -288,6 +287,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#multiple': true
     webform_entity_checkboxes:
       '#type': webform_entity_checkboxes
@@ -296,6 +297,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#options':
         1: Administrator
         0: Anonymous
@@ -306,6 +309,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#options':
         1: Administrator
         0: Anonymous
@@ -316,6 +321,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
     webform_entity_select_multiple:
       '#type': webform_entity_select
       '#title': 'Entity select multiple'
@@ -323,6 +330,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#multiple': true
       '#select2': true
     webform_term_checkboxes:
@@ -349,8 +358,6 @@ elements: |
       webform_address:
         '#type': webform_address
         '#title': 'First address'
-        '#flexbox': false
-        '#title_display': above
       webform_same_address:
         '#type': webform_same
         '#title': 'Second address same as the first address'
@@ -361,8 +368,6 @@ elements: |
       webform_address_other:
         '#type': webform_address
         '#title': 'Second address'
-        '#flexbox': false
-        '#title_display': above
     webform_link_multiple:
       '#type': webform_link
       '#title': 'Link multiple'
@@ -630,7 +635,6 @@ elements: |
       element_flex_1:
         '#type': textfield
         '#title': 'Element (Flex: 1)'
-        '#flex': 1
       element_flex_2:
         '#type': textfield
         '#title': 'Element (Flex: 2)'
@@ -689,6 +693,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
index 36719712b2ee2964d78d3cb471404c82b791a06b..823b2561289dca7951bc68555082121140c77efa 100644
--- a/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
+++ b/web/modules/webform/modules/webform_examples/config/install/webform.webform.example_wizard.yml
@@ -99,6 +99,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
index 22735ba4c81d5efdd53320ad5a53149d202f2c5d..fc4efeba333c51237cd89b0f51032b5bd32fc721 100644
--- a/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
+++ b/web/modules/webform/modules/webform_examples/config/optional/webform.webform.example_cards.yml
@@ -125,6 +125,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4283f43d66a959ff1aafb2086a85bbf096814a3c..34d8d24d23c60398b60a9aeaabe57c61a1fb0244 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
index ef2733d269caaa7c547c7a7b08ea35a86f2ff519..7f25d63c850a1f07fd35941d7f12968a9a54d9da 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_advanced.yml
@@ -252,6 +252,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
index 38894b225f3b6dd2a3c3e2585021665aeb0f5eb3..86125ce17fcbe68a927f50310203f3b011126c2d 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_basic.yml
@@ -168,6 +168,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
index e0171a6aba4c8fc6b81395b46da25d67764de0ab..bc51f2b893c18544b1c5dac1ab10ea4c6ecff07b 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_containers.yml
@@ -93,6 +93,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
index 3a06afff8d1e40616ed71711a4b40880841aabb1..3f43c2593c744785ec033551e4b14d48006704e7 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_labels.yml
@@ -223,6 +223,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
index 1655b3c6284bdbf6dd6a223f25f7b0f0fc813acd..b259cdc7c17e11d35b266418be0e9f7259ac3e93 100644
--- a/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
+++ b/web/modules/webform/modules/webform_examples_accessibility/config/install/webform.webform.example_accessibility_wizard.yml
@@ -98,6 +98,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d715482fc703b51aa13e793536fae9a05b1fcc07..e169e49c7be7b992ecc5af694433985899756303 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_group/src/WebformGroupManagerInterface.php b/web/modules/webform/modules/webform_group/src/WebformGroupManagerInterface.php
index dd4f55b51d141fee6399d412d5189f4baeece5f9..5b125128567f66228676ed7562b598d051d46dd5 100644
--- a/web/modules/webform/modules/webform_group/src/WebformGroupManagerInterface.php
+++ b/web/modules/webform/modules/webform_group/src/WebformGroupManagerInterface.php
@@ -61,9 +61,9 @@ public function getCurrentGroupWebform();
    * @param \Drupal\Core\Session\AccountInterface $account
    *   A user account.
    *
-   * @return \Drupal\group\Entity\GroupContentInterface|bool
-   *   The group role  for the webform submission.
-   *   FALSE if no group roles is found for the webform submission.
+   * @return array
+   *   An array of group roles for a webform submission and a specified
+   *   user account.
    */
   public function getWebformSubmissionUserGroupRoles(WebformSubmissionInterface $webform_submission, AccountInterface $account);
 
@@ -86,7 +86,7 @@ public function getWebformSubmissionGroupContent(WebformSubmissionInterface $web
    *   A webform.
    *
    * @return array
-   *   An associative array containiong a webform's access rules
+   *   An associative array containing a webform's access rules
    *   with group roles.
    */
   public function getAccessRules(WebformInterface $webform);
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
index 9913e9468cf3b370d181845e66b0da25506c2721..278d250f89a58fb81b13ce67e84766458ffd928e 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_element_group_roles.yml
@@ -68,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
index 13d5ee5bd18776a61c86a5ecd9c57bd3facfdac1..477b733b62df2aeb4441a00b855f9bd99023c850 100644
--- a/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
+++ b/web/modules/webform/modules/webform_group/tests/modules/webform_group_test/config/install/webform.webform.test_group_element_access.yml
@@ -86,6 +86,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 dbad33b3245d6b44b9efebc1a4ff59e06c215f97..52791fbf64beac73af599164d7ec39960735cb65 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 021fb28ba52bf7c16db1eb620b4d9d277bb15b1e..6dd9fb294fec972f00bdbb41e817cebc3ce5f479 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_group/webform_group.module b/web/modules/webform/modules/webform_group/webform_group.module
index 36c792dd1780e78aea48fee98b1755f16e4b778a..fb014d7372e41ab68f28ef02fd8627342e8ea42d 100644
--- a/web/modules/webform/modules/webform_group/webform_group.module
+++ b/web/modules/webform/modules/webform_group/webform_group.module
@@ -25,7 +25,7 @@
  */
 function webform_group_config_schema_info_alter(&$definitions) {
   // Append group roles to webform access schema.
-  $mapping =& $definitions['webform.webform.*']['mapping']['access']['sequence']['mapping'];
+  $mapping = &$definitions['webform.webform.*']['mapping']['access']['sequence']['mapping'];
   $mapping['group_roles'] = [
     'type' => 'sequence',
     'label' => 'Group roles',
@@ -203,7 +203,7 @@ function webform_group_form_webform_settings_access_form_alter(&$form, FormState
  */
 function webform_group_form_webform_ui_element_form_alter(&$form, FormStateInterface $form_state) {
   $default_properties = $form_state->get('default_properties');
-  $custom_default_value =& $form['properties']['custom']['properties']['#default_value'];
+  $custom_default_value = &$form['properties']['custom']['properties']['#default_value'];
 
   $operations = ['create', 'update', 'view'];
   foreach ($operations as $operation) {
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
index caf1eeaa9523f2dd745466f4fa6110ff22140b02..e9d6b8e886680730231459eb106289566bf738ff 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck.yml
@@ -140,6 +140,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
index 4dd4bebd76b16d2f0a6f1e7c414650e4cdf97b83..3c3bbf6bd2388b42ca35793cd573c257c5574fba 100644
--- a/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
+++ b/web/modules/webform/modules/webform_icheck/tests/modules/webform_icheck_test/config/install/webform.webform.test_element_icheck_styles.yml
@@ -874,6 +874,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 0a77fccafe6944c8dfb7dc199086e55a9ace430f..7646061259162e660dd4cb103aa2b9b291173eba 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 6363663a30106b6589efd9d352bce47ce9bf7c3f..384709a495be4fdd1436b4f57dd1f407ba5b9731 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
index 29f3b058e7816e999d0b103ce3a1ebd8c9ac1df3..513bd98aaedd21f20a387e03fe033d7e240631ed 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_image_select.yml
@@ -206,6 +206,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
index be2837d3ec76f11b3333b7bd92cc5856d07ec537..449c7d7f8cb4d1093eb2d604d094d1b74c78f557 100644
--- a/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
+++ b/web/modules/webform/modules/webform_image_select/tests/modules/webform_image_select_test/config/install/webform.webform.test_element_images.yml
@@ -107,6 +107,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f7f9e899f796cc5e41fb5adf4802c2131dda464d..00f5dffdbe8be090263fb87871a32c970c081591 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 ebaae2d4f05ea8d842680c5377ac38bcf87433ff..e25aaa9479dda7cc317d115ad05309d4d7f4f95f 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
index f3824a4a9d4270fe3fc6bd16a55b755a5d0f82d0..7ce93964676f5b833fd30ae010c86016c21dce0b 100644
--- a/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
+++ b/web/modules/webform/modules/webform_jqueryui_buttons/tests/modules/webform_jqueryui_buttons_test/config/install/webform.webform.test_element_buttons.yml
@@ -90,6 +90,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 700da050445d56746573f7cebde870c6954d2aed..b6a6fe6df3bbe506a07c34f28a3a2d47cc918714 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 27a6f9b7d481b340846d00f1fe49450758b270b6..2acdb69a1a9321fe4f4ff8bb079af4263665e306 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
index f405c2163018fa8267c2fb5992ffef43c97d7d2b..b350117ef7925c617b2a77c6f1eda13c5d78fd07 100644
--- a/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
+++ b/web/modules/webform/modules/webform_location_geocomplete/tests/modules/webform_location_geocomplete_test/config/install/webform.webform.test_element_loc_geocomplete.yml
@@ -137,6 +137,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d0cf3888435889994ecd992b3e6fb33d67a0d0fc..84b1dab0d49fdc8e86ea9a6e40fb7167e784bd75 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 7208ef95f8a1bf6e5e88ed316091bbb3fbfba069..b5c648a8a9f4ce2f1915e2c6b18a93a451e94f28 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
index 57ae13a1e30323578610acbed858c17ffad5cc29..ab4aa40f4948e866653578f7f805ee5f18bdfde8 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_a.yml
@@ -61,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
index 4f4ad3d69dace31b91f695841406f2f5451191d2..32a38b53044c0d090df49d743bc7dfa9ec2780b4 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/config/install/webform.webform.webform_node_test_multiple_b.yml
@@ -61,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 01250577e2380965d9724de4cae0daf527b7f4dd..105881adbfcf74f27fe740d3cc7274c04ba7e8fa 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.install b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.install
index a840bc8672049aa1f82d70ec90e548f338c20167..f5cb4d1a93d276d73322be0b97fd1454e7659e68 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.install
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_multiple/webform_node_test_multiple.install
@@ -34,6 +34,7 @@ function webform_node_test_multiple_install() {
 function webform_node_test_multiple_uninstall() {
   $entity_ids = \Drupal::entityQuery('node')
     ->condition('field_webform_test_multiple_a.target_id', 'webform_node_test_multiple_a')
+    ->accessCheck(TRUE)
     ->execute();
   if ($entity_ids) {
     /** @var \Drupal\node\Entity\Node[] $nodes */
diff --git a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
index 64f2edcd051b92e25bc6ebdcf953979313f0b34a..856b5a780c28546e8ab56720d7fa4d6cb87b1b59 100644
--- a/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
+++ b/web/modules/webform/modules/webform_node/tests/modules/webform_node_test_translation/config/install/webform.webform.webform_node_test_translation.yml
@@ -62,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9927f1668e949774b2a1d6c7670d587821f526bc..f77de0d587d4dd5693f14a40b17414386497f527 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_node/tests/src/Functional/Access/WebformNodeAccessClosedTest.php b/web/modules/webform/modules/webform_node/tests/src/Functional/Access/WebformNodeAccessClosedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c164d08282740288b52f463ae1c5dfeb3e154fa7
--- /dev/null
+++ b/web/modules/webform/modules/webform_node/tests/src/Functional/Access/WebformNodeAccessClosedTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Tests\webform_node\Functional\Access;
+
+use Drupal\webform\Entity\Webform;
+use Drupal\Tests\webform_node\Functional\WebformNodeBrowserTestBase;
+
+/**
+ * Tests for webform node closed access.
+ *
+ * @group webform_node
+ */
+class WebformNodeAccessClosedTest extends WebformNodeBrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['webform', 'webform_node'];
+
+  /**
+   * Tests webform node closed access.
+   */
+  public function testAccessClosedT() {
+    $node = $this->createWebformNode('contact');
+    $nid = $node->id();
+
+    $account = $this->drupalCreateUser(['access content']);
+
+    /**************************************************************************/
+
+    $this->drupalLogin($account);
+
+    // Check webform node access allowed.
+    $this->drupalGet('/node/' . $node->id());
+    $this->assertResponse(200);
+    $this->assertFieldByName('name', $account->getAccountName());
+    $this->assertFieldByName('email', $account->getEmail());
+
+    // Check webform access allowed with source entity.
+    $this->drupalGet('/webform/contact', ['query' => ['source_entity_type' => 'node', 'source_entity_id' => $nid]]);
+    $this->assertResponse(200);
+    $this->assertFieldByName('name', $account->getAccountName());
+    $this->assertFieldByName('email', $account->getEmail());
+
+    // Close the webform via the node.
+    $node->webform->status = FALSE;
+    $node->save();
+
+    // Check webform node access denied.
+    $this->drupalGet('/node/' . $node->id());
+    $this->assertResponse(200);
+    $this->assertNoFieldByName('name', $account->getAccountName());
+    $this->assertNoFieldByName('email', $account->getEmail());
+    $this->assertRaw('Sorry… This form is closed to new submissions.');
+
+    // Check webform access denied with source entity.
+    $this->drupalGet('/webform/contact', ['query' => ['source_entity_type' => 'node', 'source_entity_id' => $nid]]);
+    $this->assertResponse(200);
+    $this->assertNoFieldByName('name', $account->getAccountName());
+    $this->assertNoFieldByName('email', $account->getEmail());
+    $this->assertRaw('Sorry… This form is closed to new submissions.');
+  }
+
+}
diff --git a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeResultsTest.php b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeResultsTest.php
index 9a1f0a02590c35b00e670b8b97da458fda94a5fc..e80577e932de1c184af8017bea7ffecf9221d549 100644
--- a/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeResultsTest.php
+++ b/web/modules/webform/modules/webform_node/tests/src/Functional/WebformNodeResultsTest.php
@@ -164,6 +164,7 @@ public function testResults() {
     $edit = [
       'columns[created][checkbox]' => FALSE,
       'columns[changed][checkbox]' => TRUE,
+      'sort' => 'serial',
       'direction' => 'asc',
       'limit' => 20,
       'default' => TRUE,
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 a979dbd35d2987ad124fd33a2b21973313eb7609..c764ac21f8c75729bcaa8f0e0e247998e441442d 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
index 81263922df530a40679822a1c31110c844b752a1..a4f618e7912bf8d676d40eca81df749f42129c35 100644
--- a/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
+++ b/web/modules/webform/modules/webform_options_custom/config/install/webform.webform.example_options_custom.yml
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
index e01351940c60c6cd171df4cd38345b7154a2dbcd..5631f550d172cb99a9afd7e2d74af610fd98b35a 100644
--- a/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
+++ b/web/modules/webform/modules/webform_options_custom/js/webform_options_custom.element.js
@@ -92,7 +92,6 @@
 
         // Template event handling.
         $template
-          .on('click', setTemplateValue)
           .on('click', setTemplateValue)
           .on('keydown', function (event) {
             var $templateOption = $(event.target);
diff --git a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
index 4e6c11ad54aded9a1756654e927c74a44faa1282..3f9f425f956588393c19f711334a8430d9d23849 100644
--- a/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
+++ b/web/modules/webform/modules/webform_options_custom/src/Element/WebformOptionsCustom.php
@@ -292,7 +292,7 @@ public static function setTemplateOptions(array &$element) {
     ];
 
     // Get options.
-    $options =& $element['#options'];
+    $options = &$element['#options'];
 
     // Build options by text look up.
     $options_by_text = [];
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
index 4bdede7845f365cd42900ed5bcfb985f541f0317..3e3a5273390aa99c7219d9507994dbb29ef1e495 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_entity_test/config/install/webform.webform.test_element_options_custom_ent.yml
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 feb8d7e6f737a30b74c0288db173191778e80e77..6aea59bd57dc25d1016a2d1bdd1bce5a0c6f3dea 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
index 1b526a480482f6b0a4b79550d0ba7e6b2dd9bcdc..8bb609e45bfa1c3e934b05558b93e076ceee7670 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_html.yml
@@ -91,6 +91,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
index 2455dd9c391db9c5562662974e286542759319c0..a9edadeb744e8499e9e64bd1008d6949201ac282 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_imap.yml
@@ -61,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
index c41f155e072c79f97f544e7438b0ad2c2696b6ba..901683083155967b01a409f2da1b02a76b50d847 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_svg.yml
@@ -67,6 +67,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
index 81e179be4f3944cf90cd2a6882043f82763459d9..25e6f2fb11626f0fdbc79aa5cfd662bddbb5a8f8 100644
--- a/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
+++ b/web/modules/webform/modules/webform_options_custom/tests/modules/webform_options_custom_test/config/install/webform.webform.test_element_options_custom_twig.yml
@@ -65,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c94ff1eb4d8b4ac11f346f8b663776b36b4e9e59..d0cf34c89c5aaae2dd1a65dcfb3a5018c521feee 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 b8d230b560741d0cace6cd4ee3d782bfaa17d892..115ba322d32e160d979e85fe7f3d798da4630b96 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 f67f407a19e8d43a7e17b45406d0161b6cb6726c..a2e30ef236517db7ebc20873535a316f2c60541e 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
@@ -620,7 +620,7 @@ protected function setOptionsElementDefaultValue(array &$element, array $limits,
    */
   protected function alterOptionsElement(array &$element, array $limits, array $reached) {
     // Set options element's options labels.
-    $options =& $element['#options'];
+    $options = &$element['#options'];
     $this->alterOptionsElementLabels($options, $limits);
 
     // Disable or remove reached options.
@@ -660,7 +660,7 @@ protected function alterOptionsElementLabels(array &$options, array $limits) {
             $limits[$option_value]
           );
           $message_display = $this->configuration['option_message_display'];
-          $option =& $options[$option_value][0];
+          $option = &$options[$option_value][0];
           switch ($message_display) {
             case WebformOptionsLimitHandlerInterface::MESSAGE_DISPLAY_DESCRIPTION:
               list(
@@ -727,7 +727,7 @@ protected function disableOptionsElement(array &$element, array $reached) {
    *   An options element's reached options.
    */
   protected function removeOptionsElement(array &$element, array $reached) {
-    $options =& $element['#options'];
+    $options = &$element['#options'];
     $this->removeOptionsElementRecursive($options, $reached);
   }
 
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
index edc0bab3d35faad64af630a267ca905838f35632..cf77e5d76c7c714f73758e234413438859fcc814 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_boolean_limit.yml
@@ -72,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
index e3341e2c3272f4f1cdf7fbe4633e0e541dbe802c..189c14dc5bee27719a7c78aba884c8e7d4be6cbc 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit.yml
@@ -114,7 +114,7 @@ elements: |
       Y: Y
       Z: Z
     '#default_value': X
-
+  
 css: ''
 javascript: ''
 settings:
@@ -156,6 +156,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
index 14a49b920c2eeee671b696efbe0204c330eae184..658fd5fd2dc5cddb18fc6f11c937f8cd89f6f165 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_ent.yml
@@ -69,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
index fb265f5fba54d06e3a4c6f652043116f4b919913..18b8196341b76421c3577cca70e81fced3b05b7e 100644
--- a/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
+++ b/web/modules/webform/modules/webform_options_limit/tests/modules/webform_options_limit_test/config/install/webform.webform.test_handler_options_limit_user.yml
@@ -71,6 +71,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ee037c7f4bc83c20c740f50d0f3fb7d74c674508..5ee171408a86362defc2a9e2c7b3f8e328428002 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 43489d281c96fed67d5d8b75f91f528bf14a5a65..3311d5c6acb03af13e743415fc8945b56a5a68ef 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
index f13db000e6898da0721263c9e208c872e6f1388e..23068e4c0042810b32a16dcb3af752b3c1fb4285 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test/config/install/webform.webform.test_handler_scheduled_email.yml
@@ -82,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b2e917525b47573bf95f973da9213399a042c4f9..d6ed2feb04a9d528a98e324723e6b35b6e41427e 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
index cb93282765507f7087cf0b655dc5a0c275dca930..3399e5cabce0eafd1327961859e6b5f88511e1ef 100644
--- a/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
+++ b/web/modules/webform/modules/webform_scheduled_email/tests/modules/webform_scheduled_email_test_translation/config/install/webform.webform.test_handler_scheduled_translate.yml
@@ -63,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 72b68623c10a53c2ec32b8b45ad6e41936235b25..199d36217a4be99cd090f631d6bbee0f73c86606 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 d6e247f3d74bbc5cf9f5e617f0a8a2d1ffba4dd8..e0f2d56fa734d9dc34fa988faea693606f9a8902 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 bbce9eb673d0e4d5cb2471f06bb674f6238d2792..927eea6a06d441553ae1f318be5b6588f93fcc38 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_share/webform_share.module b/web/modules/webform/modules/webform_share/webform_share.module
index 8b1bddc71870aa2d9f81d9eafd05b0283d54103d..0be1ba401cf35d229c99ab5338ba75b85ffbe8da 100644
--- a/web/modules/webform/modules/webform_share/webform_share.module
+++ b/web/modules/webform/modules/webform_share/webform_share.module
@@ -85,7 +85,7 @@ function webform_share_menu_local_tasks_alter(&$data, $route_name, RefinableCach
     if ($query = \Drupal::request()->query->all()) {
       foreach ($route_names as $route_name) {
         if (isset($data['tabs'][1][$route_name])) {
-          $url =& $data['tabs'][1][$route_name]['#link']['url'];
+          $url = &$data['tabs'][1][$route_name]['#link']['url'];
           $url->setOption('query', $query);
         }
       }
diff --git a/web/modules/webform/modules/webform_shortcuts/tests/src/Functional/WebformShortcutsFunctionalTest.php b/web/modules/webform/modules/webform_shortcuts/tests/src/Functional/WebformShortcutsFunctionalTest.php
index f7d4b5e711e5ae5a4767fa94405b7d9cc37cf7eb..6527dc9b442a15c42b384316662392323a1f9e0f 100644
--- a/web/modules/webform/modules/webform_shortcuts/tests/src/Functional/WebformShortcutsFunctionalTest.php
+++ b/web/modules/webform/modules/webform_shortcuts/tests/src/Functional/WebformShortcutsFunctionalTest.php
@@ -37,7 +37,7 @@ public function testShortcuts() {
 
     // Check default shortcuts.
     $this->drupalGet('/admin/structure/webform/manage/contact');
-    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Keyboard shortcuts&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;&lt;hr /&gt;CTRL+E = Add element&lt;br /&gt;CTRL+P = Add page&lt;br /&gt;CTRL+L = Add layout&lt;br /&gt;&lt;hr /&gt;CTRL+S = Save element or elements&lt;br /&gt;CTRL+R = Reset elements&lt;br /&gt;&lt;hr /&gt;CTRL+W = Show/hide row weights&lt;br /&gt;&lt;hr /&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Keyboard shortcuts" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Keyboard shortcuts&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;&lt;hr /&gt;CTRL+E = Add element&lt;br /&gt;CTRL+P = Add page&lt;br /&gt;CTRL+L = Add layout&lt;br /&gt;&lt;hr /&gt;CTRL+S = Save element or elements&lt;br /&gt;CTRL+R = Reset elements&lt;br /&gt;&lt;hr /&gt;CTRL+W = Show/hide row weights&lt;br /&gt;&lt;hr /&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Customize the shortcuts.
     $edit = [
@@ -48,7 +48,7 @@ public function testShortcuts() {
 
     // Check customized shortcuts.
     $this->drupalGet('/admin/structure/webform/manage/contact');
-    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Keyboard shortcuts&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;&lt;hr /&gt;CRTL+Z = Add element&lt;br /&gt;CTRL+P = Add page&lt;br /&gt;CTRL+L = Add layout&lt;br /&gt;&lt;hr /&gt;CTRL+S = Save element or elements&lt;br /&gt;CTRL+R = Reset elements&lt;br /&gt;&lt;hr /&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Keyboard shortcuts" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Keyboard shortcuts&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;&lt;hr /&gt;CRTL+Z = Add element&lt;br /&gt;CTRL+P = Add page&lt;br /&gt;CTRL+L = Add layout&lt;br /&gt;&lt;hr /&gt;CTRL+S = Save element or elements&lt;br /&gt;CTRL+R = Reset elements&lt;br /&gt;&lt;hr /&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
   }
 
 }
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 d5fed9955f226d05adf4a316d53dd0695470c769..cde12e4958e5723ff800c6646ac6ac2d8b03b2a1 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 a3c677d665a2842582bfdf6129352e1ed84a8577..4d69cf3569a7fd83e8d428bc5f5091085361c9fb 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
@@ -284,14 +284,8 @@ public function submitUploadForm(array &$form, FormStateInterface $form_state) {
 
     // If a managed file has been create to the file's id and rebuild the form.
     if ($file) {
-      // Normalize carriage returns.
-      // This prevent issues with CSV files created in Excel.
-      $contents = file_get_contents($file->getFileUri());
-      $contents = preg_replace('~\R~u', "\r\n", $contents);
-      file_put_contents($file->getFileUri(), $contents);
-
       $this->importer->setImportUri($file->getFileUri());
-      if ($this->importer->getTotal()) {
+      if ($this->importer->getTotal() > 0) {
         $form_state->set('import_fid', $file->id());
         $form_state->setRebuild();
       }
@@ -578,7 +572,7 @@ public static function batchSet(WebformInterface $webform, EntityInterface $sour
    * @param mixed|array $context
    *   The batch current context.
    */
-  public static function batchProcess(WebformInterface $webform, EntityInterface $source_entity = NULL, $import_uri = '', array $import_options = [], &$context) {
+  public static function batchProcess(WebformInterface $webform, EntityInterface $source_entity = NULL, $import_uri = '', array $import_options = [], array &$context = []) {
     /** @var \Drupal\webform_submission_export_import\WebformSubmissionExportImportImporterInterface $importer */
     $importer = \Drupal::service('webform_submission_export_import.importer');
     $importer->setWebform($webform);
diff --git a/web/modules/webform/modules/webform_submission_export_import/src/WebformSubmissionExportImportImporter.php b/web/modules/webform/modules/webform_submission_export_import/src/WebformSubmissionExportImportImporter.php
index 32e9eaf5d03a4b73098a14198cf77f0920928a14..9833ca4921bd3577a1f86d06b1ac2bc4fc36201c 100644
--- a/web/modules/webform/modules/webform_submission_export_import/src/WebformSubmissionExportImportImporter.php
+++ b/web/modules/webform/modules/webform_submission_export_import/src/WebformSubmissionExportImportImporter.php
@@ -419,8 +419,8 @@ public function import($offset = 0, $limit = NULL) {
       // Track row specific warnings and errors.
       $stats['warnings'][$index] = [];
       $stats['errors'][$index] = [];
-      $row_warnings =& $stats['warnings'][$index];
-      $row_errors =& $stats['errors'][$index];
+      $row_warnings = &$stats['warnings'][$index];
+      $row_errors = &$stats['errors'][$index];
 
       // Make sure expected number of columns and values are equal.
       if (count($column_names) !== count($values)) {
@@ -572,7 +572,7 @@ protected function importPrepareRecord(array &$record, WebformSubmissionInterfac
 
     // Set source entity.
     // Load or convert the source entity id to an internal ID.
-    if ($source_entity) {
+    if ($source_entity && !isset($record['entity_type']) && !isset($record['entity_id'])) {
       $record['entity_type'] = $source_entity->getEntityTypeId();
       $record['entity_id'] = $source_entity->id();
     }
diff --git a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
index bc06bfafcb0e20bf573f1f66a61d573fb999eab4..4c5d00a338e7fbb5c9721480e5fc577dede3fb37 100644
--- a/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
+++ b/web/modules/webform/modules/webform_submission_export_import/tests/modules/webform_submission_export_import_test/config/install/webform.webform.test_submission_export_import.yml
@@ -118,6 +118,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 69e44d4fbe20de73b6164e87de0f5ea235be3bb3..4c5499e17a3bda4b92ef914e5e127503a11ed9f5 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 971fe0d7abbcf0d14bdb809710b33f725ef5600d..bd228b1f9ded8a365c46116d66caa0900966aa43 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 5a1ac323740d938f7a03e05c93351d24aeae79d6..1e9f0327e582ca55dae8abed440667f2a7e9a227 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
index c7375483431af9788b75b7b8d64f088c57a78e62..fa7865076405f4d65eb4b47f182f815661df62cd 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_contact.yml
@@ -78,6 +78,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
index 2fe81553d5b82fac5ea28c2759299a79f2faef4a..eb2781d4bfbfa4636f30feac067947c64ec85fde 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_employee_evaluation.yml
@@ -125,6 +125,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
index 80fb8434363c076f3652748cfb5c38c08a366219..fc8c51a62dddd883946ca2b70b91c739d51c5dbc 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_feedback.yml
@@ -83,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
index 75c02c120da9b495aeb927714b1364e568802fea..13018cd15e9c5146b8184e2dd5fd38f3b4ce7f95 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_issue.yml
@@ -166,6 +166,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
index a0017284e308a5910d228b042a2f43ebeb8a27fc..0af4df911b696fc795b29629196a3f9763705e6b 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_application.yml
@@ -126,6 +126,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
index 29819095134dab0d08e1bf8f11b24f5dc06a33a5..63bdc4e5dc15e7cdac042a35c8d85d91086ba279 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_job_seeker_profile.yml
@@ -24,7 +24,7 @@ elements: |
       <li>Providing more information gives a better picture to employers</li>
       <li>Salary requirements, location preferences and skill level are all important factors in the hiring decision</li>
       </ul>
-  
+      
   information:
     '#title': 'Job Seeker Information'
     '#type': webform_section
@@ -126,6 +126,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
index de5dee8b1f933a18293081def16469a0182b40ac..2b58ef54b1c545bc99f7de1ebdc45a5ef510fdb5 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_medical_appointment.yml
@@ -94,7 +94,8 @@ elements: |
       '#description': |
         Please select the best days and times for us to call you.<br/>
         <em>Leave blank if you have no preferences.</em>
-      '#description_display': 'before'
+        
+      '#description_display': before
       '#multiple__min_items': '3'
       '#multiple__sorting': false
       '#multiple__operations': false
@@ -156,7 +157,8 @@ elements: |
       '#description': |
         Please select the best days and times for us to call the patient.<br/>
         <em>Leave blank if the patient has no preferences.</em>'
-      '#description_display': 'before'
+        
+      '#description_display': before
       '#multiple__min_items': '3'
       '#multiple__sorting': false
       '#multiple__operations': false
@@ -248,6 +250,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
index 216acf09523f6e4dd56e3a3bc31b3cad7ade7748..a7a0d19bda21b9e13f1d7f3cbc673f4f2f40f5a2 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_registration.yml
@@ -95,6 +95,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
index 8031aa6a36f4b595d261ece9426e45c1f71fcf2b..777f52b3dda77cad556d4257bafa808cb809d14f 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_session_evaluation.yml
@@ -87,6 +87,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
index 0e0c9ef96c67569e8503ac6206a21b927b1bcd58..731b1ee950b7bf46d2c8f5f8351f30713d835a34 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_subscribe.yml
@@ -74,6 +74,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
index 5273bc7b8aa61d13afaa11fdb3226ca3c40f3d13..9259f7ad7bed5e6bbb5491003720f44c7ce45b1c 100644
--- a/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
+++ b/web/modules/webform/modules/webform_templates/config/install/webform.webform.template_user_profile.yml
@@ -168,6 +168,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 671f51461159aeac46c41a701e4fc3f3716e2f31..bef93c36c97a5a257765d03ff7db0834285dde0f 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
index 093e6f86240633739589d59e14f4c85abe4724fe..dd01308b75e93192e41e20e5216eb58c3a3dba0d 100644
--- a/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
+++ b/web/modules/webform/modules/webform_toggles/tests/modules/webform_toggles_test/config/install/webform.webform.test_element_toggles.yml
@@ -92,6 +92,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 90bf2f439513e8bf3fd1c49c2e1df2680ddd5afe..5ef48395d5ba9eaccd8fa54d2566844964c8bf4b 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 29b53cf933da8d4bbe5e5f3da30c777fcc426b62..25000b2cbd7500dea4b1cb4e0e78213d8f6a6141 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/modules/webform_ui/src/PathProcessor/WebformUiPathProcessor.php b/web/modules/webform/modules/webform_ui/src/PathProcessor/WebformUiPathProcessor.php
index 51e1254bc59869e9ef21825d0fd127f9bfc55951..0cebe24e23b6f3940877b7b3521e53910e90864b 100644
--- a/web/modules/webform/modules/webform_ui/src/PathProcessor/WebformUiPathProcessor.php
+++ b/web/modules/webform/modules/webform_ui/src/PathProcessor/WebformUiPathProcessor.php
@@ -15,7 +15,7 @@ class WebformUiPathProcessor implements OutboundPathProcessorInterface {
    * {@inheritdoc}
    */
   public function processOutbound($path, &$options = [], Request $request = NULL, BubbleableMetadata $bubbleable_metadata = NULL) {
-    if (strpos($path, '/webform/') === FALSE || !method_exists($request, 'getQueryString')) {
+    if (is_null($request) || (strpos($path, '/webform/') === FALSE)) {
       return $path;
     }
 
diff --git a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementPropertiesTest.php b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementPropertiesTest.php
index 8016d712c0de5383a9582d859b8f516bb21ca3a0..a57d55aeff8bf603c4ead855e307795142aca3a9 100644
--- a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementPropertiesTest.php
+++ b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementPropertiesTest.php
@@ -59,16 +59,11 @@ public function testElementProperties() {
       $webform_elements = Webform::load($webform_id);
       $original_elements = $webform_elements->getElementsDecodedAndFlattened();
       foreach ($original_elements as $key => $original_element) {
+        // Update the element via element edit form.
         $this->drupalPostForm('/admin/structure/webform/manage/' . $webform_elements->id() . '/element/' . $key . '/edit', [], 'Save');
 
-        // Must reset the webform entity cache so that the update elements can
-        // be loaded.
-        \Drupal::entityTypeManager()->getStorage('webform_submission')->resetCache();
-
-        /** @var \Drupal\webform\WebformInterface $webform_elements */
-        $webform_elements = Webform::load($webform_id);
-        $updated_element = $webform_elements->getElementsDecodedAndFlattened()[$key];
-
+        // Check that the original and updated element are equal.
+        $updated_element = $this->reloadWebform($webform_id)->getElementDecoded($key);
         $this->assertEqual($original_element, $updated_element, "'$key'' properties is equal.");
       }
     }
diff --git a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
index 7933d3905f7391741df5f3717d62e0fb295cefe9..13f0c3dbc38ed0d2a0ae55c761cfdbd7c6c710e8 100644
--- a/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
+++ b/web/modules/webform/modules/webform_ui/tests/src/Functional/WebformUiElementTest.php
@@ -150,7 +150,7 @@ public function testElements() {
       'properties[admin_notes][value]' => 'This is an admin note.',
     ];
     $this->drupalPostForm('/admin/structure/webform/manage/contact/element/name/edit', $edit, 'Save');
-    $this->assertRaw('<span data-drupal-selector="edit-webform-ui-elements-name-title-notes" class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Your Name&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is an admin note.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span data-drupal-selector="edit-webform-ui-elements-name-title-notes" class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Your Name" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Your Name&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is an admin note.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     /**************************************************************************/
     // CRUD
diff --git a/web/modules/webform/modules/webform_ui/tests/src/Unit/WebformUiPathProcessorTest.php b/web/modules/webform/modules/webform_ui/tests/src/Unit/WebformUiPathProcessorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d18e309ddd953c68db6785af8d96f8417d2724b4
--- /dev/null
+++ b/web/modules/webform/modules/webform_ui/tests/src/Unit/WebformUiPathProcessorTest.php
@@ -0,0 +1,76 @@
+<?php
+
+namespace Drupal\Tests\webform_ui\Unit;
+
+use Drupal\Tests\UnitTestCase;
+use Drupal\webform_ui\PathProcessor\WebformUiPathProcessor;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * @coversDefaultClass \Drupal\webform_ui\PathProcessor\WebformUiPathProcessor
+ * @group webform_ui
+ */
+class WebformUiPathProcessorTest extends UnitTestCase {
+
+  /**
+   * The path process.
+   *
+   * @var \Drupal\webform_ui\PathProcessor\WebformUiPathProcessor
+   */
+  protected $pathProcessor;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+
+    $this->pathProcessor = new WebformUiPathProcessor();
+  }
+
+  /**
+   * @covers ::processOutbound
+   */
+  public function testBasicPathsOnly() {
+    $path = $this->pathProcessor->processOutbound('/node');
+    $this->assertEquals('/node', $path);
+
+    $path = $this->pathProcessor->processOutbound('/admin/structure/webform/manage/contact');
+    $this->assertEquals('/admin/structure/webform/manage/contact', $path);
+  }
+
+  /**
+   * @covers ::processOutbound
+   */
+  public function testUnmatchedQueryString() {
+    $options = [];
+    $request = $this->getMockBuilder(Request::class)
+      ->disableOriginalConstructor()
+      ->getMock();
+    $request->method('getQueryString')
+      ->willReturn('foo');
+
+    $path = $this->pathProcessor->processOutbound('/admin/structure/webform/manage/contact', $options, $request);
+    $this->assertEquals('/admin/structure/webform/manage/contact', $path);
+    $this->assertArrayNotHasKey('query', $options);
+  }
+
+  /**
+   * @covers ::processOutbound
+   */
+  public function testMatchedQueryString() {
+    $options = [];
+    $request = $this->getMockBuilder(Request::class)
+      ->disableOriginalConstructor()
+      ->getMock();
+    $request->method('getQueryString')
+      ->willReturn('_wrapper_format=drupal_dialog&destination=/admin/structure/webform');
+
+    $path = $this->pathProcessor->processOutbound('/admin/structure/webform/manage/contact', $options, $request);
+    $this->assertEquals('/admin/structure/webform/manage/contact', $path);
+    $this->assertArrayHasKey('query', $options);
+    $this->assertArrayHasKey('destination', $options['query']);
+    $this->assertEquals('/admin/structure/webform', $options['query']['destination']);
+  }
+
+}
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 c8e2f17f8ace6f19cae26b04e2d02e27e2700bfd..7e6ae4e97c05ef9ab718e0958735d3f3e0460bad 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/src/Commands/WebformCliService.php b/web/modules/webform/src/Commands/WebformCliService.php
index 842543448ae34ae9551de2126d127e5701432ee8..393e4fdf5a446933390e46ab49c27178b5776620 100644
--- a/web/modules/webform/src/Commands/WebformCliService.php
+++ b/web/modules/webform/src/Commands/WebformCliService.php
@@ -119,6 +119,7 @@ public function webform_drush_command() {
         'range-latest' => 'Integer specifying the latest X submissions will be downloaded. Used if "range-type" is "latest" or no other range options are provided.',
         'range-start' => 'The submission ID or start date at which to start exporting.',
         'range-end' => 'The submission ID or end date at which to end exporting.',
+        'uid' => 'The ID of the user who submitted the form.',
         'order' => 'The submission order "asc" (default) or "desc".',
         'state' => 'Submission state to be included: "completed", "draft" or "all" (default).',
         'sticky' => 'Flagged/starred submission status.',
@@ -1237,9 +1238,6 @@ protected function drush_webform_composer_set_libraries(&$repositories, &$requir
             'url' => $dist_url,
             'type' => $dist_type,
           ],
-          'require' => [
-            'composer/installers' => '~1.0',
-          ],
         ],
       ];
 
diff --git a/web/modules/webform/src/Commands/WebformCommands.php b/web/modules/webform/src/Commands/WebformCommands.php
index 32bbb1d957835af3791bb852d96e1a3d3c5fc901..01dbaacf39f99aedcac0cb11e5ab51bcbf83c792 100644
--- a/web/modules/webform/src/Commands/WebformCommands.php
+++ b/web/modules/webform/src/Commands/WebformCommands.php
@@ -52,6 +52,7 @@ public function drush_webform_export_validate(CommandData $commandData) {
    * @option range-latest Integer specifying the latest X submissions will be downloaded. Used if "range-type" is "latest" or no other range options are provided.
    * @option range-start The submission ID or start date at which to start exporting.
    * @option range-end The submission ID or end date at which to end exporting.
+   * @option uid The ID of the user who submitted the form.
    * @option order The submission order "asc" (default) or "desc".
    * @option state Submission state to be included: "completed", "draft" or "all" (default).
    * @option sticky Flagged/starred submission status.
@@ -59,7 +60,7 @@ public function drush_webform_export_validate(CommandData $commandData) {
    * @option destination The full path and filename in which the CSV or archive should be stored. If omitted the CSV file or archive will be outputted to the command line.
    * @aliases wfx,webform-export
    */
-  public function drush_webform_export($webform = NULL, array $options = ['exporter' => NULL, 'delimiter' => NULL, 'multiple-delimiter' => NULL, 'file-name' => NULL, 'archive-type' => NULL, 'header-format' => NULL, 'options-item-format' => NULL, 'options-single-format' => NULL, 'options-multiple-format' => NULL, 'entity-reference-items' => NULL, 'excluded-columns' => NULL, 'uuid' => NULL, 'entity-type' => NULL, 'entity-id' => NULL, 'range-type' => NULL, 'range-latest' => NULL, 'range-start' => NULL, 'range-end' => NULL, 'order' => NULL, 'state' => NULL, 'sticky' => NULL, 'files' => NULL, 'destination' => NULL]) {
+  public function drush_webform_export($webform = NULL, array $options = ['exporter' => NULL, 'delimiter' => NULL, 'multiple-delimiter' => NULL, 'file-name' => NULL, 'archive-type' => NULL, 'header-format' => NULL, 'options-item-format' => NULL, 'options-single-format' => NULL, 'options-multiple-format' => NULL, 'entity-reference-items' => NULL, 'excluded-columns' => NULL, 'uuid' => NULL, 'entity-type' => NULL, 'entity-id' => NULL, 'range-type' => NULL, 'range-latest' => NULL, 'range-start' => NULL, 'range-end' => NULL, 'uid' => NULL, 'order' => NULL, 'state' => NULL, 'sticky' => NULL, 'files' => NULL, 'destination' => NULL]) {
     $this->cliService->drush_webform_export($webform);
   }
 
diff --git a/web/modules/webform/src/Controller/WebformEntityController.php b/web/modules/webform/src/Controller/WebformEntityController.php
index f0539b360d05f177922576bec1b9276be9892f56..300a3899ae684221d9825e7529346ffda9bd4a05 100644
--- a/web/modules/webform/src/Controller/WebformEntityController.php
+++ b/web/modules/webform/src/Controller/WebformEntityController.php
@@ -90,11 +90,14 @@ public function addForm(Request $request, WebformInterface $webform) {
   public function css(Request $request, WebformInterface $webform) {
     $assets = $webform->getAssets();
     if ($webform->access('update')) {
-      return new WebformUncacheableResponse($assets['css'], 200, ['Content-Type' => 'text/css']);
+      $response = new WebformUncacheableResponse($assets['css'], 200, ['Content-Type' => 'text/css']);
     }
     else {
-      return new CacheableResponse($assets['css'], 200, ['Content-Type' => 'text/css']);
+      $response = new CacheableResponse($assets['css'], 200, ['Content-Type' => 'text/css']);
     }
+    return $response
+      ->addCacheableDependency($webform)
+      ->addCacheableDependency($this->config('webform.settings'));
   }
 
   /**
@@ -111,11 +114,14 @@ public function css(Request $request, WebformInterface $webform) {
   public function javascript(Request $request, WebformInterface $webform) {
     $assets = $webform->getAssets();
     if ($webform->access('update')) {
-      return new WebformUncacheableResponse($assets['javascript'], 200, ['Content-Type' => 'text/javascript']);
+      $response = new WebformUncacheableResponse($assets['javascript'], 200, ['Content-Type' => 'text/javascript']);
     }
     else {
-      return new CacheableResponse($assets['javascript'], 200, ['Content-Type' => 'text/javascript']);
+      $response = new CacheableResponse($assets['javascript'], 200, ['Content-Type' => 'text/javascript']);
     }
+    return $response
+      ->addCacheableDependency($webform)
+      ->addCacheableDependency($this->config('webform.settings'));
   }
 
   /**
diff --git a/web/modules/webform/src/Controller/WebformResultsExportController.php b/web/modules/webform/src/Controller/WebformResultsExportController.php
index e422c24694551396eed5b814aa0ebf3a42c10b53..4573799821adad6a36ce76b812749a28ab407622 100644
--- a/web/modules/webform/src/Controller/WebformResultsExportController.php
+++ b/web/modules/webform/src/Controller/WebformResultsExportController.php
@@ -240,7 +240,7 @@ public static function batchSet(WebformInterface $webform, EntityInterface $sour
    * @param mixed|array $context
    *   The batch current context.
    */
-  public static function batchProcess(WebformInterface $webform, EntityInterface $source_entity = NULL, array $export_options, &$context) {
+  public static function batchProcess(WebformInterface $webform, EntityInterface $source_entity = NULL, array $export_options = [], array &$context = []) {
     /** @var \Drupal\webform\WebformSubmissionExporterInterface $submission_exporter */
     $submission_exporter = \Drupal::service('webform_submission.exporter');
     $submission_exporter->setWebform($webform);
diff --git a/web/modules/webform/src/Element/WebformCodeMirror.php b/web/modules/webform/src/Element/WebformCodeMirror.php
index 072c081a9e48227488d69e008e1de81cadc1b211..18958251ab125d6ba4cb39e87f967fc725038018 100644
--- a/web/modules/webform/src/Element/WebformCodeMirror.php
+++ b/web/modules/webform/src/Element/WebformCodeMirror.php
@@ -162,13 +162,7 @@ public static function validateWebformCodeMirror(&$element, FormStateInterface $
       if ($element['#mode'] === 'yaml'
         && (isset($element['#default_value']) && is_array($element['#default_value']) || $element['#decode_value'])
       ) {
-        // Handle rare case where single array value is not parsed correctly.
-        if (preg_match('/^- (.*?)\s*$/', $element['#value'], $match)) {
-          $value = [$match[1]];
-        }
-        else {
-          $value = $element['#value'] ? Yaml::decode($element['#value']) : [];
-        }
+        $value = $element['#value'] ? Yaml::decode($element['#value']) : [];
         $form_state->setValueForElement($element, $value);
       }
     }
diff --git a/web/modules/webform/src/Element/WebformElementAttributes.php b/web/modules/webform/src/Element/WebformElementAttributes.php
index 7e982316426129fd347c1b099afc639352cf0012..d8bdea43f6a9546bad1a0b74078d51d71a435a98 100644
--- a/web/modules/webform/src/Element/WebformElementAttributes.php
+++ b/web/modules/webform/src/Element/WebformElementAttributes.php
@@ -156,14 +156,17 @@ public static function validateWebformElementAttributes(&$element, FormStateInte
         $class_other = $element['class']['other']['#value'];
         if (isset($class[WebformSelectOther::OTHER_OPTION])) {
           unset($class[WebformSelectOther::OTHER_OPTION]);
-          $class[$class_other] = $class_other;
+          if ($class_other) {
+            $class_other = preg_split('/[ ]+/', $class_other);
+            $class += array_combine($class_other, $class_other);
+          }
         }
         if ($class) {
           $attributes['class'] = array_values($class);
         }
       }
       else {
-        $attributes['class'] = [$values['class']];
+        $attributes['class'] = preg_split('/[ ]+/', $values['class']);
       }
     }
 
diff --git a/web/modules/webform/src/Element/WebformEmailConfirm.php b/web/modules/webform/src/Element/WebformEmailConfirm.php
index 96f667697c7a27444e0c9a5de8245e1149ed1b47..65fc760fc7ef7fd43cdba2c10c50c31e9710beb8 100644
--- a/web/modules/webform/src/Element/WebformEmailConfirm.php
+++ b/web/modules/webform/src/Element/WebformEmailConfirm.php
@@ -167,10 +167,10 @@ public static function processWebformEmailConfirm(&$element, FormStateInterface
    */
   public static function validateWebformEmailConfirm(&$element, FormStateInterface $form_state, &$complete_form) {
     if (isset($element['flexbox'])) {
-      $mail_element =& $element['flexbox'];
+      $mail_element = &$element['flexbox'];
     }
     else {
-      $mail_element =& $element;
+      $mail_element = &$element;
     }
 
     $mail_1 = trim($mail_element['mail_1']['#value']);
diff --git a/web/modules/webform/src/Element/WebformEntityTrait.php b/web/modules/webform/src/Element/WebformEntityTrait.php
index 4decb37d202d5f1f0602275469b2b19a1c96111a..090e511396cdb2c7a0ca3d9c44918805f83a5c40 100644
--- a/web/modules/webform/src/Element/WebformEntityTrait.php
+++ b/web/modules/webform/src/Element/WebformEntityTrait.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\webform\Element;
 
+use Drupal\Core\Cache\Cache;
 use Drupal\Core\Form\OptGroup;
 use Drupal\webform\Utility\WebformOptionsHelper;
 
@@ -90,6 +91,30 @@ public static function setOptions(array &$element, array $settings = []) {
     $options = WebformOptionsHelper::decodeOptions($options);
 
     $element['#options'] = $options;
+
+    static::setCacheTags($element, $element['#target_type'], $selection_settings['target_bundles'] ?? []);
+  }
+
+  /**
+   * Set the corresponding entity cache tags on the element
+   *
+   * @param array $element
+   *   An element
+   * @param string $target_type
+   *   The target type id
+   * @param array $target_bundles
+   *   The target bundle ids
+   */
+  protected static function setCacheTags(array &$element, $target_type, array $target_bundles = []) {
+    $list_cache_tag = sprintf('%s_list', $target_type);
+
+    if (empty($target_bundles)) {
+      $element['#cache']['tags'] = Cache::mergeTags($element['#cache']['tags'] ?? [], [$list_cache_tag]);
+      return;
+    }
+
+    $tags = Cache::buildTags($list_cache_tag, $target_bundles);
+    $element['#cache']['tags'] = Cache::mergeTags($element['#cache']['tags'] ?? [], $tags);
   }
 
   /**
diff --git a/web/modules/webform/src/Element/WebformHeight.php b/web/modules/webform/src/Element/WebformHeight.php
index 9811fe2550ce24242f13c66b7af4fe7bc903a671..e41ff0086c60999b30bee871e93d9690d8f1aee9 100644
--- a/web/modules/webform/src/Element/WebformHeight.php
+++ b/web/modules/webform/src/Element/WebformHeight.php
@@ -231,7 +231,7 @@ public static function processWebformHeight(&$element, FormStateInterface $form_
    * Validates an height element.
    */
   public static function validateWebformHeight(&$element, FormStateInterface $form_state, &$complete_form) {
-    $height_element =& $element['container'];
+    $height_element = &$element['container'];
 
     if ($height_element['feet']['#value'] === '' && $height_element['inches']['#value'] === '') {
       $value = '';
diff --git a/web/modules/webform/src/Element/WebformLikert.php b/web/modules/webform/src/Element/WebformLikert.php
index 4970c1ad0b0d302e919de8c71f05adf4de67b4b1..cbfcaa911611175652ed561ddc2cdf1c59e87c66 100644
--- a/web/modules/webform/src/Element/WebformLikert.php
+++ b/web/modules/webform/src/Element/WebformLikert.php
@@ -328,7 +328,7 @@ public static function setRequiredError(array &$element, FormStateInterface $for
     $value = $element['#value'];
     foreach ($element['#questions'] as $question_key => $question_title) {
       if (is_null($value[$question_key])) {
-        $question_element =& $element['table'][$question_key]['likert_question'];
+        $question_element = &$element['table'][$question_key]['likert_question'];
         $t_args = ['@name' => $question_title];
         if (!empty($element['#required_error'])) {
           $form_state->setError($question_element, new FormattableMarkup($element['#required_error'], $t_args));
diff --git a/web/modules/webform/src/Element/WebformMessage.php b/web/modules/webform/src/Element/WebformMessage.php
index e0b574d8ded3f2d9975ce37b58ae5334dadd1d69..826af585e466c8990cb8d6608fa1f5fab0a63438 100644
--- a/web/modules/webform/src/Element/WebformMessage.php
+++ b/web/modules/webform/src/Element/WebformMessage.php
@@ -150,7 +150,18 @@ public static function preRenderWebformMessage(array $element) {
       ],
     ];
 
+    // Attach message styles and JavaScript.
     $element['#attached']['library'][] = 'webform/webform.element.message';
+
+    // Attach info message styles.
+    // Gin theme declares the message info style, which is not included in core.
+    /** @var \Drupal\webform\WebformThemeManagerInterface $theme_manager */
+    $theme_manager = \Drupal::service('webform.theme_manager');
+    $is_gin_theme = $theme_manager->isActiveTheme('gin');
+    if ($message_type === 'info' && !$is_gin_theme) {
+      $element['#attached']['library'][] = 'webform/webform.element.message.info';
+    }
+
     return $element;
   }
 
diff --git a/web/modules/webform/src/Element/WebformMultiple.php b/web/modules/webform/src/Element/WebformMultiple.php
index a6f22a358e18fa6ec6decbc197b1906564a69789..d4d61c3ea547cd074d55154ef28650c76ef3dd51 100644
--- a/web/modules/webform/src/Element/WebformMultiple.php
+++ b/web/modules/webform/src/Element/WebformMultiple.php
@@ -35,9 +35,9 @@ public function getInfo() {
       '#header_label' => '',
       '#element' => [
         '#type' => 'textfield',
-        '#title' => t('Item value'),
+        '#title' => $this->t('Item value'),
         '#title_display' => 'invisible',
-        '#placeholder' => t('Enter value…'),
+        '#placeholder' => $this->t('Enter value…'),
       ],
       '#cardinality' => FALSE,
       '#min_items' => NULL,
@@ -362,7 +362,7 @@ protected static function initializeElementRecursive(array $element, FormStateIn
     /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
     $element_manager = \Drupal::service('plugin.manager.webform.element');
     foreach ($child_keys as $child_key) {
-      $sub_element =& $sub_elements[$child_key];
+      $sub_element = &$sub_elements[$child_key];
 
       $element_plugin = $element_manager->getElementInstance($sub_element);
 
diff --git a/web/modules/webform/src/Entity/Webform.php b/web/modules/webform/src/Entity/Webform.php
index 0197e749e081595a324f6e5771a9ac490c1b0e3f..eeb23dc50c5dd3c24487317253423091613b8b20 100644
--- a/web/modules/webform/src/Entity/Webform.php
+++ b/web/modules/webform/src/Entity/Webform.php
@@ -56,6 +56,7 @@
  *       "add" = "Drupal\webform\WebformEntityAddForm",
  *       "duplicate" = "Drupal\webform\WebformEntityAddForm",
  *       "delete" = "Drupal\webform\WebformEntityDeleteForm",
+ *       "delete-multiple-confirm" = "Drupal\webform\Form\WebformEntityDeleteMultipleForm",
  *       "edit" = "Drupal\webform\WebformEntityElementsForm",
  *       "export" = "Drupal\webform\WebformEntityExportForm",
  *       "settings" = "Drupal\webform\EntitySettings\WebformEntitySettingsGeneralForm",
@@ -84,6 +85,7 @@
  *     "test-form" = "/webform/{webform}/test",
  *     "duplicate-form" = "/admin/structure/webform/manage/{webform}/duplicate",
  *     "delete-form" = "/admin/structure/webform/manage/{webform}/delete",
+ *     "delete-multiple-form" = "/admin/structure/webform/delete",
  *     "export-form" = "/admin/structure/webform/manage/{webform}/export",
  *     "settings" = "/admin/structure/webform/manage/{webform}/settings",
  *     "settings-form" = "/admin/structure/webform/manage/{webform}/settings/form",
@@ -716,9 +718,7 @@ public function hasRemoteAddr() {
    * {@inheritdoc}
    */
   public function isResultsDisabled() {
-    $elements = $this->getElementsDecoded();
-    $settings = $this->getSettings();
-    return (!empty($settings['results_disabled']) || !empty($elements['#method'])) ? TRUE : FALSE;
+    return ($this->getSetting('results_disabled') || $this->getSetting('form_method')) ? TRUE : FALSE;
   }
 
   /**
@@ -1099,6 +1099,9 @@ public static function getDefaultSettings() {
       'form_access_denied_message' => '',
       'form_access_denied_attributes' => [],
       'form_file_limit' => '',
+      'form_method' => '',
+      'form_action' => '',
+      'form_attributes' => [],
       'share' => FALSE,
       'share_node' => FALSE,
       'share_theme_name' => '',
@@ -1677,7 +1680,7 @@ protected function initElementsRecursive(array &$elements, $parent = '', $depth
       $element['#webform_composite'] = FALSE;
 
       if (!empty($parent)) {
-        $parent_element =& $this->elementsInitializedAndFlattened[$parent];
+        $parent_element = &$this->elementsInitializedAndFlattened[$parent];
         // Add element to the parent element's children.
         $parent_element['#webform_children'][$key] = $key;
         // Set #parent_flexbox to TRUE is the parent element is a
diff --git a/web/modules/webform/src/Entity/WebformOptions.php b/web/modules/webform/src/Entity/WebformOptions.php
index 17717b0a64a2d030ccd33413b3bc721f80753675..286782234ed3574c14cfbd7e48a2dfa4cd5c1015 100644
--- a/web/modules/webform/src/Entity/WebformOptions.php
+++ b/web/modules/webform/src/Entity/WebformOptions.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\Utility\WebformOptionsHelper;
 use Drupal\webform\Utility\WebformYaml;
 use Drupal\webform\WebformOptionsInterface;
@@ -201,6 +202,20 @@ public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b)
     return strnatcasecmp($a_label, $b_label);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function createDuplicate() {
+    $duplicate = parent::createDuplicate();
+    if (!$this->options) {
+      $element = ['#options' => $this->id()];
+      $options = static::getElementOptions($element);
+      WebformElementHelper::convertRenderMarkupToStrings($options);
+      $duplicate->setOptions($options);
+    }
+    return $duplicate;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsBaseForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsBaseForm.php
index 677e62e8f3340d1b31bd62c74308903a22186560..70d43b14cf1d4f2ae8452042566972da20a94044 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsBaseForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsBaseForm.php
@@ -135,9 +135,10 @@ protected function appendBehaviors(array &$element, array $behavior_elements, ar
         $group = (string) $behavior_element['group'];
         if (!isset($element[$group])) {
           $element[$group] = [
+            '#type' => 'container',
+            '#prefix' => '<strong>',
+            '#suffix' => '</strong>',
             '#markup' => $group,
-            '#prefix' => '<div><strong>',
-            '#suffix' => '</strong></div>',
             '#weight' => $weight,
           ];
           $weight += 10;
diff --git a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
index 4e06b3d73fff8f50458e788fc1995dbf67249708..0e301f1c267d30236ad8c8b6fd4ccaa112b963ce 100644
--- a/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
+++ b/web/modules/webform/src/EntitySettings/WebformEntitySettingsFormForm.php
@@ -151,17 +151,16 @@ public function form(array $form, FormStateInterface $form_state) {
       '#default_value' => $settings['form_exception_message'],
     ];
     $form['form_settings']['token_tree_link'] = $this->tokenManager->buildTreeElement();
-    $form['form_settings']['form_attributes'] = [
+    $form['form_settings']['form_attributes_container'] = [
       '#type' => 'details',
       '#title' => $this->t('Form attributes'),
       '#open' => TRUE,
     ];
-    $elements = $webform->getElementsDecoded();
-    $form['form_settings']['form_attributes']['attributes'] = [
+    $form['form_settings']['form_attributes_container']['form_attributes'] = [
       '#type' => 'webform_element_attributes',
       '#title' => $this->t('Form'),
       '#classes' => $this->config('webform.settings')->get('settings.form_classes'),
-      '#default_value' => (isset($elements['#attributes'])) ? $elements['#attributes'] : [],
+      '#default_value' => $settings['form_attributes'] ?: [],
     ];
 
     // Form behaviors.
@@ -282,6 +281,15 @@ public function form(array $form, FormStateInterface $form_state) {
     ];
 
     // Wizard settings.
+    $wizards_progress_checked_states = [
+      'visible' => [
+        [':input[name="wizard_progress_bar"]' => ['checked' => TRUE]],
+        'or',
+        [':input[name="wizard_progress_pages"]' => ['checked' => TRUE]],
+        'or',
+        [':input[name="wizard_progress_percentage"]' => ['checked' => TRUE]],
+      ],
+    ];
     $form['wizard_settings'] = [
       '#type' => 'details',
       '#title' => $this->t('Form wizard settings'),
@@ -292,6 +300,13 @@ public function form(array $form, FormStateInterface $form_state) {
         ],
       ],
     ];
+    // Wizard settings: Progress.
+    $form['wizard_settings']['wizard_progress_title'] = [
+      '#type' => 'container',
+      '#prefix' => '<strong>',
+      '#suffix' => '</strong>',
+      '#markup' => $this->t('Progress'),
+    ];
     $form['wizard_settings']['wizard_progress_bar'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Show wizard progress bar'),
@@ -344,6 +359,15 @@ public function form(array $form, FormStateInterface $form_state) {
       '#description' => $this->t("If checked, the wizard's progress bar's pages will be hidden or shown based on each pages conditional logic."),
       '#return_value' => TRUE,
       '#default_value' => $settings['wizard_progress_states'],
+      '#states' => $wizards_progress_checked_states,
+    ];
+    // Wizard settings: Navigation.
+    $form['wizard_settings']['wizard_navigation_title'] = [
+      '#type' => 'container',
+      '#prefix' => '<strong>',
+      '#suffix' => '</strong>',
+      '#markup' => $this->t('Navigation'),
+      '#access' => FALSE,
     ];
     $form['wizard_settings']['wizard_auto_forward'] = [
       '#type' => 'checkbox',
@@ -374,22 +398,21 @@ public function form(array $form, FormStateInterface $form_state) {
       '#default_value' => $settings['wizard_keyboard'],
       '#access' => FALSE,
     ];
-
+    // Wizard settings: Pages.
+    $form['wizard_settings']['wizard_pages_title'] = [
+      '#type' => 'container',
+      '#prefix' => '<strong>',
+      '#suffix' => '</strong>',
+      '#markup' => $this->t('Pages'),
+      '#states' => $wizards_progress_checked_states,
+    ];
     $form['wizard_settings']['wizard_confirmation'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Include confirmation page in progress'),
       '#description' => $this->t("If checked, the confirmation page will be included in the progress bar."),
       '#return_value' => TRUE,
       '#default_value' => $settings['wizard_confirmation'],
-      '#states' => [
-        'visible' => [
-          [':input[name="wizard_progress_bar"]' => ['checked' => TRUE]],
-          'or',
-          [':input[name="wizard_progress_pages"]' => ['checked' => TRUE]],
-          'or',
-          [':input[name="wizard_progress_percentage"]' => ['checked' => TRUE]],
-        ],
-      ],
+      '#states' => $wizards_progress_checked_states,
     ];
     $form['wizard_settings']['wizard_toggle'] = [
       '#type' => 'checkbox',
@@ -399,6 +422,13 @@ public function form(array $form, FormStateInterface $form_state) {
       '#default_value' => $settings['wizard_auto_forward'],
       '#access' => FALSE,
     ];
+    // Wizard settings: Labels.
+    $form['wizard_settings']['wizard_labels_title'] = [
+      '#type' => 'container',
+      '#prefix' => '<strong>',
+      '#suffix' => '</strong>',
+      '#markup' => $this->t('Labels'),
+    ];
     $form['wizard_settings']['wizard_toggle_show_label'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Wizard show all elements label'),
@@ -442,17 +472,6 @@ public function form(array $form, FormStateInterface $form_state) {
         ],
       ],
     ];
-    $form['wizard_settings']['wizard_track'] = [
-      '#type' => 'select',
-      '#title' => $this->t('Track wizard progress in the URL by'),
-      '#description' => $this->t("Progress tracking allows analytic software to capture a multi-step form's progress."),
-      '#options' => [
-        'name' => $this->t("Page name (?page=contact)"),
-        'index' => $this->t("Page index (?page=2)"),
-      ],
-      '#empty_option' => $this->t('- None -'),
-      '#default_value' => $settings['wizard_track'],
-    ];
     $form['wizard_settings']['wizard_prev_button_label'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Wizard previous page button label'),
@@ -467,7 +486,24 @@ public function form(array $form, FormStateInterface $form_state) {
       '#size' => 20,
       '#default_value' => $settings['wizard_next_button_label'],
     ];
-
+    // Wizard settings: Track.
+    $form['wizard_settings']['wizard_track_title'] = [
+      '#type' => 'container',
+      '#prefix' => '<strong>',
+      '#suffix' => '</strong>',
+      '#markup' => $this->t('Tracking'),
+    ];
+    $form['wizard_settings']['wizard_track'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Track wizard progress in the URL by'),
+      '#description' => $this->t("Progress tracking allows analytic software to capture a multi-step form's progress."),
+      '#options' => [
+        'name' => $this->t("Page name (?page=contact)"),
+        'index' => $this->t("Page index (?page=2)"),
+      ],
+      '#empty_option' => $this->t('- None -'),
+      '#default_value' => $settings['wizard_track'],
+    ];
     // Preview settings.
     $form['preview_settings'] = [
       '#type' => 'details',
@@ -573,28 +609,24 @@ public function form(array $form, FormStateInterface $form_state) {
 
     // Custom settings.
     $properties = WebformElementHelper::getProperties($webform->getElementsDecoded());
-    // Set default properties.
-    $properties += [
-      '#method' => '',
-      '#action' => '',
-    ];
     $form['custom_settings'] = [
       '#type' => 'details',
       '#title' => $this->t('Form custom settings'),
-      '#open' => array_filter($properties) ? TRUE : FALSE,
+      '#open' => (array_filter($properties) || $settings['form_method']) ? TRUE : FALSE,
       '#access' => !$this->moduleHandler->moduleExists('webform_ui') || $this->currentUser()->hasPermission('edit webform source'),
     ];
-    $form['custom_settings']['method'] = [
+    $form['custom_settings']['form_method'] = [
       '#type' => 'select',
       '#title' => $this->t('Form method'),
-      '#description' => $this->t('The HTTP method with which the form will be submitted.') . '<br /><br />' .
-        '<em>' . $this->t('Selecting a custom POST or GET method will automatically disable wizards, previews, drafts, submissions, limits, purging, confirmations, emails, computed elements, and handlers.') . '</em>',
+      '#description' => $this->t('The HTTP method with which the form will be submitted.')
+        . '<br /><br />'
+        . '<em>' . $this->t('Selecting a custom POST or GET method will automatically disable wizards, previews, drafts, submissions, limits, purging, confirmations, emails, computed elements, and handlers.') . '</em>',
       '#options' => [
         '' => $this->t('POST (Default)'),
         'post' => $this->t('POST (Custom)'),
         'get' => $this->t('GET (Custom)'),
       ],
-      '#default_value' => $properties['#method'],
+      '#default_value' => $settings['form_method'],
     ];
     $form['custom_settings']['method_message'] = [
       '#type' => 'webform_message',
@@ -606,36 +638,27 @@ public function form(array $form, FormStateInterface $form_state) {
         ],
       ],
     ];
-
-    $form['custom_settings']['action'] = [
+    $form['custom_settings']['form_action'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Form action'),
       '#description' => $this->t('The URL or path to which the webform will be submitted.'),
       '#states' => [
         'invisible' => [
-          ':input[name="method"]' => ['value' => ''],
+          ':input[name="form_method"]' => ['value' => ''],
         ],
         'optional' => [
-          ':input[name="method"]' => ['value' => ''],
+          ':input[name="form_method"]' => ['value' => ''],
         ],
       ],
-      '#default_value' => $properties['#action'],
+      '#default_value' => $settings['form_action'],
     ];
-    // Unset properties that are webform settings.
-    unset(
-      $properties['#method'],
-      $properties['#action'],
-      $properties['#novalidate'],
-      $properties['#attributes']
-    );
     $form['custom_settings']['custom'] = [
       '#type' => 'webform_codemirror',
       '#mode' => 'yaml',
       '#title' => $this->t('Form custom properties'),
-      '#description' =>
-        $this->t('Properties do not have to prepended with a hash (#) character, the hash character will be automatically added to the custom properties.') .
-        '<br /><br />' .
-        $this->t('These properties and callbacks are not allowed: @properties.', ['@properties' => WebformArrayHelper::toString(WebformArrayHelper::addPrefix(WebformElementHelper::$ignoredProperties))]),
+      '#description' => $this->t('Properties do not have to prepended with a hash (#) character, the hash character will be automatically added to the custom properties.')
+        . '<br /><br />'
+        . $this->t('These properties and callbacks are not allowed: @properties.', ['@properties' => WebformArrayHelper::toString(WebformArrayHelper::addPrefix(WebformElementHelper::$ignoredProperties))]),
       '#default_value' => WebformArrayHelper::removePrefix($properties),
     ];
 
@@ -690,44 +713,16 @@ public function save(array $form, FormStateInterface $form_state) {
     $elements = WebformElementHelper::removeProperties($elements);
 
     $properties = [];
-
-    // Unset custom method and action.
-    unset(
-      $properties['#method'],
-      $properties['#action']
-    );
-
-    // Set custom method and action.
-    if (!empty($values['method'])) {
-      $properties['#method'] = $values['method'];
-      if (!empty($values['action'])) {
-        $properties['#action'] = $values['action'];
-      }
-    }
-
     // Set custom properties.
     if (!empty($values['custom'])) {
       $properties += WebformArrayHelper::addPrefix($values['custom']);
     }
-
-    // Set custom attributions.
-    if (!empty($values['attributes'])) {
-      $properties['#attributes'] = $values['attributes'];
-    }
-
-    // Prepend form properties to elements.
+    // Prepend custom form properties to elements.
     $elements = $properties + $elements;
-
     // Save elements.
     $webform->setElements($elements);
-
-    // Remove custom properties and attributes.
-    unset(
-      $values['method'],
-      $values['action'],
-      $values['attributes'],
-      $values['custom']
-    );
+    // Remove custom properties.
+    unset($values['custom']);
 
     // Remove main properties.
     unset(
diff --git a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigBaseForm.php b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigBaseForm.php
index f7d984ad73980234f4054bc9f1080be6f59f6899..49f91866188f20dc770f9c9aa0067863b4874667 100644
--- a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigBaseForm.php
+++ b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigBaseForm.php
@@ -3,11 +3,13 @@
 namespace Drupal\webform\Form\AdminConfig;
 
 use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\webform\Plugin\WebformElement\TableSelect;
 use Drupal\webform\Plugin\WebformElementManagerInterface;
 use Drupal\webform\Plugin\WebformHandlerManager;
+use Drupal\webform\Utility\WebformElementHelper;
 
 /**
  * Base webform admin settings form.
@@ -32,6 +34,100 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     parent::submitForm($form, $form_state);
   }
 
+  /**
+   * Build bulk operation settings for webforms and submissions.
+   *
+   * @param array $settings
+   *   Webform settings.
+   * @param $entity_type_id
+   *   The entity type id. (webform or webform_submission)
+   *
+   * @return array
+   */
+  protected function buildBulkOperations(array $settings, $entity_type_id) {
+    $element = [
+      '#type' => 'details',
+      '#title' => ($entity_type_id === 'webform_submission')
+        ? $this->t('Submissions bulk operations settings')
+        : $this->t('Form bulk operations settings'),
+      '#open' => TRUE,
+      '#tree' => TRUE,
+    ];
+
+    // Enable.
+    $settings += [
+      $entity_type_id . '_bulk_form' => TRUE,
+    ];
+    $element[$entity_type_id . '_bulk_form'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Enabled webform bulk operations'),
+      '#description' => ($entity_type_id === 'webform_submission')
+        ? $this->t('If checked, bulk operations will be displayed on the submission results page.')
+        : $this->t('If checked, bulk operations will be displayed on the form manager page.'),
+      '#return_value' => TRUE,
+      '#default_value' => $settings[$entity_type_id . '_bulk_form'],
+    ];
+
+    // Actions.
+    $options = [];
+    $default_actions = [];
+    /** @var \Drupal\system\ActionConfigEntityInterface[] $actions */
+    $actions = \Drupal::entityTypeManager()->getStorage('action')->loadMultiple();
+    foreach ($actions as $action) {
+      if ($action->getType() === $entity_type_id) {
+        $options[$action->id()] = ['label' => $action->label()];
+        $default_actions[] = $action->id();
+      }
+    }
+    $settings += [
+      $entity_type_id . '_bulk_form_actions' => $default_actions,
+    ];
+    $element[$entity_type_id . '_bulk_form_actions'] = [
+      '#type' => 'webform_tableselect_sort',
+      '#title' => ($entity_type_id === 'webform_submission')
+        ? $this->t('Submissions selected actions')
+        : $this->t('Form selected actions'),
+      '#header' => ['label' => $this->t('Selected actions')],
+      '#options' => $options,
+      '#default_value' => array_combine(
+        $settings[$entity_type_id . '_bulk_form_actions'],
+        $settings[$entity_type_id . '_bulk_form_actions']
+      ),
+      '#states' => [
+        'visible' => [
+          ':input[name="bulk_form_settings[' . $entity_type_id . '_bulk_form]"]' => ['checked' => TRUE],
+        ],
+        'required' => [
+          ':input[name="bulk_form_settings[' . $entity_type_id . '_bulk_form]"]' => ['checked' => TRUE],
+        ],
+      ],
+      '#element_validate' => [[get_class($this), 'validateBulkFormActions']],
+    ];
+    WebformElementHelper::fixStatesWrapper($element[$entity_type_id . '_bulk_form_actions']);
+
+    return $element;
+  }
+
+    /**
+   * Form API callback. Validate bulk form actions.
+   */
+  public static function validateBulkFormActions(array &$element, FormStateInterface $form_state) {
+    $actions_value = NestedArray::getValue($form_state->getValues(), $element['#parents']);
+
+    $enabled_parents = $element['#parents'];
+    $enabled_parents[1] = str_replace('_actions', '', $enabled_parents[1]);
+    $enabled_value = NestedArray::getValue($form_state->getValues(), $enabled_parents);
+
+    if (!empty($enabled_value) && empty($actions_value)) {
+      $form_state->setErrorByName(NULL, t('@name field is required.', ['@name' => $element['#title']]));
+    }
+
+    // Convert actions associative array of values to an indexed array.
+    $actions_value = array_values($actions_value);
+    $element['#value'] = $actions_value;
+    $form_state->setValueForElement($element, $actions_value);
+  }
+
   /****************************************************************************/
   // Exclude plugins.
   /****************************************************************************/
diff --git a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigFormsForm.php b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigFormsForm.php
index 2d99fee89d6cdfefd726053768c229439ac01afd..2ac78b416de7d3e913d89d4860b897da5f0e48d0 100644
--- a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigFormsForm.php
+++ b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigFormsForm.php
@@ -93,6 +93,19 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#open' => TRUE,
       '#tree' => TRUE,
     ];
+    $form['filter_settings']['limit'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Webforms per page'),
+      '#options' => [
+        '10' => '10',
+        '20' => '20',
+        '30' => '30',
+        '40' => '40',
+        '50' => '50',
+      ],
+      '#parents' => ['form', 'limit'],
+      '#default_value' => $config->get('form.limit') ?: 50,
+    ];
     $form['filter_settings']['filter_category'] = [
       '#type' => 'select',
       '#title' => $this->t('Filter webforms default category'),
@@ -526,6 +539,9 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#default_value' => $settings['default_share_theme_name'],
     ];
 
+    // Bulk operation settings.
+    $form['bulk_form_settings'] = $this->buildBulkOperations($settings, 'webform');
+
     // Dialog settings.
     $form['dialog_settings'] = [
       '#type' => 'details',
@@ -694,6 +710,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       + $form_state->getValue('confirmation_settings')
       + $form_state->getValue('share_settings')
       + $form_state->getValue('ajax_settings')
+      + $form_state->getValue('bulk_form_settings')
       + $form_state->getValue('dialog_settings');
 
     // Track if we need to trigger an update of all webform paths
diff --git a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigSubmissionsForm.php b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigSubmissionsForm.php
index 7d00a99519be2028580b9654ea3d3308cb6628c2..c33a789d9e2483171a3402bdbe7a77dceec42d33 100644
--- a/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigSubmissionsForm.php
+++ b/web/modules/webform/src/Form/AdminConfig/WebformAdminConfigSubmissionsForm.php
@@ -216,6 +216,9 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#description' => $this->t('Enter the amount of submissions to be purged during single cron run. You may want to lower this number if you are facing memory or timeout issues when purging via cron.'),
     ];
 
+    // Bulk operation settings.
+    $form['bulk_form_settings'] = $this->buildBulkOperations($settings, 'webform_submission');
+
     // Submission views.
     $form['views_settings'] = [
       '#type' => 'details',
@@ -256,6 +259,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
       + $form_state->getValue('submission_behaviors')
       + $form_state->getValue('submission_limits')
       + $form_state->getValue('draft_settings')
+      + $form_state->getValue('bulk_form_settings')
       + $form_state->getValue('views_settings');
 
     // Update config and submit form.
diff --git a/web/modules/webform/src/Form/WebformAjaxFormTrait.php b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
index 422c53c3d2ceee5c80af793c59dd3ab86e7d22ae..1d2d9962ac1670780d419ea121495fa9a8c46fe2 100644
--- a/web/modules/webform/src/Form/WebformAjaxFormTrait.php
+++ b/web/modules/webform/src/Form/WebformAjaxFormTrait.php
@@ -135,7 +135,7 @@ protected function buildAjaxForm(array &$form, FormStateInterface $form_state, a
         continue;
       }
 
-      $actions =& $form[$element_key];
+      $actions = &$form[$element_key];
       foreach (Element::children($actions) as $action_key) {
         if (WebformElementHelper::isType($actions[$action_key], 'submit')) {
           $actions[$action_key]['#ajax'] = [
@@ -161,9 +161,11 @@ protected function buildAjaxForm(array &$form, FormStateInterface $form_state, a
     $wrapper_attributes = new Attribute($wrapper_attributes);
 
     $form['#form_wrapper_id'] = $wrapper_id;
-    $form['#prefix'] = '<span id="' . $wrapper_id . '-content"></span>';
+
+    $form += ['#prefix' => '', '#suffix' => ''];
+    $form['#prefix'] .= '<span id="' . $wrapper_id . '-content"></span>';
     $form['#prefix'] .= '<div' . $wrapper_attributes . '>';
-    $form['#suffix'] = '</div>';
+    $form['#suffix'] = '</div>' . $form['#suffix'];
 
     // Add Ajax library which contains 'Scroll to top' Ajax command and
     // Ajax callback for confirmation back to link.
diff --git a/web/modules/webform/src/Form/WebformBulkFormBase.php b/web/modules/webform/src/Form/WebformBulkFormBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..e87f45c92e639bea062a0a166a56d403fc5813f3
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformBulkFormBase.php
@@ -0,0 +1,206 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides the webform bulk form base.
+ *
+ * @see \Drupal\views\Plugin\views\field\BulkForm
+ */
+abstract class WebformBulkFormBase extends FormBase {
+
+  /**
+   * The tempstore factory.
+   *
+   * @var \Drupal\Core\TempStore\PrivateTempStoreFactory
+   */
+  protected $tempStoreFactory;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * The entity type.
+   *
+   * @var string
+   */
+  protected $entityTypeId;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    $instance = parent::create($container);
+    $instance->tempStoreFactory = $container->get('tempstore.private');
+    $instance->currentUser = $container->get('current_user');
+    $instance->entityTypeManager = $container->get('entity_type.manager');
+    return $instance;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return $this->entityTypeId . '_bulk_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, $table = []) {
+    $form['#attributes']['class'][] = 'webform-bulk-form';
+
+    $options = $this->getBulkOptions();
+    if (empty($options) ) {
+      return ['items' => $table];
+    }
+
+    // Operations.
+    $form['operations'] = [
+      '#prefix' => '<div class="container-inline">',
+      '#suffix' => '</div>',
+    ];
+    $form['operations']['action'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Action'),
+      '#title_display' => 'invisible',
+      '#options' => $this->getBulkOptions(),
+      '#empty_option' => $this->t('- Select operation -'),
+    ];
+    $form['operations']['apply_above'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Apply to selected items'),
+    ];
+
+    // Table select.
+    $form['items'] = $table;
+    $form['items']['#type'] = 'tableselect';
+    $form['items']['#options'] = $table['#rows'];
+
+    $form['apply_below'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Apply to selected items'),
+    ];
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    $action = $form_state->getValue('action');
+    if (empty($action)) {
+      $form_state->setErrorByName(NULL, $this->t('No operation selected.'));
+    }
+    $entity_ids = array_filter($form_state->getValue('items'));
+    if (empty($entity_ids)) {
+      $form_state->setErrorByName(NULL, $this->t('No items selected.'));
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $actions = $this->getActions();
+    // If the action does exist, skip it and assume that someone has altered
+    // the form and added a custom action.
+    if (!isset($actions[$form_state->getValue('action')])) {
+      return;
+    }
+
+    $action = $actions[$form_state->getValue('action')];
+
+    $entity_ids = array_filter($form_state->getValue('items'));
+    $entities = $this->entityTypeManager->getStorage($this->entityTypeId)->loadMultiple($entity_ids);
+    foreach ($entities as $key => $entity) {
+      // Skip execution if the user did not have access.
+      if (!$action->getPlugin()->access($entity, $this->currentUser())) {
+        $this->messenger()->addError($this->t('No access to execute %action on the @entity_type_label %entity_label.', [
+          '%action' => $action->label(),
+          '@entity_type_label' => $entity->getEntityType()->getLabel(),
+          '%entity_label' => $entity->label(),
+        ]));
+        unset($entities[$key]);
+        continue;
+      }
+    }
+
+    $count = count($entities);
+
+    // If there were entities selected but the action isn't allowed on any of
+    // them, we don't need to do anything further.
+    if (!$count) {
+      return;
+    }
+
+    $action->execute($entities);
+
+    $operation_definition = $action->getPluginDefinition();
+    if (!empty($operation_definition['confirm_form_route_name'])) {
+      $options = [
+        'query' => $this->getDestinationArray(),
+      ];
+      $form_state->setRedirect($operation_definition['confirm_form_route_name'], [], $options);
+    }
+    else {
+      // Don't display the message unless there are some elements affected and
+      // there is no confirmation form.
+      $this->messenger()->addStatus($this->formatPlural($count, '%action was applied to @count item.', '%action was applied to @count items.', [
+        '%action' => $action->label(),
+      ]));
+    }
+  }
+
+  /**
+   * Get the entity type's actions
+   *
+   * @return \Drupal\system\ActionConfigEntityInterface[]
+   *   An associative array of actions.
+   */
+  protected function getActions() {
+    if (!isset($this->actions)) {
+      $this->actions = [];
+      $action_ids = $this->configFactory()->get('webform.settings')->get('settings.' . $this->entityTypeId . '_bulk_form_actions') ?: [];
+      if ($action_ids) {
+        /** @var \Drupal\system\ActionConfigEntityInterface[] $actions */
+        $actions = $this->entityTypeManager->getStorage('action')->loadMultiple($action_ids);
+        $this->actions = array_filter($actions, function ($action) {
+          return $action->getType() === $this->entityTypeId;
+        });
+      }
+    }
+    return $this->actions;
+  }
+
+  /**
+   * Returns the available operations for this form.
+   *
+   * @return array
+   *   An associative array of operations, suitable for a select element.
+   */
+  protected function getBulkOptions() {
+    $actions = $this->getActions();
+    $options = [];
+    foreach ($actions as $id => $action) {
+      $options[$id] = $action->label();
+    }
+    return $options;
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformDeleteMultipleFormBase.php b/web/modules/webform/src/Form/WebformDeleteMultipleFormBase.php
new file mode 100644
index 0000000000000000000000000000000000000000..e45493d5f2e98031d2a86f4f62b6a94b527c5a36
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformDeleteMultipleFormBase.php
@@ -0,0 +1,110 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Entity\Form\DeleteMultipleForm;
+use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\HttpFoundation\RedirectResponse;
+
+/**
+ * Provides an entities deletion confirmation form.
+ *
+ * @see \Drupal\Core\Entity\Form\DeleteMultipleForm
+ * @see \Drupal\webform\Form\WebformDeleteFormInterface
+ * @see \Drupal\webform\Form\WebformConfigEntityDeleteFormBase
+ */
+abstract class WebformDeleteMultipleFormBase extends DeleteMultipleForm {
+
+    /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, $entity_type_id = NULL) {
+    // Issue #2582295: Confirmation cancel links are incorrect if installed in
+    // a subdirectory
+    // Work-around: Remove subdirectory from destination before generating
+    // actions.
+    $request = $this->getRequest();
+    $destination = $request->query->get('destination');
+    if ($destination) {
+      // Remove subdirectory from destination.
+      $update_destination = preg_replace('/^' . preg_quote(base_path(), '/') . '/', '/', $destination);
+      $request->query->set('destination', $update_destination);
+      $form = parent::buildForm($form, $form_state, $entity_type_id);
+      $request->query->set('destination', $destination);
+    }
+    else {
+      $form = parent::buildForm($form, $form_state, $entity_type_id);
+    }
+
+    // Exit if redirect.
+    if ($form instanceof RedirectResponse) {
+      return $form;
+    }
+
+    $form['message'] = $this->getWarning();
+    $form['entities'] += [
+      '#prefix' => $this->formatPlural(count($this->selection), 'The below @item will be deleted.', 'The below @items will be deleted.', [
+        '@item' => $this->entityType->getSingularLabel(),
+        '@items' => $this->entityType->getPluralLabel(),
+      ]),
+      '#suffix' => '<p><hr/></p>',
+    ];
+    $form['description'] = $this->getDescription();
+    $form['hr'] = ['#markup' => '<p><hr/></p>'];
+    $form['confirm_input'] = $this->getConfirmInput();
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return $this->formatPlural(count($this->selection), 'Delete this @item?', 'Delete these @items?', [
+      '@item' => $this->entityType->getSingularLabel(),
+      '@items' => $this->entityType->getPluralLabel(),
+    ]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return [];
+  }
+
+  /**
+   * Returns warning message to display.
+   *
+   */
+  public function getWarning() {
+    $message = $this->formatPlural(count($this->selection), 'Are you sure you want to delete this @item?', 'Are you sure you want to delete these @items?', [
+      '@item' => $this->entityType->getSingularLabel(),
+      '@items' => $this->entityType->getPluralLabel(),
+    ]);
+
+    return[
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $message,
+      '#weight' => -10,
+    ];
+  }
+
+  /**
+   * Returns confirm input to display.
+   *
+   * @return array
+   *   A renderable array containing confirm input.
+   */
+  public function getConfirmInput() {
+    return [
+      '#type' => 'checkbox',
+      '#title' => $this->formatPlural(count($this->selection), 'Yes, I want to delete this @item?', 'Yes, I want to delete these @items?', [
+        '@item' => $this->entityType->getSingularLabel(),
+        '@items' => $this->entityType->getPluralLabel(),
+      ]),
+      '#required' => TRUE,
+    ];
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformEntityBulkForm.php b/web/modules/webform/src/Form/WebformEntityBulkForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..0b809d96a18964077a93aab293d375ac5e9da2ae
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformEntityBulkForm.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+/**
+ * Provides the webform bulk form.
+ */
+class WebformEntityBulkForm extends WebformBulkFormBase {
+
+ /**
+   * {@inheritdoc}
+   */
+  protected $entityTypeId = 'webform';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getActions() {
+    $actions = parent::getActions();
+    $is_archived = ($this->getRequest()->query->get('state') === 'archived');
+    if ($is_archived) {
+      unset(
+        $actions['webform_archive_action'],
+        $actions['webform_open_action'],
+        $actions['webform_close_action']
+      );
+    }
+    else {
+      unset($actions['webform_unarchive_action']);
+    }
+    return $actions;
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformEntityDeleteMultipleForm.php b/web/modules/webform/src/Form/WebformEntityDeleteMultipleForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ad74515d4a009f0b0fbe90bf20cf0876d60104c
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformEntityDeleteMultipleForm.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+/**
+ * Provides a webform deletion confirmation form.
+ */
+class WebformEntityDeleteMultipleForm extends WebformDeleteMultipleFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    // @see \Drupal\webform\WebformEntityDeleteForm::getDescription
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Delete all related submissions'),
+          $this->formatPlural(count($this->selection), 'Affect any fields or nodes which reference this webform', 'Affect any fields or nodes which reference these webform', [
+            '@item' => $this->entityType->getSingularLabel(),
+            '@items' => $this->entityType->getPluralLabel(),
+          ])
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformSubmissionBulkForm.php b/web/modules/webform/src/Form/WebformSubmissionBulkForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..db28a6952c89ca08d792e461a56e17807062c3ba
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformSubmissionBulkForm.php
@@ -0,0 +1,52 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Provides the webform submission bulk form.
+ */
+class WebformSubmissionBulkForm extends WebformBulkFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $entityTypeId = 'webform_submission';
+
+  /**
+   * Can user delete any submission.
+   *
+   * @var bool
+   */
+  protected $submissionDeleteAny = FALSE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, $table = [], $submission_delete_any = FALSE) {
+    // Track if the user can delete any submission.
+    $this->submissionDeleteAny = $submission_delete_any;
+
+    // Restructure the table rows so that they can be displayed as
+    // table select options.
+    foreach ($table['#rows'] as $key => $row) {
+      $table['#rows'][$key] = $row['data'] + ['#attributes' => ['data-webform-href' => $row['data-webform-href']]];
+    }
+
+    return parent::buildForm($form, $form_state, $table);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getActions() {
+    $actions = parent::getActions();
+    // Make sure user can delete any submission.
+    if (!$this->submissionDeleteAny) {
+      unset($actions['webform_submission_delete_action']);
+    }
+    return $actions;
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
index fbd9a5c36d5278735be67f126e7af0ba1efe354a..c16564606cfa5c91f63d5581ab1c83fdb1d9a9d1 100644
--- a/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
+++ b/web/modules/webform/src/Form/WebformSubmissionDeleteForm.php
@@ -119,6 +119,7 @@ public function getWarning() {
    * {@inheritdoc}
    */
   public function getDescription() {
+    // @see \Drupal\webform\Form\WebformSubmissionDeleteMultipleForm::getDescription
     return [
       'title' => [
         '#markup' => $this->t('This action will…'),
diff --git a/web/modules/webform/src/Form/WebformSubmissionDeleteMultiple.php b/web/modules/webform/src/Form/WebformSubmissionDeleteMultiple.php
deleted file mode 100644
index c5a33ec9275a668f3659dfa84da33b2fc9c24e4f..0000000000000000000000000000000000000000
--- a/web/modules/webform/src/Form/WebformSubmissionDeleteMultiple.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-namespace Drupal\webform\Form;
-
-use Drupal\Core\Form\ConfirmFormBase;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\EntityStorage\WebformEntityStorageTrait;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\RedirectResponse;
-
-/**
- * Provides a webform submission deletion confirmation form.
- */
-class WebformSubmissionDeleteMultiple extends ConfirmFormBase {
-
-  use WebformEntityStorageTrait;
-
-  /**
-   * The array of webform_submissions to delete.
-   *
-   * @var string[][]
-   */
-  protected $webformSubmissionInfo = [];
-
-  /**
-   * The tempstore factory.
-   *
-   * @var \Drupal\Core\TempStore\PrivateTempStoreFactory
-   */
-  protected $tempStoreFactory;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    $instance = parent::create($container);
-    $instance->tempStoreFactory = $container->get('tempstore.private');
-    $instance->entityTypeManager = $container->get('entity_type.manager');
-    return $instance;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormId() {
-    return 'webform_submission_multiple_delete_confirm';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    return $this->formatPlural(count($this->webformSubmissionInfo), 'Are you sure you want to delete this submission?', 'Are you sure you want to delete these submissions?');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelUrl() {
-    return new Url('entity.webform_submission.collection');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return t('Delete');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    /** @var \Drupal\webform\WebformSubmissionInterface[] $webform_submissions */
-    $webform_submissions = $this->tempStoreFactory->get('webform_submission_multiple_delete_confirm')->get(\Drupal::currentUser()->id());
-    if (empty($webform_submissions)) {
-      return new RedirectResponse($this->getCancelUrl()->setAbsolute()->toString());
-    }
-
-    $form['webform_submissions'] = [
-      '#theme' => 'item_list',
-      '#items' => array_map(function ($webform_submission) {
-        return $webform_submission->label();
-      }, $webform_submissions),
-    ];
-    $form = parent::buildForm($form, $form_state);
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    /** @var \Drupal\webform\WebformSubmissionInterface[] $webform_submissions */
-    $webform_submissions = $this->tempStoreFactory->get('webform_submission_multiple_delete_confirm')->get(\Drupal::currentUser()->id());
-    if ($form_state->getValue('confirm') && !empty($webform_submissions)) {
-      $this->getSubmissionStorage()->delete($webform_submissions);
-      $this->logger('content')->notice('Deleted @count submission.', ['@count' => count($webform_submissions)]);
-      $this->tempStoreFactory->get('webform_submission_multiple_delete_confirm')->delete(\Drupal::currentUser()->id());
-    }
-
-    $form_state->setRedirect('entity.webform_submission.collection');
-  }
-
-}
diff --git a/web/modules/webform/src/Form/WebformSubmissionDeleteMultipleForm.php b/web/modules/webform/src/Form/WebformSubmissionDeleteMultipleForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..39d5587f55e24572d31ef27c9e78b8ae0c6bd21b
--- /dev/null
+++ b/web/modules/webform/src/Form/WebformSubmissionDeleteMultipleForm.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+/**
+ * Provides a webform submission deletion confirmation form.
+ */
+class WebformSubmissionDeleteMultipleForm extends WebformDeleteMultipleFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    // @see \Drupal\webform\Form\WebformSubmissionDeleteForm::getDescription
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove records from the database'),
+          $this->t('Delete any uploaded files'),
+          $this->t('Cancel all pending actions'),
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
index 2e6a9f4a6540623821a1a810a8918e2d87a2a358..d26a1ec3d2d0e5862bd55441e2720de11179eff2 100644
--- a/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
+++ b/web/modules/webform/src/Form/WebformSubmissionsDeleteFormBase.php
@@ -171,7 +171,7 @@ public function getBatchLimit() {
    * @param mixed|array $context
    *   The batch current context.
    */
-  public function batchProcess(WebformInterface $webform = NULL, EntityInterface $entity = NULL, $max_sid, &$context) {
+  public function batchProcess(WebformInterface $webform = NULL, EntityInterface $entity = NULL, $max_sid = NULL, array &$context = []) {
     if (empty($context['sandbox'])) {
       $context['sandbox']['progress'] = 0;
       $context['sandbox']['max'] = $this->getSubmissionStorage()->getTotal($webform, $entity, NULL, ['in_draft' => NULL]);
diff --git a/web/modules/webform/src/Plugin/Action/DeleteWebformSubmission.php b/web/modules/webform/src/Plugin/Action/DeleteWebformSubmission.php
deleted file mode 100644
index 0ed730d1389e64b829c7df272461679f85c55ab2..0000000000000000000000000000000000000000
--- a/web/modules/webform/src/Plugin/Action/DeleteWebformSubmission.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-namespace Drupal\webform\Plugin\Action;
-
-use Drupal\Core\Action\ActionBase;
-use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Session\AccountInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Redirects to a webform submission deletion form.
- *
- * @Action(
- *   id = "webform_submission_delete_action",
- *   label = @Translation("Delete submission"),
- *   type = "webform_submission",
- *   confirm_form_route_name = "webform_submission.multiple_delete_confirm"
- * )
- */
-class DeleteWebformSubmission extends ActionBase implements ContainerFactoryPluginInterface {
-
-  /**
-   * The tempstore factory.
-   *
-   * @var \Drupal\Core\TempStore\PrivateTempStoreFactory
-   */
-  protected $tempStoreFactory;
-
-  /**
-   * The current user.
-   *
-   * @var \Drupal\Core\Session\AccountInterface
-   */
-  protected $currentUser;
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    $instance = new static($configuration, $plugin_id, $plugin_definition);
-    $instance->currentUser = $container->get('current_user');
-    $instance->tempStoreFactory = $container->get('tempstore.private');
-    return $instance;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function executeMultiple(array $entities) {
-    $this->tempStoreFactory->get('webform_submission_multiple_delete_confirm')->set($this->currentUser->id(), $entities);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function execute($object = NULL) {
-    $this->executeMultiple([$object]);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
-    /** @var \Drupal\webform\WebformSubmissionInterface $object */
-    return $object->access('delete', $account, $return_as_object);
-  }
-
-}
diff --git a/web/modules/webform/src/Plugin/Action/WebformEntityArchiveAction.php b/web/modules/webform/src/Plugin/Action/WebformEntityArchiveAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f32671bafddfc2b8347cff620dc37edd36c2cd7
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformEntityArchiveAction.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\ActionBase;
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Archives a webform.
+ *
+ * @Action(
+ *   id = "webform_archive_action",
+ *   label = @Translation("Archive webform"),
+ *   type = "webform"
+ * )
+ */
+class WebformEntityArchiveAction extends ActionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute($entity = NULL) {
+    /** @var \Drupal\webform\WebformInterface $entity */
+    $entity->set('archive', TRUE)->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
+    /** @var \Drupal\webform\WebformInterface $object */
+    $result = $object->access('update', $account, TRUE);
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/Action/WebformEntityCloseAction.php b/web/modules/webform/src/Plugin/Action/WebformEntityCloseAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..86a4b0aa5d2da17b3f5196998f5a2430cfb03845
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformEntityCloseAction.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\ActionBase;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\webform\WebformInterface;
+
+/**
+ * Closes a webform.
+ *
+ * @Action(
+ *   id = "webform_close_action",
+ *   label = @Translation("Close webform"),
+ *   type = "webform"
+ * )
+ */
+class WebformEntityCloseAction extends ActionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute($entity = NULL) {
+    /** @var \Drupal\webform\WebformInterface $entity */
+    $entity->setStatus(WebformInterface::STATUS_CLOSED)->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
+    /** @var \Drupal\webform\WebformInterface $object */
+    $result = $object->access('update', $account, TRUE);
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/Action/WebformEntityDeleteAction.php b/web/modules/webform/src/Plugin/Action/WebformEntityDeleteAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..a05f4c7c6515daa0be8b90037cd0ae0821d91a9f
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformEntityDeleteAction.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\Plugin\Action\DeleteAction;
+
+/**
+ * Redirects to a webform deletion form.
+ *
+ * @Action(
+ *   id = "webform_delete_action",
+ *   label = @Translation("Delete webform"),
+ *   type = "webform",
+ *   confirm_form_route_name = "entity.webform.multiple_delete_confirm"
+ * )
+ */
+class WebformEntityDeleteAction extends DeleteAction { }
diff --git a/web/modules/webform/src/Plugin/Action/WebformEntityOpenAction.php b/web/modules/webform/src/Plugin/Action/WebformEntityOpenAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1c38d7f2e54960e643e1133ccc1402eaafaf29d
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformEntityOpenAction.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\ActionBase;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\webform\WebformInterface;
+
+/**
+ * Opens a webform.
+ *
+ * @Action(
+ *   id = "webform_open_action",
+ *   label = @Translation("Open webform"),
+ *   type = "webform"
+ * )
+ */
+class WebformEntityOpenAction extends ActionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute($entity = NULL) {
+    /** @var \Drupal\webform\WebformInterface $entity */
+    $entity->setStatus(WebformInterface::STATUS_OPEN)->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
+    /** @var \Drupal\webform\WebformInterface $object */
+    $result = $object->access('update', $account, TRUE);
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/Action/WebformEntityUnarchiveAction.php b/web/modules/webform/src/Plugin/Action/WebformEntityUnarchiveAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..36b628151ecca6b81d53ae565fbd9c24b7e57a09
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformEntityUnarchiveAction.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\ActionBase;
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Unarchives a webform.
+ *
+ * @Action(
+ *   id = "webform_unarchive_action",
+ *   label = @Translation("Restore webform"),
+ *   type = "webform"
+ * )
+ */
+class WebformEntityUnarchiveAction extends ActionBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute($entity = NULL) {
+    /** @var \Drupal\webform\WebformInterface $entity */
+    $entity->set('archive', FALSE)->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
+    /** @var \Drupal\webform\WebformInterface $object */
+    $result = $object->access('update', $account, TRUE);
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
+}
diff --git a/web/modules/webform/src/Plugin/Action/WebformSubmissionDeleteAction.php b/web/modules/webform/src/Plugin/Action/WebformSubmissionDeleteAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..1b575e8a6c889ffc80bea22705f9581a06c727ee
--- /dev/null
+++ b/web/modules/webform/src/Plugin/Action/WebformSubmissionDeleteAction.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Drupal\webform\Plugin\Action;
+
+use Drupal\Core\Action\Plugin\Action\DeleteAction;
+
+/**
+ * Redirects to a webform submission deletion form.
+ *
+ * @Action(
+ *   id = "webform_submission_delete_action",
+ *   label = @Translation("Delete submission"),
+ *   type = "webform_submission",
+ *   confirm_form_route_name = "webform_submission.multiple_delete_confirm"
+ * )
+ */
+class WebformSubmissionDeleteAction extends DeleteAction { }
diff --git a/web/modules/webform/src/Plugin/Action/LockWebformSubmission.php b/web/modules/webform/src/Plugin/Action/WebformSubmissionLockAction.php
similarity index 88%
rename from web/modules/webform/src/Plugin/Action/LockWebformSubmission.php
rename to web/modules/webform/src/Plugin/Action/WebformSubmissionLockAction.php
index 1a94481ec99db21720c70e6fa65d0c72f8631b63..a1a5bca684bee812ff67198e9898fffcb1438b09 100644
--- a/web/modules/webform/src/Plugin/Action/LockWebformSubmission.php
+++ b/web/modules/webform/src/Plugin/Action/WebformSubmissionLockAction.php
@@ -10,11 +10,11 @@
  *
  * @Action(
  *   id = "webform_submission_make_lock_action",
- *   label = @Translation("Lock selected submission"),
+ *   label = @Translation("Lock submission"),
  *   type = "webform_submission"
  * )
  */
-class LockWebformSubmission extends ActionBase {
+class WebformSubmissionLockAction extends ActionBase {
 
   /**
    * {@inheritdoc}
diff --git a/web/modules/webform/src/Plugin/Action/StickyWebformSubmission.php b/web/modules/webform/src/Plugin/Action/WebformSubmissionStickyAction.php
similarity index 88%
rename from web/modules/webform/src/Plugin/Action/StickyWebformSubmission.php
rename to web/modules/webform/src/Plugin/Action/WebformSubmissionStickyAction.php
index faf8e40ac90bc85db09d818fe42ee0b137dc27bc..0f687a3bbb72775802455880dc3ab656b0f8b90c 100644
--- a/web/modules/webform/src/Plugin/Action/StickyWebformSubmission.php
+++ b/web/modules/webform/src/Plugin/Action/WebformSubmissionStickyAction.php
@@ -10,11 +10,11 @@
  *
  * @Action(
  *   id = "webform_submission_make_sticky_action",
- *   label = @Translation("Star/Flag selected submission"),
+ *   label = @Translation("Star/Flag submission"),
  *   type = "webform_submission"
  * )
  */
-class StickyWebformSubmission extends ActionBase {
+class WebformSubmissionStickyAction extends ActionBase {
 
   /**
    * {@inheritdoc}
diff --git a/web/modules/webform/src/Plugin/Action/UnlockWebformSubmission.php b/web/modules/webform/src/Plugin/Action/WebformSubmissionUnlockAction.php
similarity index 88%
rename from web/modules/webform/src/Plugin/Action/UnlockWebformSubmission.php
rename to web/modules/webform/src/Plugin/Action/WebformSubmissionUnlockAction.php
index e94a673db2382091cfc54d03045483b1e7548f8a..2104a1abcea3c63fc099d619c725f3e65d3caf4a 100644
--- a/web/modules/webform/src/Plugin/Action/UnlockWebformSubmission.php
+++ b/web/modules/webform/src/Plugin/Action/WebformSubmissionUnlockAction.php
@@ -10,11 +10,11 @@
  *
  * @Action(
  *   id = "webform_submission_make_unlock_action",
- *   label = @Translation("Unlock selected submission"),
+ *   label = @Translation("Unlock submission"),
  *   type = "webform_submission"
  * )
  */
-class UnlockWebformSubmission extends ActionBase {
+class WebformSubmissionUnlockAction extends ActionBase {
 
   /**
    * {@inheritdoc}
diff --git a/web/modules/webform/src/Plugin/Action/UnstickyWebformSubmission.php b/web/modules/webform/src/Plugin/Action/WebformSubmissionUnstickyAction.php
similarity index 87%
rename from web/modules/webform/src/Plugin/Action/UnstickyWebformSubmission.php
rename to web/modules/webform/src/Plugin/Action/WebformSubmissionUnstickyAction.php
index 1bf047e7b513a231e108be179d207a767b51dd83..1a45f25ad5f48292c959fed53a117d34ec80fdd2 100644
--- a/web/modules/webform/src/Plugin/Action/UnstickyWebformSubmission.php
+++ b/web/modules/webform/src/Plugin/Action/WebformSubmissionUnstickyAction.php
@@ -10,11 +10,11 @@
  *
  * @Action(
  *   id = "webform_submission_make_unsticky_action",
- *   label = @Translation("Unstar/unflag selected submission"),
+ *   label = @Translation("Unstar/unflag submission"),
  *   type = "webform_submission"
  * )
  */
-class UnstickyWebformSubmission extends ActionBase {
+class WebformSubmissionUnstickyAction extends ActionBase {
 
   /**
    * {@inheritdoc}
diff --git a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
index 03f463f9b9e47df0c3e3fb832ddbc628c06f1c78..6af7c815dda3105e10583e903237a46198025626 100644
--- a/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
+++ b/web/modules/webform/src/Plugin/DevelGenerate/WebformSubmissionDevelGenerateTrait.php
@@ -239,7 +239,7 @@ protected function generateSubmissions(array $values) {
         $this->generateSubmission($values);
         $feedback = isset($values['feedback']) && is_int($values['feedback']) ? $values['feedback'] : 1000;
         if ($i % $feedback === 0) {
-          $now = $this->time->getRequestTime();
+          $now = $this->time->getCurrentTime();
           $dt_args = [
             '@feedback' => $feedback,
             '@rate' => ($feedback * 60) / ($now - $start),
diff --git a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceEntityFormatter.php b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceEntityFormatter.php
index 11e70a121817aee96e007db45252fac6fc0d3c45..6bd1396c07b1659d1c08e371c9eca4c494eafc97 100644
--- a/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceEntityFormatter.php
+++ b/web/modules/webform/src/Plugin/Field/FieldFormatter/WebformEntityReferenceEntityFormatter.php
@@ -129,6 +129,9 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
       || preg_match('/\.content_translation_add$/', $route_name)
       || in_array($route_name, ['entity.block_content.canonical']));
 
+    // Same goes for entity add forms.
+    $is_entity_add_form = preg_match('/\.add$/', $route_name);
+
     $is_paragraph = ($items_entity && $items_entity->getEntityTypeId() === 'paragraph');
 
     $is_paragraph_current_source_entity = ($items_main_entity && $request_source_entity)
@@ -137,9 +140,11 @@ public function viewElements(FieldItemListInterface $items, $langcode) {
 
     $is_paragraph_entity_edit_form = ($is_entity_edit_form && $is_paragraph && $is_paragraph_current_source_entity);
 
+    $is_paragraph_entity_add_form = ($is_entity_add_form && $is_paragraph);
+
     $elements = [];
     foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) {
-      if ($is_paragraph_entity_edit_form) {
+      if ($is_paragraph_entity_edit_form || $is_paragraph_entity_add_form) {
         // Webform can not be nested within node edit form because the nested
         // <form> tags will cause unexpected validation issues.
         $elements[$delta] = [
diff --git a/web/modules/webform/src/Plugin/WebformElement/DateBase.php b/web/modules/webform/src/Plugin/WebformElement/DateBase.php
index 4c89c1467123d55bf7d7fa532577158b77ba9e44..f4e3871f1cb2ea2e2e9bd12a1c3bc225aab20565 100644
--- a/web/modules/webform/src/Plugin/WebformElement/DateBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/DateBase.php
@@ -260,9 +260,17 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['default']['default_value']['#description'] .= '<br /><br />' . $this->t("You may use tokens. Tokens should use the 'html_date' or 'html_datetime' date format. (i.e. @date_format)", ['@date_format' => '[current-user:field_date_of_birth:date:html_date]']);
 
     // Allow custom date formats to be entered.
-    $form['display']['format']['#type'] = 'webform_select_other';
-    $form['display']['format']['#other__option_label'] = $this->t('Custom date format…');
-    $form['display']['format']['#other__description'] = $this->t('A user-defined date format. See the <a href="http://php.net/manual/function.date.php">PHP manual</a> for available options.');
+    $form['display']['item']['format']['#options']['custom'] = $this->t('Custom HTML/text…');
+    $form['display']['item']['format']['#type'] = 'webform_select_other';
+    $form['display']['item']['format']['#other__option_label'] = $this->t('Custom date format…');
+    $form['display']['item']['format']['#other__description'] = $this->t('A user-defined date format. See the <a href="http://php.net/manual/function.date.php">PHP manual</a> for available options.');
+    $format_custom_states = [
+      'visible' => [':input[name="properties[format][select]"]' => ['value' => 'custom']],
+      'required' => [':input[name="properties[format][select]"]' => ['value' => 'custom']],
+    ];
+    $form['display']['item']['format_html']['#states'] = $format_custom_states;
+    $form['display']['item']['format_text']['#states'] = $format_custom_states;
+    $form['display']['item']['twig']['#states'] = $format_custom_states;
 
     $form['date'] = [
       '#type' => 'fieldset',
diff --git a/web/modules/webform/src/Plugin/WebformElement/DateList.php b/web/modules/webform/src/Plugin/WebformElement/DateList.php
index 8e2e86962c27b363c0a01f49bae6bfc5d7ae2889..bdcf75bfca45614be290aab881eea5951492a8c2 100644
--- a/web/modules/webform/src/Plugin/WebformElement/DateList.php
+++ b/web/modules/webform/src/Plugin/WebformElement/DateList.php
@@ -153,7 +153,7 @@ public function form(array $form, FormStateInterface $form_state) {
     ];
     $form['date']['date_part_order'] = [
       '#type' => 'webform_tableselect_sort',
-      '#header' => ['part' => 'Date part'],
+      '#header' => ['part' => $this->t('Date part')],
       '#options' => [
         'day' => ['part' => $this->t('Days')],
         'month' => ['part' => $this->t('Months')],
diff --git a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
index c03d15a80d0ae83d5fc69ee4597486adafbedf35..898c696e69a5c3b0208637a30274934d27f01436 100644
--- a/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/OptionsBase.php
@@ -270,7 +270,7 @@ public static function processOptionsProperties(&$element, FormStateInterface $f
       $options__properties = WebformElementHelper::removeIgnoredProperties($options__properties);
 
       foreach ($options__properties as $property => $value) {
-        $option_element =& $element[$option_key];
+        $option_element = &$element[$option_key];
         if (in_array($property, ['#attributes', '#wrapper_attributes', '#label_attributes'])) {
           // Apply attributes.
           $option_element += [$property => []];
diff --git a/web/modules/webform/src/Plugin/WebformElement/Password.php b/web/modules/webform/src/Plugin/WebformElement/Password.php
index c97b692fde04722e364d6bd68e60807c276298fd..6f74855d40c62e4b64fabf744914dee95a12a532 100644
--- a/web/modules/webform/src/Plugin/WebformElement/Password.php
+++ b/web/modules/webform/src/Plugin/WebformElement/Password.php
@@ -18,6 +18,19 @@
  */
 class Password extends WebformElementBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineDefaultProperties() {
+    $properties = parent::defineDefaultProperties();
+    unset(
+      $properties['format_items'],
+      $properties['format_items_html'],
+      $properties['format_items_text']
+    );
+    return $properties;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformCustomComposite.php b/web/modules/webform/src/Plugin/WebformElement/WebformCustomComposite.php
index 5eb92ffecdcf176d320040a4bb8ec2ce4baa42ae..00fd4961341377a52dc3bc385bc90da7ef5e2dc5 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformCustomComposite.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformCustomComposite.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\webform\Plugin\WebformElement;
 
+use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\webform\WebformSubmissionInterface;
 
@@ -91,6 +92,35 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  protected function prepareElementPreRenderCallbacks(array &$element, WebformSubmissionInterface $webform_submission = NULL) {
+    parent::prepareElementPreRenderCallbacks($element, $webform_submission);
+
+    // Set custom wrapper type to theme wrappers.
+    // @see \Drupal\webform\Element\WebformMultiple::getInfo
+    // @see \Drupal\webform\Element\WebformCompositeFormElementTrait::preRenderWebformCompositeFormElement
+    if (isset($element['#wrapper_type'])) {
+      $element['#theme_wrappers'] = [$element['#wrapper_type']];
+
+      $element += ['#attributes' => []];
+      switch ($element['#wrapper_type']) {
+        case 'fieldset':
+          $element['#attributes']['class'][] = 'fieldgroup';
+          $element['#attributes']['class'][] = 'form-composite';
+          break;
+
+        case 'container':
+          // Apply wrapper attributes to attributes.
+          if (isset($element['#wrapper_attributes'])) {
+            $element['#attributes'] = NestedArray::mergeDeep($element['#attributes'], $element['#wrapper_attributes']);
+          }
+          break;
+      }
+    }
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformImageFile.php b/web/modules/webform/src/Plugin/WebformElement/WebformImageFile.php
index ac84f22b9f7c3e5f7f558ecc3a3b8a0ae18438ec..c3ebc54309800e27fc6e018b3b3e335c28f19b92 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformImageFile.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformImageFile.php
@@ -182,7 +182,7 @@ public function getEmailAttachments(array $element, WebformSubmissionInterface $
         'filemime' => $file->getMimeType(),
         // File URIs that are not supported return FALSE, when this happens
         // still use the file's URI as the file's path.
-        'filepath' => $this->fileSystem->realpath($file->getFileUri()) ?: $file->getFileUri(),
+        'filepath' => $this->fileSystem->realpath($file_uri) ?: $file_uri,
         // URL is used when debugging or resending messages.
         // @see \Drupal\webform\Plugin\WebformHandler\EmailWebformHandler::buildAttachments
         '_fileurl' => $file_url,
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
index b32a799a10d454b9195b1d498ed84574f060c507..c452e365489a8141d365260a627a7679fa09c279 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformManagedFileBase.php
@@ -442,7 +442,9 @@ public function getItemFormats() {
    *   A file.
    */
   protected function getFile(array $element, $value, array $options) {
-    if (empty($value)) {
+    // The value is an array when the posted back file has not been processed
+    // and it should ignored.
+    if (empty($value) || is_array($value)) {
       return NULL;
     }
     if ($value instanceof FileInterface) {
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformSignature.php b/web/modules/webform/src/Plugin/WebformElement/WebformSignature.php
index 6992bc113a62f31d90e9824ed94f5abdcee28c43..a19d78d3d1046735d8cafca3ff3d6b2fcaa04cd2 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformSignature.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformSignature.php
@@ -228,7 +228,6 @@ public function postDelete(array &$element, WebformSubmissionInterface $webform_
     $image_directory = "$image_base_directory/$element_key/$sid";
     if (file_exists($image_directory)) {
       $this->fileSystem->deleteRecursive($image_directory);
-      $this->fileSystem->deleteRecursive($image_directory);
     }
 
     // Please node, the signature image (no results) directory is deleted when
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTable.php b/web/modules/webform/src/Plugin/WebformElement/WebformTable.php
index bd95181be03ec6c355be8d0f654cbfacad15e4c2..bbac2200c85d12f7173e1300cac43552d34168a4 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTable.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTable.php
@@ -262,9 +262,18 @@ public function preview() {
         $this->t('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'],
+        [
+          $this->t('Row 1 - Col 1'),
+          $this->t('Row 1 - Col 2'),
+        ],
+        [
+          $this->t('Row 2 - Col 1'),
+          $this->t('Row 2 - Col 2'),
+        ],
+        [
+          $this->t('Row 3 - Col 1'),
+          $this->t('Row 3 - Col 2'),
+        ],
       ],
     ];
   }
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableSelectSort.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableSelectSort.php
index a872a2c8a8b296033d954f328e7e87b5426c004c..32ca04eca4b73431b7ff71ffbca08d5cd1bf077f 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTableSelectSort.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableSelectSort.php
@@ -52,7 +52,7 @@ public function hasMultipleValues(array $element) {
   /**
    * {@inheritdoc}
    */
-  public function getItemDefaultFormat() {
+  public function getItemsDefaultFormat() {
     return 'ol';
   }
 
diff --git a/web/modules/webform/src/Plugin/WebformElement/WebformTableSort.php b/web/modules/webform/src/Plugin/WebformElement/WebformTableSort.php
index 5d280c87f1ce2abb0a7dd241659484872fd9ecd3..4e270b40dca57823ff6f6ccef996eae4e49742ba 100644
--- a/web/modules/webform/src/Plugin/WebformElement/WebformTableSort.php
+++ b/web/modules/webform/src/Plugin/WebformElement/WebformTableSort.php
@@ -51,7 +51,7 @@ public function hasMultipleValues(array $element) {
   /**
    * {@inheritdoc}
    */
-  public function getItemDefaultFormat() {
+  public function getItemsDefaultFormat() {
     return 'ol';
   }
 
diff --git a/web/modules/webform/src/Plugin/WebformElementBase.php b/web/modules/webform/src/Plugin/WebformElementBase.php
index 0f761d87994255a4b28e67ca202957299dc83104..420285f97146dd7c63aeb9969ec0a80c938020f0 100644
--- a/web/modules/webform/src/Plugin/WebformElementBase.php
+++ b/web/modules/webform/src/Plugin/WebformElementBase.php
@@ -35,6 +35,7 @@
 use Drupal\webform\Utility\WebformHtmlHelper;
 use Drupal\webform\Utility\WebformOptionsHelper;
 use Drupal\webform\Utility\WebformReflectionHelper;
+use Drupal\webform\Utility\WebformXss;
 use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformSubmissionConditionsValidator;
 use Drupal\webform\WebformSubmissionInterface;
@@ -735,19 +736,6 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
       $element['#wrapper_attributes']['class'][] = 'webform-element--title-inline';
     }
 
-    // Check markup properties.
-    $markup_properties = [
-      '#description',
-      '#help',
-      '#more',
-      '#multiple__no_items_message',
-    ];
-    foreach ($markup_properties as $markup_property) {
-      if (isset($element[$markup_property]) && !is_array($element[$markup_property])) {
-        $element[$markup_property] = WebformHtmlEditor::checkMarkup($element[$markup_property]);
-      }
-    }
-
     // Add default description display.
     $default_description_display = $this->configFactory->get('webform.settings')->get('element.default_description_display');
     if ($default_description_display && !isset($element['#description_display']) && $this->hasProperty('description_display')) {
@@ -797,12 +785,32 @@ public function prepare(array &$element, WebformSubmissionInterface $webform_sub
         $element['#attributes']['data-webform-required-error'] = WebformHtmlHelper::toPlainText($element['#required_error']);
         $element['#required_error'] = WebformHtmlHelper::toHtmlMarkup($element['#required_error']);
       }
+
+      // Convert #title to HTML markup so that it can displayed properly
+      // in error messages.
+      if (isset($element['#title'])) {
+        $element['#title'] = WebformHtmlHelper::toHtmlMarkup($element['#title'], WebformXss::getHtmlTagList());
+      }
     }
 
     // Replace tokens for all properties.
     if ($webform_submission) {
       $this->replaceTokens($element, $webform_submission);
     }
+
+    // Check markup properties after token replacement just-in-case markup
+    // is empty.
+    $markup_properties = [
+      '#description',
+      '#help',
+      '#more',
+      '#multiple__no_items_message',
+    ];
+    foreach ($markup_properties as $markup_property) {
+      if (!empty($element[$markup_property]) && !is_array($element[$markup_property])) {
+        $element[$markup_property] = WebformHtmlEditor::checkMarkup($element[$markup_property]);
+      }
+    }
   }
 
   /**
@@ -2341,7 +2349,7 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['element_description']['help'] = [
       '#type' => 'details',
       '#title' => $this->t('Help'),
-      '#description' => $this->t("Displays a help tooltip after the element's title."),
+      '#description' => $this->t("Displays a Help tooltip after the element's title."),
       '#states' => [
         'invisible' => [
           [':input[name="properties[title_display]"]' => ['value' => 'invisible']],
@@ -2351,13 +2359,13 @@ public function form(array $form, FormStateInterface $form_state) {
     $form['element_description']['help']['help_title'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Help title'),
-      '#description' => $this->t("The text displayed in help tooltip after the element's title.") . '<br /><br />' .
+      '#description' => $this->t("The text displayed in Help tooltip after the element's title.") . '<br /><br />' .
         $this->t("Defaults to the element's title"),
     ];
     $form['element_description']['help']['help'] = [
       '#type' => 'webform_html_editor',
       '#title' => $this->t('Help text'),
-      '#description' => $this->t("The text displayed in help tooltip after the element's title."),
+      '#description' => $this->t("The text displayed in Help tooltip after the element's title."),
     ];
     $form['element_description']['more'] = [
       '#type' => 'details',
@@ -2422,7 +2430,7 @@ public function form(array $form, FormStateInterface $form_state) {
         'element_before' => $this->t('Before element'),
         'element_after' => $this->t('After element'),
       ],
-      '#description' => $this->t('Determines the placement of the help tooltip.'),
+      '#description' => $this->t('Determines the placement of the Help tooltip.'),
     ];
     if ($this->hasProperty('title_display')) {
       $form['form']['title_display_message'] = [
diff --git a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
index 9d4501261af690c92788fd373a19acebcffd13a8..a71ebbefb9d33f278a650f36fdb66fca8980daea 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/EmailWebformHandler.php
@@ -1095,6 +1095,20 @@ protected function getMessageAttachments(WebformSubmissionInterface $webform_sub
       $element_plugin = $this->elementManager->getElementInstance($element);
       $attachments = array_merge($attachments, $element_plugin->getEmailAttachments($element, $webform_submission));
     }
+
+    // For SwiftMailer && Mime Mail use filecontent and not the filepath.
+    // @see \Drupal\swiftmailer\Plugin\Mail\SwiftMailer::attachAsMimeMail
+    // @see \Drupal\mimemail\Utility\MimeMailFormatHelper::mimeMailFile
+    // @see https://www.drupal.org/project/webform/issues/3232756
+    if ($this->moduleHandler->moduleExists('swiftmailer')
+      || $this->moduleHandler->moduleExists('mimemail')) {
+      foreach ($attachments as &$attachment) {
+        if (isset($attachment['filecontent']) && isset($attachment['filepath'])) {
+          unset($attachment['filepath']);
+        }
+      }
+    }
+
     return $attachments;
   }
 
@@ -1114,6 +1128,34 @@ public function sendMessage(WebformSubmissionInterface $webform_submission, arra
 
     $current_langcode = $this->languageManager->getCurrentLanguage()->getId();
 
+    // @todo [Drupal 9.x] Remove below class exists check.
+    // Issue #84883: Unicode::mimeHeaderEncode() doesn't correctly
+    // follow RFC 2047.
+    // @see https://www.drupal.org/project/drupal/issues/84883
+    // Don't send the message if the From address is not valid.
+    if (class_exists('\Symfony\Component\Mime\Address')) {
+      try {
+        \Symfony\Component\Mime\Address::create($from);
+      }
+      catch (\Exception $exception) {
+        if ($this->configuration['debug']) {
+          $t_args = [
+            '%form' => $this->getWebform()->label(),
+            '%handler' => $this->label(),
+            '%from_email' => $from,
+          ];
+          $this->messenger()->addWarning($this->t('%form: Email not sent for %handler handler because the <em>From</em> email (%from_email) is not valid.', $t_args), TRUE);
+        }
+        $context = [
+          '@form' => $this->getWebform()->label(),
+          '@handler' => $this->label(),
+          '@from_email' => $from,
+        ];
+        $this->getLogger('webform_submission')->error("@form: Email not sent for '@handler' handler because the 'From' email (@from_email) is not valid.", $context);
+        return;
+      }
+    }
+
     // Don't send the message if To, CC, and BCC is empty.
     if (!$this->hasRecipient($webform_submission, $message)) {
       if ($this->configuration['debug']) {
diff --git a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
index b2deb7b0b12617e0e439e185c6854356871dd4ec..ec4ad2496082c198a4fe9a68968a869e5ff8b313 100644
--- a/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
+++ b/web/modules/webform/src/Plugin/WebformHandler/RemotePostWebformHandler.php
@@ -154,6 +154,7 @@ public function defaultConfiguration() {
       'excluded_data' => $excluded_data,
       'custom_data' => '',
       'custom_options' => '',
+      'file_data' => TRUE,
       'cast' => FALSE,
       'debug' => FALSE,
       // States.
@@ -294,6 +295,14 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       ],
       '#default_value' => $this->configuration['type'],
     ];
+    $form['additional']['file_data'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Include files as Base64 encoded post data'),
+      '#description' => $this->t('If checked, uploaded and attached file data will be included using Base64 encoding.'),
+      '#return_value' => TRUE,
+      '#default_value' => $this->configuration['file_data'],
+      '#access' => $this->getWebform()->hasAttachments(),
+    ];
     $form['additional']['cast'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Cast posted element value and custom data'),
@@ -403,6 +412,24 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#message_close' => TRUE,
         '#message_id' => 'webform_node.references',
         '#message_storage' => WebformMessage::STORAGE_SESSION,
+        '#states' => [
+          'visible' => [
+            ':input[name="settings[file_data]"]' => ['checked' => TRUE],
+          ],
+        ],
+      ];
+      $form['submission_data']['managed_file_message_no_data'] = [
+        '#type' => 'webform_message',
+        '#message_message' => $this->t('Upload files will include the file\'s id, name and uri.'),
+        '#message_type' => 'warning',
+        '#message_close' => TRUE,
+        '#message_id' => 'webform_node.references',
+        '#message_storage' => WebformMessage::STORAGE_SESSION,
+        '#states' => [
+          'visible' => [
+            ':input[name="settings[file_data]"]' => ['checked' => FALSE],
+          ],
+        ],
       ];
     }
     $form['submission_data']['excluded_data'] = [
@@ -753,7 +780,9 @@ protected function getRequestFileData($fid, $prefix = '') {
     $data[$prefix . 'uri'] = $file->getFileUri();
     $data[$prefix . 'mime'] = $file->getMimeType();
     $data[$prefix . 'uuid'] = $file->uuid();
-    $data[$prefix . 'data'] = base64_encode(file_get_contents($file->getFileUri()));
+    if ($this->configuration['file_data']) {
+      $data[$prefix . 'data'] = base64_encode(file_get_contents($file->getFileUri()));
+    }
     return $data;
   }
 
diff --git a/web/modules/webform/src/Twig/WebformTwigExtension.php b/web/modules/webform/src/Twig/WebformTwigExtension.php
index c797fa01c3830542b3c5f436384898fba30d2ee4..63a17819629efcb1f8b26884e07a1e51b589e6cd 100644
--- a/web/modules/webform/src/Twig/WebformTwigExtension.php
+++ b/web/modules/webform/src/Twig/WebformTwigExtension.php
@@ -99,7 +99,9 @@ public function webformDebug($data) {
    *
    * @see \Drupal\Core\Utility\Token::replace
    */
-  public function webformToken($token, EntityInterface $entity = NULL, array $data = [], array $options = []) {
+  public function webformToken($token, EntityInterface $entity = NULL, array $data = [], array $options = NULL) {
+    $options = $options ?: [];
+
     // Allow the webform_token function to be tested during validation without
     // a valid entity.
     if (!$entity) {
diff --git a/web/modules/webform/src/Utility/WebformDateHelper.php b/web/modules/webform/src/Utility/WebformDateHelper.php
index 65c32cf23ba3bfaa34f7b1303a28841a09180fff..593c26ebdd4df7ad89daf187af6ce29795777807 100644
--- a/web/modules/webform/src/Utility/WebformDateHelper.php
+++ b/web/modules/webform/src/Utility/WebformDateHelper.php
@@ -51,7 +51,7 @@ class WebformDateHelper {
    *
    * @see \Drupal\Core\Datetime\DateFormatterInterface::format
    */
-  public static function format($timestamp, $type = 'fallback', $format = '', $timezone = NULL, $langcode = NULL) {
+  public static function format($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) {
     /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
     $date_formatter = \Drupal::service('date.formatter');
     return $timestamp ? $date_formatter->format($timestamp, $type, $format, $timezone, $langcode) : '';
diff --git a/web/modules/webform/src/Utility/WebformElementHelper.php b/web/modules/webform/src/Utility/WebformElementHelper.php
index 536248752b461de33db5ef57f0ee1a12f480ba8d..8389fe8caa7ea68394d7dfc52d28a9ed4b54cd35 100644
--- a/web/modules/webform/src/Utility/WebformElementHelper.php
+++ b/web/modules/webform/src/Utility/WebformElementHelper.php
@@ -613,7 +613,7 @@ public static function &getElement(array &$elements, $name) {
         return $elements[$element_name];
       }
       elseif (is_array($elements[$element_name])) {
-        $child_elements =& $elements[$element_name];
+        $child_elements = &$elements[$element_name];
         if ($element = &static::getElement($child_elements, $name)) {
           return $element;
         }
diff --git a/web/modules/webform/src/WebformAddonsManager.php b/web/modules/webform/src/WebformAddonsManager.php
index 875dafa46c6a10c43159de3fc84ce9f323f71559..7a0a0cbc158ff2b19df708d36d9ca05793c7f147 100644
--- a/web/modules/webform/src/WebformAddonsManager.php
+++ b/web/modules/webform/src/WebformAddonsManager.php
@@ -269,6 +269,14 @@ protected function initProjects() {
       'category' => 'element',
     ];
 
+    // Element: Webform Javascript Field.
+    $projects['webform_javascript_field'] = [
+      'title' => $this->t('Webform Javascript Field'),
+      'description' => $this->t('Provides ability to specify JavaScript snippet for Webform components.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_javascript_field'),
+      'category' => 'element',
+    ];
+
     // Element: Webform Layout Container.
     $projects['webform_layout_container'] = [
       'title' => $this->t('Webform Layout Container'),
@@ -481,6 +489,15 @@ protected function initProjects() {
       'category' => 'enhancement',
     ];
 
+
+    // Enhancement: Webform GeoIP Restriction.
+    $projects['webform_geoip_restriction'] = [
+      'title' => $this->t('Webform GeoIP Restriction'),
+      'description' => $this->t('Adds the possibility of restricting access to webforms by country using the geoip system.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_geoip_restriction'),
+      'category' => 'enhancement',
+    ];
+
     // Enhancement: Webform IP Geo.
     $projects['webform_ip_geo'] = [
       'title' => $this->t('Webform IP Geo'),
@@ -690,6 +707,14 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integrations: (Google) Datalayer Webform.
+    $projects['datalayer_webform'] = [
+      'title' => $this->t('(Google) Datalayer Webform'),
+      'description' => $this->t('Send datalayer events on Webform submission.'),
+      'url' => Url::fromUri('https://www.drupal.org/sandbox/mistermoper/3199908'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Group Webform.
     $projects['group_webform'] = [
       'title' => $this->t('Group Webform'),
@@ -1013,10 +1038,18 @@ protected function initProjects() {
       'category' => 'integration',
     ];
 
+    // Integrations: OS Tickets Webform Handler.
+    $projects['ostickets'] = [
+      'title' => $this->t('OS Tickets Webform Handler'),
+      'description' => $this->t('Provides a webform handler that will POST OS tickets on submissions.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/ostickets'),
+      'category' => 'integration',
+    ];
+
     // Integrations: Webform Pardot.
     $projects['webform_pardot'] = [
       'title' => $this->t('Webform Pardot'),
-      'description' => $this->t('Links commerce products to webform elements.'),
+      'description' => $this->t('Provides a webform handler for posting submissions to Pardot.'),
       'url' => Url::fromUri('https://www.drupal.org/project/webform_pardot'),
       'category' => 'integration',
     ];
@@ -1024,7 +1057,7 @@ protected function initProjects() {
     // Integrations: Webform Product.
     $projects['webform_product'] = [
       'title' => $this->t('Webform Product'),
-      'description' => $this->t('Provides a webform handler for posting submissions to Pardot.'),
+      'description' => $this->t('Links commerce products to webform elements.'),
       'url' => Url::fromUri('https://github.com/chx/webform_product'),
       'category' => 'integration',
     ];
@@ -1466,6 +1499,14 @@ protected function initProjects() {
       'category' => 'submission',
     ];
 
+    // Submissions: Webform Submission Anonymisation.
+    $projects['webform_submission_anonymisation'] = [
+      'title' => $this->t('Webform Submission Anonymisation'),
+      'description' => $this->t('Remove personal datas from webform submissions.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_submission_anonymisation'),
+      'category' => 'submission',
+    ];
+
     // Submissions: Webform Submission Change History.
     $projects['webform_submission_change_history'] = [
       'title' => $this->t('Webform Submission Change History'),
@@ -1663,6 +1704,14 @@ protected function initProjects() {
     // Web services.
     /**************************************************************************/
 
+    // Web services: Decoupled Kit.
+    $projects['decoupled_kit'] = [
+      'title' => $this->t('Decoupled Kit'),
+      'description' => $this->t('allows to solve some tasks of the decoupled Drupal.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/decoupled_kit'),
+      'category' => 'web_services',
+    ];
+
     // Web services: Gatsby Drupal Webform.
     $projects['gatsby_drupal_webform'] = [
       'title' => $this->t('Gatsby Drupal Webform'),
@@ -1705,7 +1754,6 @@ protected function initProjects() {
       'description' => $this->t('Provide revisions and moderation for Webforms.'),
       'url' => Url::fromUri('https://www.drupal.org/project/config_entity_revisions'),
       'category' => 'workflow',
-      'recommended' => TRUE,
     ];
 
     // Workflow: Maestro.
@@ -1714,7 +1762,6 @@ protected function initProjects() {
       'description' => $this->t('A business process workflow solution that allows you to create and automate a sequence of tasks representing any business, document approval or collaboration process.'),
       'url' => Url::fromUri('https://www.drupal.org/project/maestro'),
       'category' => 'workflow',
-      'recommended' => TRUE,
     ];
 
     // Workflow: Workflows Field.
@@ -1723,9 +1770,17 @@ protected function initProjects() {
       'description' => $this->t('A business process workflow solution that allows you to create and automate a sequence of tasks representing any business, document approval or collaboration process.'),
       'url' => Url::fromUri('https://www.drupal.org/project/workflows_field'),
       'category' => 'workflow',
-      'recommended' => TRUE,
     ];
 
+    // Workflow: Webform Workflows Element.
+    $projects['webform_workflows_element'] = [
+      'title' => $this->t('Webform Workflows Element'),
+      'description' => $this->t('provides a new element type for Webforms (D8+) that uses the core Workflows functionality to move submissions through a webform.'),
+      'url' => Url::fromUri('https://www.drupal.org/project/webform_workflows_element'),
+      'category' => 'workflow',
+    ];
+
+
     /**************************************************************************/
     // Development.
     /**************************************************************************/
diff --git a/web/modules/webform/src/WebformEntityDeleteForm.php b/web/modules/webform/src/WebformEntityDeleteForm.php
index 3f07353eeb681dbd8af3520c91c0eb0b0403cef3..10f5dc818eb98a0d9f80ebfa20f9ac7cd95b2384 100644
--- a/web/modules/webform/src/WebformEntityDeleteForm.php
+++ b/web/modules/webform/src/WebformEntityDeleteForm.php
@@ -13,6 +13,7 @@ class WebformEntityDeleteForm extends WebformConfigEntityDeleteFormBase {
    * {@inheritdoc}
    */
   public function getDescription() {
+    // @see \Drupal\webform\Form\WebformEntityDeleteMultipleForm::getDescription
     return [
       'title' => [
         '#markup' => $this->t('This action will…'),
diff --git a/web/modules/webform/src/WebformEntityListBuilder.php b/web/modules/webform/src/WebformEntityListBuilder.php
index d92062c786484f6af01384da12eb666cb57a5f2b..e8b69e5e9f7daee1c52dda6d41dc348ad4d31803 100644
--- a/web/modules/webform/src/WebformEntityListBuilder.php
+++ b/web/modules/webform/src/WebformEntityListBuilder.php
@@ -63,6 +63,13 @@ class WebformEntityListBuilder extends ConfigEntityListBuilder {
    */
   protected $state;
 
+  /**
+   * Bulk operations.
+   *
+   * @var bool
+   */
+  protected $bulkOperations;
+
   /**
    * {@inheritdoc}
    */
@@ -85,9 +92,12 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
   protected function initialize() {
     $query = $this->request->query;
     $config = $this->configFactory->get('webform.settings');
+
     $this->keys = ($query->has('search')) ? $query->get('search') : '';
     $this->category = ($query->has('category')) ? $query->get('category') : $config->get('form.filter_category');
     $this->state = ($query->has('state')) ? $query->get('state') : $config->get('form.filter_state');
+    $this->bulkOperations = $config->get('settings.webform_bulk_form') ?: FALSE;
+    $this->limit = $config->get('form.limit') ?: 50;
   }
 
   /**
@@ -114,6 +124,11 @@ public function render() {
     $build['table']['#sticky'] = TRUE;
     $build['table']['#attributes']['class'][] = 'webform-forms';
 
+    // Bulk operations.
+    if ($this->bulkOperations && $this->currentUser->hasPermission('administer webform')) {
+      $build['table'] = \Drupal::formBuilder()->getForm('\Drupal\webform\Form\WebformEntityBulkForm', $build['table']);
+    }
+
     // Attachments.
     // Must preload libraries required by (modal) dialogs.
     WebformDialogHelper::attachLibraries($build);
@@ -208,7 +223,7 @@ public function buildHeader() {
       'specifier' => 'status',
       'field' => 'status',
     ];
-    $header['author'] = [
+    $header['owner'] = [
       'data' => $this->t('Author'),
       'class' => [RESPONSIVE_PRIORITY_LOW],
       'specifier' => 'uid',
@@ -301,10 +316,12 @@ public function buildRow(EntityInterface $entity) {
 
     // Results.
     $result_total = $this->storage->getTotalNumberOfResults($entity->id());
-    $results_access = $entity->access('submission_view_any');
     $results_disabled = $entity->isResultsDisabled();
+    $results_access = $entity->access('submission_view_any');
     if ($results_disabled || !$results_access) {
-      $row['results'] = $result_total . ($entity->isResultsDisabled() ? ' ' . $this->t('(Disabled)') : '');
+      $row['results'] = ($result_total ? $result_total : '')
+        . ($result_total && $results_disabled ? ' ' : '')
+        . ($results_disabled ? $this->t('(Disabled)') : '');
     }
     else {
       $row['results'] = [
@@ -315,7 +332,6 @@ public function buildRow(EntityInterface $entity) {
             'aria-label' => $this->formatPlural($result_total, '@count result for @label', '@count results for @label', ['@label' => $entity->label()]),
           ],
           '#url' => $entity->toUrl('results-submissions'),
-          '#suffix' => ($entity->isResultsDisabled() ? ' ' . $this->t('(Disabled)') : ''),
         ],
       ];
     }
diff --git a/web/modules/webform/src/WebformHelpManager.php b/web/modules/webform/src/WebformHelpManager.php
index 5fdeaf0f3380d3ae4b246aa8fc53af4fe9ff28d7..30682971a0d9029290f767c1d8ff755b589b101d 100644
--- a/web/modules/webform/src/WebformHelpManager.php
+++ b/web/modules/webform/src/WebformHelpManager.php
@@ -1782,6 +1782,10 @@ protected function initHelp() {
         $t_args[$command_name] = str_replace('-', ':', $command);
       }
     }
+    $t_args += [
+      ':href_5x' => 'https://git.drupalcode.org/sandbox/jrockowitz-2941983/-/raw/8.x-5.x/libraries.zip',
+      ':href_6x' => 'https://git.drupalcode.org/sandbox/jrockowitz-2941983/-/raw/6.x/libraries.zip',
+    ];
     $help['config_libraries_help'] = [
       'group' => 'configuration',
       'title' => $this->t('Configuration: Libraries: Help'),
@@ -1793,14 +1797,14 @@ protected function initHelp() {
         '<p>' . $this->t('There are several ways to download the needed third-party libraries.') . '</p>' .
         '<p><strong>' . $this->t('Recommended') . '</strong></p>' .
         '<ul>' .
-        '<li>' . $this->t('Use the <a href="https://github.com/wikimedia/composer-merge-plugin">Composer Merge plugin</a> to include the Webform module\'s <a href="https://cgit.drupalcode.org/webform/tree/composer.libraries.json">composer.libraries.json</a> or generate a custom file using <code>drush @webform-libraries-composer &gt; DRUPAL_ROOT/composer.libraries.json</code>.', $t_args) . '<br/><strong>' . t('<a href="https://www.drupal.org/node/3003140">Learn more &raquo;</a>') . '</strong>'. '</li>' .
+        '<li>' . $this->t('Use the <a href="https://github.com/wikimedia/composer-merge-plugin">Composer Merge plugin</a> to include the Webform module\'s <a href="https://cgit.drupalcode.org/webform/tree/composer.libraries.json">composer.libraries.json</a> or generate a custom file using <code>drush @webform-libraries-composer &gt; DRUPAL_ROOT/composer.libraries.json</code>.', $t_args) . '<br/><strong>' . $this->t('<a href="https://www.drupal.org/node/3003140">Learn more &raquo;</a>') . '</strong>'. '</li>' .
         '</ul>' .
         '<p><strong>' . $this->t('Alternatives') . '</strong></p>' .
         '<ul>' .
         '<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>' .
+        '<li>' . $this->t('Download and extract a zipped archive containing all webform libraries (<a href=":href_5x">8.x-5.x</a> and <a href=":href_6x">6.x</a>) and extract the directories and files to /libraries or /web/libraries', $t_args) . '</li>' .
         '</ul>',
       'message_type' => 'info',
       'message_close' => TRUE,
diff --git a/web/modules/webform/src/WebformLibrariesManager.php b/web/modules/webform/src/WebformLibrariesManager.php
index 086ba4871dc95855552772e82897f65c20828160..83f7ecc4af8f23408c6d30a2da37fad5a2e35b49 100644
--- a/web/modules/webform/src/WebformLibrariesManager.php
+++ b/web/modules/webform/src/WebformLibrariesManager.php
@@ -118,8 +118,8 @@ public function requirements($cli = FALSE) {
         continue;
       }
 
-      $library_exists = $this->exists($library_name);
-      $library_path = ($library_exists) ? '/' . $this->find($library_name) : '/libraries/' . $library_name;
+      $library_exists = $this->exists($library['name']);
+      $library_path = ($library_exists) ? '/' . $this->find($library['name']) : '/libraries/' . $library['name'];
 
       $t_args = [
         '@title' => $library['title'],
@@ -152,7 +152,7 @@ public function requirements($cli = FALSE) {
         $stats['@missing']++;
         $title = $this->t('<span class="color-warning"><strong>@title @version</strong> (CDN).</span>', $t_args);
         $description = $this->t('Please download the <a href=":homepage_href">@title</a> library from <a href=":download_href">:download_href</a> and copy it to <b>@path</b> or use <a href=":install_href">Drush</a> to install this library.', $t_args);
-        $severity = REQUIREMENT_WARNING;
+        $severity = REQUIREMENT_ERROR;
       }
       else {
         // CDN.
@@ -191,12 +191,15 @@ public function requirements($cli = FALSE) {
     }
 
     // Description.
-    $description = [
-      'info' => $info,
-    ];
-    if (!$cli && $severity === REQUIREMENT_WARNING) {
-      $description['cdn'] = ['#markup' => $this->t('<a href=":href">Disable CDN warning</a>', [':href' => Url::fromRoute('webform.config.advanced')->toString()])];
+    $description = [];
+    if (!$cli && $severity === REQUIREMENT_ERROR) {
+      $description['cdn'] = [
+        '#markup' => '<hr/>' .
+          $this->t('Relying on a CDN for external libraries can cause unexpected issues with Ajax and BigPipe support. For more information see: <a href=":href">Issue #1988968</a>', [':href' => 'https://www.drupal.org/project/drupal/issues/1988968']) . '<br/>' .
+          $this->t('<a href=":href">Disable CDN warning</a>', [':href' => Url::fromRoute('webform.config.advanced')->toString()]),
+      ];
     }
+    $description['info'] = $info;
 
     return [
       'webform_libraries' => [
@@ -546,19 +549,22 @@ protected function initLibraries() {
     // Sort libraries by key.
     ksort($libraries);
 
-    // Map ckeditor plugin libraries and support CKEditor plugins without
-    // the ckeditor.* prefix.
+    // Update ckeditor plugin libraries to support CKEditor plugins installed
+    // without the ckeditor.* prefix.
     // @see https://www.drupal.org/project/fakeobjects
     // @see https://www.drupal.org/project/anchor_link
     foreach ($libraries as $library_name => $library) {
+      // Add name to all libraries, so that it can be modified if a ckeditor
+      // plugin is installed without the ckeditor.* prefix.
+      $libraries[$library_name]['name'] = $library_name;
       if (strpos($library_name, 'ckeditor.') === 0) {
-        $library_path = $this->find($library_name)
-          ?: $this->find(str_replace('ckeditor.', '', $library_name));
+        $ckeditor_library_name = str_replace('ckeditor.', '', $library_name);
+        $library_path = $this->find($ckeditor_library_name);
         if ($library_path) {
+          $libraries[$library_name]['name'] = $ckeditor_library_name;
           $libraries[$library_name]['plugin_path'] = str_replace('libraries/' . $library_name, $library_path, $library['plugin_path']);
         }
       }
-
     }
 
     // Move deprecated libraries last.
diff --git a/web/modules/webform/src/WebformSubmissionConditionsValidator.php b/web/modules/webform/src/WebformSubmissionConditionsValidator.php
index 658bb9293b141dc6bc577802859d40d35197c146..6291254de132a67c94349bb0b5c60c0d63e55bb5 100644
--- a/web/modules/webform/src/WebformSubmissionConditionsValidator.php
+++ b/web/modules/webform/src/WebformSubmissionConditionsValidator.php
@@ -111,7 +111,7 @@ public function buildForm(array &$form, FormStateInterface $form_state) {
         }
 
         // Process state/negate.
-        list($state, $negate) = $this->processState($original_state);
+        [$state, $negate] = $this->processState($original_state);
 
         // If hide/show we need to make sure that validation is not triggered.
         if (strpos($state, 'visible') === 0) {
@@ -300,6 +300,7 @@ public function replaceCrossPageTargets(array $conditions, WebformSubmissionInte
    * @see \Drupal\webform\WebformSubmissionForm::validateForm
    */
   public function validateForm(array &$form, FormStateInterface $form_state) {
+    $this->processForm($form, $form_state);
     $this->validateFormRecursive($form, $form_state);
   }
 
@@ -383,13 +384,29 @@ protected function validateFormElement(array $element, FormStateInterface $form_
   }
 
   /****************************************************************************/
-  // Submit form methods.
+  // Submit form method.
   /****************************************************************************/
 
   /**
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
+    $this->processForm($form, $form_state);
+  }
+
+  /****************************************************************************/
+  // Process form methods.
+  /****************************************************************************/
+
+  /**
+   * Process form and unset submission data for form elements that are hidden.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  protected function processForm(array &$form, FormStateInterface $form_state) {
     /** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
     $webform_submission = $form_state->getFormObject()->getEntity();
 
@@ -403,7 +420,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
     // Recursive through the form and unset unset submission data for
     // form elements that are hidden.
-    $this->submitFormRecursive($form, $webform_submission, $data, $check_access);
+    $this->processFormRecursive($form, $webform_submission, $data, $check_access);
 
     // Set submission data.
     $webform_submission->setData($data);
@@ -424,7 +441,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
    * @param bool $visible
    *   Flag that determine if the currrent form elements are visible.
    */
-  protected function submitFormRecursive(array $elements, WebformSubmissionInterface $webform_submission, array &$data, $check_access, $visible = TRUE) {
+  protected function processFormRecursive(array $elements, WebformSubmissionInterface $webform_submission, array &$data, $check_access, $visible = TRUE) {
     foreach ($elements as $key => &$element) {
       if (!WebformElementHelper::isElement($element, $key)) {
         continue;
@@ -449,7 +466,7 @@ protected function submitFormRecursive(array $elements, WebformSubmissionInterfa
         $data[$key] = (is_array($data[$key])) ? [] : '';
       }
 
-      $this->submitFormRecursive($element, $webform_submission, $data, $check_access, $element_visible);
+      $this->processFormRecursive($element, $webform_submission, $data, $check_access, $element_visible);
     }
   }
 
@@ -506,7 +523,7 @@ public function isElementVisible(array $element, WebformSubmissionInterface $web
       }
 
       // Process state/negate.
-      list($state, $negate) = $this->processState($state);
+      [$state, $negate] = $this->processState($state);
 
       $result = $this->validateConditions($conditions, $webform_submission);
       // Skip invalid conditions.
@@ -539,7 +556,7 @@ public function isElementEnabled(array $element, WebformSubmissionInterface $web
       }
 
       // Process state/negate.
-      list($state, $negate) = $this->processState($state);
+      [$state, $negate] = $this->processState($state);
 
       $result = $this->validateConditions($conditions, $webform_submission);
       // Skip invalid conditions.
@@ -568,7 +585,7 @@ public function isElementEnabled(array $element, WebformSubmissionInterface $web
    */
   public function validateState($state, array $conditions, WebformSubmissionInterface $webform_submission) {
     // Process state/negate.
-    list($state, $negate) = $this->processState($state);
+    [$state, $negate] = $this->processState($state);
 
     // Validation conditions.
     $result = $this->validateConditions($conditions, $webform_submission);
@@ -751,7 +768,7 @@ protected function checkCondition(array $element, $selector, array $condition, W
     }
 
     // Process trigger state/negate.
-    list($trigger, $trigger_negate) = $this->processState($trigger);
+    [$trigger, $trigger_negate] = $this->processState($trigger);
 
     // Process triggers (aka remote conditions).
     // @see \Drupal\webform\Element\WebformElementStates::processWebformStates
@@ -833,7 +850,7 @@ protected function checkConditionTrigger($trigger, $trigger_value, $element_valu
           $greater = $trigger_value;
         }
         else {
-          list($greater, $less) = explode(':', $trigger_value);
+          [$greater, $less] = explode(':', $trigger_value);
         }
         $is_greater_than = ($greater === NULL || $greater === '' || floatval($element_value) >= floatval($greater));
         $is_less_than = ($less === NULL || $less === '' || floatval($element_value) <= floatval($less));
@@ -888,10 +905,10 @@ protected function processState($state) {
    */
   protected function &getBuildElements(array &$form) {
     if (isset($form['#webform_id']) && isset($form['elements'])) {
-      $form_elements =& $form['elements'];
+      $form_elements = &$form['elements'];
     }
     else {
-      $form_elements =& $form;
+      $form_elements = &$form;
     }
 
     $elements = [];
diff --git a/web/modules/webform/src/WebformSubmissionExporter.php b/web/modules/webform/src/WebformSubmissionExporter.php
index df7ebc764d73d90d2bb005e7c60e86e7927efd34..9a3c9d5d5d5d7fde4624c824ffc3de6c6be74902 100644
--- a/web/modules/webform/src/WebformSubmissionExporter.php
+++ b/web/modules/webform/src/WebformSubmissionExporter.php
@@ -273,6 +273,7 @@ public function getDefaultExportOptions() {
       'range_latest' => '',
       'range_start' => '',
       'range_end' => '',
+      'uid' => '',
       'order' => 'asc',
       'state' => 'all',
       'locked' => '',
@@ -595,6 +596,7 @@ public function buildExportOptionsForm(array &$form, FormStateInterface $form_st
         '#options' => [
           'all' => $this->t('All'),
           'latest' => $this->t('Latest'),
+          'uid' => $this->t('Submitted by'),
           'serial' => $this->t('Submission number'),
           'sid' => $this->t('Submission ID'),
           'date' => $this->t('Created date'),
@@ -618,6 +620,26 @@ public function buildExportOptionsForm(array &$form, FormStateInterface $form_st
           '#default_value' => $export_options['range_latest'],
         ],
       ];
+      $form['export']['download']['submitted_by'] = [
+        '#type' => 'container',
+        '#attributes' => ['class' => ['container-inline']],
+        '#states' => [
+          'visible' => [
+            ':input[name="range_type"]' => ['value' => 'uid'],
+          ],
+        ],
+        'uid' => [
+          '#type' => 'entity_autocomplete',
+          '#title' => $this->t('User'),
+          '#target_type' => 'user',
+          '#default_value' => $export_options['uid'],
+          '#states' => [
+            'visible' => [
+              ':input[name="range_type"]' => ['value' => 'uid'],
+            ],
+          ],
+        ],
+      ];
       $ranges = [
         'serial' => ['#type' => 'number'],
         'sid' => ['#type' => 'number'],
@@ -929,6 +951,11 @@ public function getQuery() {
         break;
     }
 
+    // Filter by UID.
+    if ($export_options['uid'] !== '') {
+      $query->condition('uid', $export_options['uid'], '=');
+    }
+
     // Filter by (completion) state.
     switch ($export_options['state']) {
       case 'draft':
diff --git a/web/modules/webform/src/WebformSubmissionForm.php b/web/modules/webform/src/WebformSubmissionForm.php
index 5e8f03606d99ac299d6a5cb1809e03190d5cbc89..d608e704644bc3cd52686de90e4e386f797033e3 100644
--- a/web/modules/webform/src/WebformSubmissionForm.php
+++ b/web/modules/webform/src/WebformSubmissionForm.php
@@ -9,6 +9,8 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\ContentEntityForm;
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Form\FormBuilderInterface;
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Messenger\MessengerInterface;
@@ -478,6 +480,24 @@ protected function overrideSettings(WebformSubmissionInterface $webform_submissi
     if ($this->isSharePage() && !$webform->getSetting('ajax', TRUE)) {
       $webform->setSettingOverride('ajax', TRUE);
     }
+
+    // Apply source entity open/close state to the webform before
+    // it is rendered.
+    $source_entity = $webform_submission->getSourceEntity();
+    if ($webform->isOpen() && $source_entity && $source_entity instanceof FieldableEntityInterface) {
+      foreach ($source_entity->getFieldDefinitions() as $fieldName => $fieldDefinition) {
+        if ($fieldDefinition->getType() === 'webform') {
+          $item = $source_entity->get($fieldName);
+          if ($item->target_id === $webform->id()) {
+            $webform
+              ->setOverride()
+              ->set('open', $item->open)
+              ->set('close', $item->close)
+              ->setStatus($item->status);
+          }
+        }
+      }
+    }
   }
 
   /**
@@ -627,6 +647,18 @@ public function form(array $form, FormStateInterface $form_state) {
     // Add a reference to the webform's id to the $form render array.
     $form['#webform_id'] = $webform->id();
 
+    // Move form settings to properties.
+    $settings_to_properties = [
+      'form_method' => '#method',
+      'form_action' => '#action',
+      'form_attributes' => '#attributes',
+    ];
+    foreach ($settings_to_properties as $setting_name => $property_name) {
+      if ($this->getWebformSetting($setting_name)) {
+        $form[$property_name] = $this->getWebformSetting($setting_name);
+      }
+    }
+
     // Track current page name or index by setting the
     // "data-webform-wizard-page"
     // attribute which is used Drupal.behaviors.webformWizardTrackPage.
@@ -673,7 +705,9 @@ public function form(array $form, FormStateInterface $form_state) {
       $class[] = "webform-submission-$webform_id-$source_entity_type-$source_entity_id-$operation-form";
     }
     array_walk($class, ['\Drupal\Component\Utility\Html', 'getClass']);
-    $form['#attributes']['class'] = $class;
+    $form += ['#attributes' => []];
+    $form['#attributes'] += ['class' => []];
+    $form['#attributes']['class'] = array_merge($class, $form['#attributes']['class']);
 
     // Get last class, which is the most specific, as #states prefix.
     // @see \Drupal\webform\WebformSubmissionForm::addStatesPrefix
@@ -1014,7 +1048,7 @@ protected function displayMessages(array $form, FormStateInterface $form_state)
       && $this->operation === 'add'
       && $this->getWebformSetting('draft') !== WebformInterface::DRAFT_NONE
       && $this->getWebformSetting('draft_multiple', FALSE)
-      && ($previous_draft_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser(), ['in_draft' => TRUE]))
+      && ($previous_draft_total = $this->getStorage()->getTotal($webform, $this->sourceEntity, $this->currentUser(), ['in_draft' => TRUE, 'check_source_entity' => TRUE]))
     ) {
       if ($previous_draft_total > 1) {
         $this->getMessageManager()->display(WebformMessageManagerInterface::DRAFT_PENDING_MULTIPLE);
@@ -2057,7 +2091,11 @@ protected function setFormPropertiesFromElements(array &$form, array &$elements)
         else {
           $form[$key] = $value;
         }
-        unset($elements[$key]);
+        // Remove the properties from the $elements and $form['elements'] array.
+        unset(
+          $elements[$key],
+          $form['elements'][$key]
+        );
       }
     }
     // Replace token in #attributes.
@@ -2239,7 +2277,7 @@ protected function displayCurrentPage(array &$form, FormStateInterface $form_sta
       $pages = $this->getWebform()->getPages($this->operation);
       foreach ($pages as $page_key => $page) {
         if (isset($form['elements'][$page_key])) {
-          $page_element =& $form['elements'][$page_key];
+          $page_element = &$form['elements'][$page_key];
           $page_element_plugin = $this->elementManager->getElementInstance($page_element);
           if ($page_element_plugin instanceof WebformElementWizardPageInterface) {
             if ($page_key != $current_page) {
@@ -2320,7 +2358,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);
-        $this->setTrustedRedirectUrl($form_state, $redirect_url);
+        $form_state->setRedirectUrl($redirect_url);
         return;
 
       case WebformInterface::CONFIRMATION_URL:
diff --git a/web/modules/webform/src/WebformSubmissionListBuilder.php b/web/modules/webform/src/WebformSubmissionListBuilder.php
index 9ec25a867569c93581b97eca110ec51699d3054c..2cf427da6dffed16c7fcb397a20f5b569e662425 100644
--- a/web/modules/webform/src/WebformSubmissionListBuilder.php
+++ b/web/modules/webform/src/WebformSubmissionListBuilder.php
@@ -547,7 +547,7 @@ protected function buildEntityList() {
 
     // Customize buttons.
     if ($this->customize) {
-      $build['custom_top'] = $this->buildCustomizeButton();
+      $build['customize'] = $this->buildCustomizeButton();
     }
 
     // Display info.
@@ -560,15 +560,16 @@ protected function buildEntityList() {
     $build['table']['#sticky'] = TRUE;
     $build['table']['#attributes']['class'][] = 'webform-results-table';
 
-    // Customize.
-    // Only displayed when more than 20 submissions are being displayed.
-    if ($this->customize && isset($build['table']['#rows']) && count($build['table']['#rows']) >= 20) {
-      $build['custom_bottom'] = $this->buildCustomizeButton();
-      if (isset($build['pager'])) {
-        $build['pager']['#weight'] = 10;
-      }
+    // Bulk operations only visible on webform submissions pages.
+    $webform_submission_bulk_form = $this->configFactory->get('webform.settings')->get('settings.webform_submission_bulk_form');
+    if ($webform_submission_bulk_form
+      && !$this->account
+      && $this->webform
+      && $this->webform->access('submission_update_any')) {
+        $build['table'] = \Drupal::formBuilder()->getForm('\Drupal\webform\Form\WebformSubmissionBulkForm', $build['table'], $this->webform->access('submission_delete_any'));
     }
 
+    // Must preload libraries required by (modal) dialogs.
     // Must preload libraries required by (modal) dialogs.
     WebformDialogHelper::attachLibraries($build);
 
diff --git a/web/modules/webform/src/WebformSubmissionStorage.php b/web/modules/webform/src/WebformSubmissionStorage.php
index 0b380aef4a6cd9f600403852d7932ce9b3de7331..45e23677e371331c740c1f009a8f9aa7dd5a73fe 100644
--- a/web/modules/webform/src/WebformSubmissionStorage.php
+++ b/web/modules/webform/src/WebformSubmissionStorage.php
@@ -548,6 +548,7 @@ public function getSourceEntityAsOptions(WebformInterface $webform, $entity_type
   protected function getTerminusSubmission(WebformInterface $webform, EntityInterface $source_entity = NULL, AccountInterface $account = NULL, array $options = [], $terminus = 'first') {
     $options += ['in_draft' => FALSE];
     $query = $this->getQuery();
+    $query->accessCheck(TRUE);
     $this->addQueryConditions($query, $webform, $source_entity, $account, $options);
     $query->sort('sid', ($terminus === 'first') ? 'ASC' : 'DESC');
     $query->range(0, 1);
@@ -575,6 +576,7 @@ protected function getSiblingSubmission(WebformSubmissionInterface $webform_subm
     $webform = $webform_submission->getWebform();
 
     $query = $this->getQuery();
+    $query->accessCheck(TRUE);
     $this->addQueryConditions($query, $webform, $source_entity, $account, $options);
 
     if ($direction === 'previous') {
diff --git a/web/modules/webform/src/WebformSubmissionViewsData.php b/web/modules/webform/src/WebformSubmissionViewsData.php
index 267e3682b6b8deeba4adad6cac946e181e81b0b8..baa950f252b7a18517fc15e975900fce887e7444 100644
--- a/web/modules/webform/src/WebformSubmissionViewsData.php
+++ b/web/modules/webform/src/WebformSubmissionViewsData.php
@@ -15,7 +15,9 @@ class WebformSubmissionViewsData extends EntityViewsData {
   public function getViewsData() {
     $data = parent::getViewsData();
 
-    $data['webform_submission']['table']['base']['access query tag'] = 'webform_submission_access';
+    // Disable hook_webform_submission_query_access_alter() to remove
+    // performance issues related to loading all webforms.
+    // $data['webform_submission']['table']['base']['access query tag'] = 'webform_submission_access';
 
     $data['webform_submission']['webform_submission_bulk_form'] = [
       'title' => $this->t('Webform submission operations bulk form'),
diff --git a/web/modules/webform/src/WebformTranslationConfigManager.php b/web/modules/webform/src/WebformTranslationConfigManager.php
index 0652a8d42578603c81174d362cafe440c5f460a0..009e496beb17e22ba02a89c845460f4d9ed9b2be 100644
--- a/web/modules/webform/src/WebformTranslationConfigManager.php
+++ b/web/modules/webform/src/WebformTranslationConfigManager.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\webform;
 
+use Drupal\block\Entity\Block;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\TypedConfigManagerInterface;
@@ -109,7 +110,7 @@ public function alterForm(&$form, FormStateInterface $form_state) {
       if ($config_name === 'webform.settings') {
         $this->alterConfigSettingsForm($config_name, $config_element);
       }
-      elseif ($config_name === 'block.block.webform') {
+      elseif (strpos($config_name, 'block.block.') === 0) {
         $this->alterConfigBlockForm($config_name, $config_element);
       }
       elseif (strpos($config_name, 'field.field.') === 0) {
@@ -151,6 +152,11 @@ protected function alterConfigSettingsForm($config_name, array &$config_element)
    *   The webform block configuration element.
    */
   protected function alterConfigBlockForm($config_name, array &$config_element) {
+    $block = Block::load(str_replace('block.block.', '', $config_name));
+    if (!$block || $block->getPluginId() !== 'webform_block') {
+      return;
+    }
+
     $this->alterTypedConfigElements($config_element['settings'], "block.settings.webform_block");
   }
 
@@ -319,7 +325,7 @@ public static function validateWebformForm(&$form, FormStateInterface $form_stat
    *   The current state of the form.
    */
   protected function alterConfigWebformFormHandlers($config_name, &$config_element, &$form, $form_state) {
-    $handlers =& $config_element['handlers'];
+    $handlers = &$config_element['handlers'];
     // Verify if the webform has any handler.
     if(!isset($handlers)){
       return;
@@ -375,7 +381,7 @@ protected function alterConfigWebformFormElements($config_name, &$config_element
     $source_elements = $this->translationManager->getSourceElements($webform);
     $translation_elements = $this->translationManager->getTranslationElements($webform, $translation_langcode);
 
-    $elements =& $config_element['elements'];
+    $elements = &$config_element['elements'];
 
     // Remove the #theme and source properties so that just the
     // translation details element is rendered.
@@ -437,7 +443,7 @@ protected function buildConfigWebformFormElements(array $element, array $transla
       // NOTE: It is possible that all the below code could be moved into
       // the WebformElement plugin but this would create more abstraction.
       // For now, it is easier to keep all the logic in this one class/service.
-      if (is_array($property_value) && !WebformArrayHelper::isMultidimensional($property_value)) {
+      if (is_array($property_value) && !WebformArrayHelper::isMultidimensional($property_value) && !Element::properties($property_value)) {
         // Options.
         $elements[$property_key] = $this->buildConfigWebformFormOptionsPropertyElement(
           $element,
@@ -854,8 +860,8 @@ protected function alterSchemaElementsRecursive(array &$elements, array $schema_
         continue;
       }
 
-      $element =& $elements[$element_key];
-      $schema =& $schema_mapping[$element_key];
+      $element = &$elements[$element_key];
+      $schema = &$schema_mapping[$element_key];
 
       if (isset($schema['type']) && $schema['type'] === 'mapping') {
         $this->alterSchemaElementsRecursive($element, $schema['mapping']);
@@ -926,6 +932,7 @@ protected function alterTextareaElement(array &$element, $mode = 'yaml') {
       '#mode' => $mode,
       '#value' => $source_value,
       '#disabled' => TRUE,
+      '#skip_validation' => TRUE,
       '#attributes' => ['readonly' => TRUE],
     ];
     unset($element['source']['#markup']);
diff --git a/web/modules/webform/src/WebformTranslationManager.php b/web/modules/webform/src/WebformTranslationManager.php
index 01012f91bdd9a5de936bf0b5fe42deb727461eec..26409cea89fb3bea57b605d6c49a51c03baad80a 100644
--- a/web/modules/webform/src/WebformTranslationManager.php
+++ b/web/modules/webform/src/WebformTranslationManager.php
@@ -12,6 +12,7 @@
 use Drupal\webform\Utility\WebformElementHelper;
 use Drupal\webform\Utility\WebformYaml;
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\webform\Plugin\WebformElement\WebformCustomComposite;
 
 /**
  * Defines a class to translate webform elements.
@@ -210,6 +211,7 @@ protected function removeUnTranslatablePropertiesFromElement(array &$element) {
 
     $element_type = (isset($element['#type'])) ? $element['#type'] : NULL;
     $translatable_properties = $this->getTranslatableProperties($element_type);
+    $element_plugin = $this->elementManager->getElementInstance($element);
     foreach ($element as $property_key => $property_value) {
       $translatable_property_key = $property_key;
 
@@ -223,7 +225,7 @@ protected function removeUnTranslatablePropertiesFromElement(array &$element) {
         // Unset options and answers that are webform option ids.
         unset($element[$property_key]);
       }
-      elseif ($translatable_property_key === '#element' && $element_type === 'webform_custom_composite') {
+      elseif ($translatable_property_key === '#element' && $element_plugin instanceof WebformCustomComposite) {
         foreach ($element[$property_key] as &$composite_element_value) {
           $this->removeUnTranslatablePropertiesFromElement($composite_element_value);
         }
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 cc42a9e140adc2b93234674268cb5a86e577f3b8..efc1148bc495b27f69e86cafef00e72a6d0151ae 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#title': textfield
     '#type': textfield
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 56d9088682f81e1717f6e902bda698fd7f5ff936..59ab6ec219c572a46552f40c2126db730038e3a9 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 799095930159e499fa4fd3b0b8ccd7800a993083..0a6e02cacf1d6160996c432bd3cf90c94b9548e8 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b835ec6e0b07ce2940c70ef262a2f448a9c83ebc..03792ec6e1a5be1caf5c22ea1902ef518f419803 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1933b14afa218c414614b9a0f01d65fe45e2a9a4..3919ec6923a1df27191cf72021dc5fdfabf19a25 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 98f25cc5fd5fe748d6255ef4b57544ccc4537967..5d3ec04c84dcf5d0af9329995630ebb39f9bfafc 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Ajax'
 elements: |
   description:
     '#markup': 'This webform will redirect to the homepage when submitted.'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f303ac17f5e92106c76b48b29f875accb3052c3a..c7ae172a92e1193581443bb6f7f4787f7fd390f1 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 a9334e633f0b11a3c02e0f91fc2c827fae893ce8..b8a77a4572628efe49e69eab22bc7f3136536e1c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -103,6 +104,7 @@ elements: |
         one: One
         two: Two
         three: Three
+  
 css: ''
 javascript: ''
 settings:
@@ -144,6 +146,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 226efaa588f5d2aa08b14b3604330683ff524229..9b32e381d2c459803d81cc7a3dad08465f9e6684 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -65,6 +66,35 @@ elements: |
         martial_status: Single
         employment_status: Unemployed
         age: 20
+  webform_custom_composite_fieldset:
+    '#type': webform_custom_composite
+    '#title': webform_custom_composite_fieldset
+    '#wrapper_type': fieldset
+    '#wrapper_attributes':
+      class:
+        - custom-class
+    '#element':
+      first_name:
+        '#type': textfield
+        '#title': 'First name'
+      last_name:
+        '#type': textfield
+        '#title': 'Last name'
+  webform_custom_composite_container:
+    '#type': webform_custom_composite
+    '#title': webform_custom_composite_container
+    '#wrapper_type': container
+    '#wrapper_attributes':
+      class:
+        - custom-class
+    '#element':
+      first_name:
+        '#type': textfield
+        '#title': 'First name'
+      last_name:
+        '#type': textfield
+        '#title': 'Last name'
+  
 css: ''
 javascript: ''
 settings:
@@ -106,6 +136,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 19ed0e88d58b279fe15a30acf43ded5f4f2bf309..f19b89d2ef31ba62412d682dec50f2d33e69a8ff 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -36,6 +37,7 @@ elements: |
       managed_file:
         '#type': managed_file
         '#title': managed_file
+  
 css: ''
 javascript: ''
 settings:
@@ -77,6 +79,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 288f4fa9f671cd3760b1addacf9209b6ae5952e9..c8bf90aff8339e9886788fbdaf2c16db0eee5ac3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -455,6 +456,7 @@ elements: |
           q2: 1
           q3: 1
         '#format': table
+  
 css: ''
 javascript: ''
 settings:
@@ -496,6 +498,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 43975e995e4b8c55c78f9e0d668b9186d244adb7..4166a99183c88e1b0c712fc9d46cbd62d59bc889 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -711,6 +712,7 @@ elements: |
             phone: '+1 212-333-4444'
             ext: 0
         '#format_items': table
+  
 css: ''
 javascript: ''
 settings:
@@ -752,6 +754,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8a5af98181845ce721da3a3aa145901220a16cc1..439997f51cbbc3ac2524c1c85031f33876bf38c5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 893d866dcbcaaf3dbff63b84e088ed44870d5062..6e8e00624034fa2006cc6239c5f9a287d4b74cc8 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 649b73ac0d1d9e2b046e86601a8c185cbaccffe4..e595b56a1f6df1de31c77b4ec89c24c6e772d35d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c31af3b6a0babac80e59cec9e608a6e1cd7dc86d..f16834d5fac4442847e285094322778a07bfdb4e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 eaee10f06aa0065298547d405377512a4cf7a61f..77e6f4882f033dda0ce367f4b596a7236123285a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 95e5d3bc56f8db4176e36d418eaed6454db4befa..e36cf5a92b850c683fbba864d4537c5626125a5f 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c4739e72e94d320f282bd46db03c2319a71e90ec..b5ea8f0bc6fb4f7ba036d4b2dc08e34a67fc56a0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Confirmation'
 elements: |
   description:
     '#markup': 'This webform will redirect to the homepage when submitted.'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 065b11e72018f5b573c92b19e3ae28ecd4dc46fe..df74d75fb045552b1f09c0603ae5d7b7d8876cd5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': textfield
     '#title': test
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 bdcdfb32cc7c163032cdbae2c02716bf1f97f964..c0a0478b534769c94573ccd6dee134eccf669029 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -63,6 +64,7 @@ elements: |
       '#default_value': |
         {textarea line 1}
         {textarea line 2}
+        
     textfield:
       '#type': textfield
       '#title': textfield
@@ -129,10 +131,7 @@ elements: |
     range:
       '#type': range
       '#title': range
-      '#min': 0
-      '#max': 10
-      '#step': 1
-      '#default_value': 1
+      '#default_value': '1'
     tel:
       '#type': tel
       '#title': tel
@@ -204,7 +203,9 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
-      '#default_value': 1
+        filter:
+          type: _none
+      '#default_value': '1'
     entity_autocomplete_users:
       '#type': entity_autocomplete
       '#title': entity_autocomplete_users
@@ -213,6 +214,8 @@ elements: |
       '#selection_handler': 'default:user'
       '#selection_settings':
         include_anonymous: true
+        filter:
+          type: _none
       '#default_value':
         - 1
         - 2
@@ -236,7 +239,7 @@ elements: |
       '#default_value':
         - 1
         - 2
-
+  
 css: ''
 javascript: ''
 settings:
@@ -278,6 +281,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e9426a5f1addb0e4afdf2a5c87175d61c1ade44d..42393df6270a0a9fe81435dd1dbad2f477fc22e6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -119,6 +120,7 @@ elements: |
       fieldset_textfield_access:
         '#type': textfield
         '#title': fieldset_textfield_access
+  
 css: ''
 javascript: ''
 settings:
@@ -160,6 +162,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8b619327534a68d52dec3c690cd2e9e8924c4806..646543d0ad9dcc9be3f4a13ed874197931d2fe24 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -157,6 +158,7 @@ elements: |
     '#draft_hide': true
     '#wizard_prev_hide': true
     '#wizard_next_hide': true
+  
 css: ''
 javascript: ''
 settings:
@@ -198,6 +200,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 aeffa9c30341d0d6201b4fce85e1bfe1cdc87100..889f4409459e76f39518c03d35c96a2e0a1b624f 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -58,6 +59,7 @@ elements: |
       class:
         - preview_next_button_attributes
       style: 'color: orange'
+  
 css: ''
 javascript: ''
 settings:
@@ -99,6 +101,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7f9748ee9c0ffe05449844b33e2bf686a4154cad..c97018312778e090704ff2c9f4953b4b513edca5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -70,6 +71,7 @@ elements: |
         administrative_area: CA
         country_code: US
         langcode: en
+  
 css: ''
 javascript: ''
 settings:
@@ -111,6 +113,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e2d00ea8febafc8ed547d819524cc9e1a8edcf2f..2b88068b4b2409ee9bcc3b3987a1898dbce330a0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': item
     '#title': 'Below markup contains HTML tags'
     '#markup': 'Hello <ignored></tag><b>…Goodbye</b>'
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7e2388bf2310073dee7640e46d7235135b56381c..31d44f7e5045064fd82e6822c3420e904b489652 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
       one
       two
       three
+      
     '#class__description': 'This is a custom class description.'
     '#style__description': 'This is a custom style description.'
     '#attributes__description': 'This is a custom attributes description.'
@@ -30,8 +32,19 @@ elements: |
         - one
         - two
         - four
+        - five
       style: 'color: red'
       custom: test
+  webform_element_attributes_no_classes:
+    '#type': webform_element_attributes
+    '#title': webform_element_attributes_no_classes
+    '#default_value':
+      class:
+        - one
+        - two
+        - four
+        - five
+  
 css: ''
 javascript: ''
 settings:
@@ -73,6 +86,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 668ed1c857ad0c8d946deddcc48294fab0e7d447..d76638dc2ba6f2c48f493f23875c9465672ec29b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -37,6 +38,7 @@ elements: |
     '#autocomplete_existing': true
     '#autocomplete_limit': 5
     '#autocomplete_match': 1
+  
 css: ''
 javascript: ''
 settings:
@@ -78,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 54c67447e49d81f313c2437520ea40725d8406ee..3f7ab552a12d0e1279dc2a427290e88b39224065 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,6 +41,7 @@ elements: |
   captcha_recaptcha:
     '#type': captcha
     '#captcha_type': recaptcha/reCAPTCHA
+  
 css: ''
 javascript: ''
 settings:
@@ -81,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1b0cf772e129fe7aa9aa7993eeb81ef623548792..a272a7facdda8e4a3b5dfd4c21f1d7d70a4edcfc 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,6 +32,7 @@ elements: |
     '#title': checkbox_return_value_raw
     '#return_value': custom_return_value_raw
     '#format': raw
+  
 css: ''
 javascript: ''
 settings:
@@ -72,6 +74,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ab1eab9ef28131cc8accd76dc58b19f4b38361da..29b951d1cd833cf1d224be5d1b2389d99a346849 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,6 +35,7 @@ elements: |
         One: One
         Two: Two
         Three: Three
+  
 css: ''
 javascript: ''
 settings:
@@ -75,6 +77,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ee2bf963accdbc4bc61e8bfad08686cc42ed9fca..6833840cacf10f5e2196c83d0fab3e5e1e4978ac 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -208,6 +209,7 @@ elements: |
           '#disabled': true
         three:
           '#disabled': true
+  
 css: ''
 javascript: ''
 settings:
@@ -249,6 +251,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c6c757da680c12817f4a64a3abfe6fbf55789aac..72ae628fd538e94e3032dd3cc3bb608535f623b2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -68,6 +69,7 @@ elements: |
       include_anonymous: true
     '#default_value':
       - 1
+  
 css: ''
 javascript: ''
 settings:
@@ -109,6 +111,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7fbb1c5d2b618dde76d0bbae87b8bcce7690d9ce..e353bb4d9acf7c350994e20f005972648187e9f7 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -54,6 +55,20 @@ elements: |
       one: One
       two: Two
       three: Three
+  yaml_indexed_array:
+    '#type': webform_codemirror
+    '#mode': yaml
+    '#title': yaml_indexed_array
+    '#description': 'Pass an indexed array as the default value'
+    '#default_value':
+      - one
+  yaml_indexed_associative_array:
+    '#type': webform_codemirror
+    '#mode': yaml
+    '#title': yaml_indexed_associative_array
+    '#description': 'Pass an indexed associative array as the default value'
+    '#default_value':
+      - one: One
   yaml_decode_value:
     '#type': webform_codemirror
     '#mode': yaml
@@ -102,6 +117,7 @@ elements: |
       
       {% set value = "Hello" %}
       {{ value }}
+  
 css: ''
 javascript: ''
 settings:
@@ -143,6 +159,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 78e0c3fee2cbaa5566104b0712e04ca4cf907d2d..4f7d1db4944495860e414d32c4440837c74c8cfa 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -57,6 +58,7 @@ elements: |
         '#field_suffix': ' yrs. old'
         '#min': 1
         '#max': 125
+  
 css: ''
 javascript: ''
 settings:
@@ -98,6 +100,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5a60c0b0252af35efb4843a0ab4f501634e1dd57..c3ab78d7104ed71a3cc54de2d0ba74a1f5f2b886 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -133,6 +134,7 @@ elements: |
       visible:
         ':input[name="states_checkbox"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -174,6 +176,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 339b4afdb02f52e35c80d8ecf61af8936cc241c0..284fdfa5c740fc90f9e8ed1b6b53a3c279b34cb0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -90,6 +91,7 @@ elements: |
       {% endspaceless %}
       
     '#ajax': true
+  
 css: ''
 javascript: ''
 settings:
@@ -131,6 +133,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ce2de257809d06d8fdc80ff7c54b5267acf41255..b6ff8ff92fa1b7326cd7edcfd36d5ea637e8b9b0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -153,6 +154,7 @@ elements: |
         <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:
@@ -194,6 +196,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 eedf757dc5284d946f1b67b1ecbc5c8252ba9e90..98ef65a6df0aaa9786026687da533d300ab4cf72 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -70,6 +71,7 @@ elements: |
     '#display_on': none
     '#store': true
     '#template': 'sid: [webform_submission:sid]'
+  
 css: ''
 javascript: ''
 settings:
@@ -111,6 +113,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 54d19bf031f70e0dcf7e904a32b2336a518c5dab..db808c3c572113963d8fbf37ce2d3ba814846a9f 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -97,6 +98,7 @@ elements: |
     '#title': webform_computed_twig_spaceless
     '#whitespace': spaceless
     '#template': ' <em>This is spaceless</em>  <br/> '
+  
 css: ''
 javascript: ''
 settings:
@@ -138,6 +140,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 fe3fb07a6377ac01b629690b33cf7bf233c10a0a..a03de668775e153154401ab04dd366929e209ba9 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -74,6 +75,7 @@ elements: |
     fieldset_title_display_invisible_textfield:
       '#type': textfield
       '#title': fieldset_title_display_invisible_textfield
+  
 css: ''
 javascript: ''
 settings:
@@ -115,6 +117,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 407f9ce5cb8f6b7f53753123c39492e39998829c..149cabda679c95ac1d369007489e8144bdf29083 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -87,6 +88,7 @@ elements: |
       '#counter_type': word
       '#counter_maximum': 10
       '#counter_maximum_message': '%d character(s) remaining. This is custom text'
+  
 css: ''
 javascript: ''
 settings:
@@ -128,6 +130,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7266cf29a6103369243673db0bd4fb33698509fa..7a8628022006565c391d212eebf62680248ab02b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -82,6 +83,7 @@ elements: |
     '#title': date_datepicker_placeholder
     '#datepicker': true
     '#placeholder': '{date}'
+  
 css: ''
 javascript: ''
 settings:
@@ -123,6 +125,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 258f91c533087d6798a12e68a9367d00f9a43b92..e7adc2482848ae57500a291cf6f3a6e1e208232e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -95,6 +96,7 @@ elements: |
         '#title': datelist
     '#default_value':
       - datelist: '2009-08-18T01:00:00-05:00'
+  
 css: ''
 javascript: ''
 settings:
@@ -136,6 +138,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 a42d67ab34bab75b73945d3cb45afe9eecc6d084..289119718a52486d61c90bce0680a436dfa526fa 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -153,6 +154,7 @@ elements: |
         '#autocomplete': 'off'
     '#default_value':
       - datetime: '2009-08-18T01:00:00-05:00'
+  
 css: ''
 javascript: ''
 settings:
@@ -194,6 +196,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description.yml
index 60b597932d63bffa407a0f15e00047f114970f8f..d588ca396616d9eb48b6f733937c20e7da9e2602 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_description.yml
@@ -1,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -67,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -98,6 +102,8 @@ settings:
   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
@@ -153,6 +159,8 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
+  serial_disabled: false
 access:
   create:
     roles:
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 940b14586aa136c320b40847646c799baa951961..a125491a5fa7bc74c815eef0045a28e72ffa7678 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -514,6 +515,7 @@ elements: |
       '#title': 'Machine name'
       '#description': 'This is a description for the ''machine_name'' element.'
       '#description_display': tooltip
+  
 css: ''
 javascript: ''
 settings:
@@ -555,6 +557,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8b398240e74ebc4ce75c02a7ec094526f2076bee..64153216364a433174e7c62fff2504f65e8618df 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -46,6 +47,7 @@ elements: |
     '#open': true
     details_help_markup:
       '#markup': '<p>This is some markup</p>'
+  
 css: ''
 javascript: ''
 settings:
@@ -87,6 +89,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8d947bd1e73ac626cd0c99788a52c68de9a6657a..e6a1b32744675dcac02f2135ae42780c81d1cce6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -365,6 +366,7 @@ elements: |
     '#type': webform_video_file
     '#title': 'Video file'
     '#disabled': true
+  
 css: ''
 javascript: ''
 settings:
@@ -406,6 +408,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e30e653d0c45152f1afb213a58f31bac27378e45..02c584172394c8418cbe7f03fe0583a07089023e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -42,6 +43,7 @@ elements: |
     '#type': webform_email_confirm
     '#title': email_confirm_flexbox
     '#flexbox': 1
+  
 css: ''
 javascript: ''
 settings:
@@ -83,6 +85,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1f0938b71125055de4cbba233fcf70608a12f338..adffe2835209bc30cc5a78c18493d615f8c1298a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,6 +28,7 @@ elements: |
     '#type': webform_email_multiple
     '#title': email_multiple_three
     '#cardinality': 3
+  
 css: ''
 javascript: ''
 settings:
@@ -68,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4f4ee7c2d5952032ef2b7be6d412ba3ac3e333fa..ac0684744012214bd915f2ed5f1c6287849b2aa2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -85,6 +86,7 @@ elements: |
       auto_create: true
       auto_create_bundle: tags
     '#default_value': 1
+  
 css: ''
 javascript: ''
 settings:
@@ -126,6 +128,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 027b8dc12735332d85d5f8513f99682e66bf8bdc..186f6144a6de04cb78a00c16066ed20d315b64f4 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -62,6 +63,7 @@ elements: |
         include_anonymous: true
       '#default_value':
         - 1
+  
 css: ''
 javascript: ''
 settings:
@@ -103,6 +105,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4e045b14e61fdaaaaf6e012ea887a8923497841c..c24a20827e5d2a796646a675f169a12000b79564 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -29,6 +30,7 @@ elements: |
     '#title': webform_excluded_columns
     '#default_value':
       webform_excluded_columns: webform_excluded_columns
+  
 css: ''
 javascript: ''
 settings:
@@ -70,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d82f2e4d39569960d74107fc70a2adf8589ee30a..21d2b94e8dd47f6ce461b6114bd8246715020a1e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -37,6 +38,7 @@ elements: |
     '#default_value':
       webform_excluded_elements: webform_excluded_elements
       webform_excluded_elements_markup: webform_excluded_elements_markup
+  
 css: ''
 javascript: ''
 settings:
@@ -78,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 18553ad018f08e83ca720e6868e5488882bd3fde..463bfa26405148faa1761b43958564471b8fe637 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,6 +61,7 @@ elements: |
     '#field_suffix': suffix
     fieldset_markup:
       '#markup': '<p>This is some markup</p>'
+  
 css: ''
 javascript: ''
 settings:
@@ -101,6 +103,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e2748475f7921e4b96fe982d0bedc63eaa27c691..12f92a75e8d224fff0487f99d2b64b667ea6269e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -978,6 +979,7 @@ elements: |
     toggle_rating:
       '#type': rating
       '#title': rating
+  
 css: ''
 javascript: ''
 settings:
@@ -1019,6 +1021,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 56080f24fd421497796fb3a13ac8bdf5c924ffe5..20c18ced27eca71d371a5c1b9a194b75bcac9e68 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -805,6 +806,7 @@ elements: |
         style: 'padding: 30px; background: #ccc; text-align: center'
       flex:
         '#markup': 1
+  
 css: ''
 javascript: ''
 settings:
@@ -846,6 +848,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 cde553dfd7738213f89b903eabd1f68c7eafbf39..73d7aed9d02582e2d6b5051f87fbc0403f661d0d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1365,6 +1366,7 @@ elements: |
         '#title': 'Machine name (Raw value)'
         '#default_value': loremipsum
         '#format': raw
+  
 css: ''
 javascript: ''
 settings:
@@ -1406,6 +1408,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 837b78212a6531b8be01112c22339a39f140c0be..feb4b905a29e128e519321654998c4c7c616018e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -213,6 +214,7 @@ elements: |
       '#type': textfield
       '#title': fieldset_custom_children_textfield
       '#default_value': '{fieldset_custom_children_textfield}'
+  
 css: ''
 javascript: ''
 settings:
@@ -254,6 +256,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f53ea0bec732e69734607da6ce3db448de379074..6fdebec134b14607703550015c3d9fc3e7df7173 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1919,6 +1920,7 @@ elements: |
         '#multiple': true
         '#file_extensions': txt
         '#format_items': ul
+  
 css: ''
 javascript: ''
 settings:
@@ -1960,6 +1962,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c50422fa7b5696929a8e2eec90ac01966147b052..7199259785c838575f42cc58e9f8738765f0ae62 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,6 +27,7 @@ elements: |
       - 1
       - 2
       - 3
+  
 css: ''
 javascript: ''
 settings:
@@ -67,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8a5be1f33520eac69c079eb9050ea5169366bdcc..2f5b5da1347a56a946d6b83f232827c76f9208b5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -84,6 +85,7 @@ elements: |
     '#title': height_select_empty_required
     '#height_type': select
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -125,6 +127,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 a25d185e04216e9c6407c3bfc29416cd8202f990..432640a96576b819b0eddc3595ff6d8bb3a6060b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -37,6 +38,10 @@ elements: |
     '#type': textfield
     '#title': help_xss
     '#help': '{This is an example of help with <b>XSS <script>alert("XSS")</b>}'
+  help_empty:
+    '#type': textfield
+    '#title': help_empty
+    '#help': '[webform_submission:values:not_valid:clear]'
   help_checkbox:
     '#type': checkbox
     '#title': help_checkbox
@@ -132,6 +137,7 @@ elements: |
     '#help_display': element_after
     help_after_details:
       '#markup': '{This is markup}'
+  
 css: ''
 javascript: ''
 settings:
@@ -173,6 +179,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 2b9f77c1ae62abcbab2e4f712226f309e57c49a5..68aebc0dbbb6f55f1111f7bce2cdbfdb7e0f0c22 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -2085,6 +2086,7 @@ elements: |
       '#help_display': element_after
     machine_name_hr:
       '#type': webform_horizontal_rule
+  
 css: ''
 javascript: ''
 settings:
@@ -2126,6 +2128,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b2a81f0a6fa155d58a349612390d85beb5fc3b7d..70bdcb37c1f6c0002b1776ce1dc415108295b858 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -101,6 +102,7 @@ elements: |
     '#attributes':
       class:
         - webform-horizontal-rule--glyph
+  
 css: ''
 javascript: ''
 settings:
@@ -142,6 +144,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c17f49bb434a84767fffe2e743c9eafb1ff3ca2c..a655e5e06f2c5756756960f91d985757dc17f684 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,6 +42,7 @@ elements: |
     '#required': true
     '#default_value': 'Hello <b>World!!!</b>'
     '#format': false
+  
 css: ''
 javascript: ''
 settings:
@@ -82,6 +84,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ee840de175e4f443ff57d373e44d0755d6bd2a39..0ac6552d870b485774120e06d31a7eb3df31ac81 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -546,6 +547,7 @@ elements: |
     table:
       '#type': table
       '#title': 'Table | <script>alert(''This markup is not escaped properly!!!'') </script>'
+  
 css: ''
 javascript: ''
 settings:
@@ -587,6 +589,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 34fd12ed83bcf02d1a919646f51263107bd1b851..76488b098be6adce3e562208c959b521b4c936bd 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -549,6 +550,7 @@ elements: |
     table:
       '#type': table
       '#title': '<u>Table</u>'
+  
 css: ''
 javascript: ''
 settings:
@@ -590,6 +592,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 825493dd640bb9a234650066f1b64a57ddd8bf05..2ae37a246848cc7f4f56de07875dddf5814fe3b8 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -69,6 +70,7 @@ elements: |
         '#title': custom_composite_textfield
         '#pre_render':
           - webform_test_ignored_element_callback
+  
 css: ''
 javascript: ''
 settings:
@@ -110,6 +112,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 644807fc16c0a601e4c5bc001373834d3b3f72e0..e7b7b1efd04025b1bf08ea79f790d0c88df96159 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
     '#type': webform_image_file
     '#title': 'webform_image_file_advanced (max: 20x20)'
     '#max_resolution': 20x20
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6e32b3ffa312d2b65c2e35b712df536495519101..65d07947d8d20591d631ce3deddb667312da4717 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
     '#title': webform_image_file_attachment
     '#file_extensions': gif
     '#attachment_image_style': thumbnail
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 340a3fa9419cef1c435be0a01e0effbd69047350..779c019677d2272d576fac15d20ae152220062ac 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,6 +26,7 @@ elements: |
     '#height_title': '{height_title}'
     '#width_title': '{width_title}'
     '#default_value': 300x400
+  
 css: ''
 javascript: ''
 settings:
@@ -66,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 25ca4e127d014983de63bbbdc66cba950bb117fb..07815ca1c041392ab05f3215972b8cdc6c86265a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -93,6 +94,7 @@ elements: |
     '#type': textfield
     '#title': module
     '#input_mask': '999'
+  
 css: ''
 javascript: ''
 settings:
@@ -134,6 +136,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 dfad27b2e3943dfc9c54917dba77c9007cac3678..bff4ed6873cf81ad9df3adabf0928fe48065a711 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -56,6 +57,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f14085641cc6939672a7de48ef97a21a3619ee2a..dd97a75486fd09ba79cca04b51e44619e236111a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -97,6 +98,7 @@ elements: |
       1: 'Option 1'
       2: 'Option 2'
       3: 'Option 3'
+  
 css: ''
 javascript: ''
 settings:
@@ -138,6 +140,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6a2810df5e3342dc4cecea4436dab677f09e9e47..f9f123583b1ee0670d039132237652c524c341e5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -69,6 +70,7 @@ elements: |
     '#geolocation': true
     '#hidden': true
     '#geocomplete': true
+  
 css: ''
 javascript: ''
 settings:
@@ -110,6 +112,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 836ac255925239b6295357f996369d417967e546..4f00bb5763a5b245a0747668289c046485d74566 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -68,6 +69,7 @@ elements: |
     '#type': managed_file
     '#title': managed_file_extensions
     '#file_extensions': 'txt, text'
+  
 css: ''
 javascript: ''
 settings:
@@ -109,6 +111,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5bc2a4cf28b0a829745f5bdd5de0440fcad77b2b..b45e50c2867471bb0c64ff5301c339058e53f3ae 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': managed_file
     '#title': managed_file
     '#file_extensions': txt
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c3efc01b42321969c08f04391851d3dd1aeed8b9..7068db7f1f9f60e7e6dca514ab0a5d40961efe9c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -64,6 +65,7 @@ elements: |
       '#type': managed_file
       '#title': managed_file_help_none
       '#file_help': none
+  
 css: ''
 javascript: ''
 settings:
@@ -105,6 +107,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9a2404ab39a45d3b19e9aaa798a564c70cfe5974..b91f64019a2a24df8286c8d6b1e84f24cb9cbe45 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -34,6 +35,7 @@ elements: |
       managed_file:
         '#type': managed_file
         '#title': managed_file
+  
 css: ''
 javascript: ''
 settings:
@@ -75,6 +77,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: '1 MB'
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d12f631b7820664865525b9336e4dc2d4627599f..7893e2fdb9adea3a43cd00ea87050576046d2850 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -31,6 +32,7 @@ elements: |
     '#type': managed_file
     '#title': 'File truncate (255)'
     '#file_name': file_truncate_123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+  
 css: ''
 javascript: ''
 settings:
@@ -72,6 +74,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 127947c63df951ba261b28e70138aaf2cf75c69a..7d62c701dbed8837d81de2fe00ba652c3430dfdf 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,6 +60,7 @@ elements: |
     '#file_preview': url
     '#file_extensions': txt
     '#multiple': true
+  
 css: ''
 javascript: ''
 settings:
@@ -100,6 +102,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1abaad0d2dde75dc4322f2897e94df9b81337d79..115f7ee528adb3963873c12dd50fe7804ff499f2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -130,6 +131,7 @@ elements: |
         two: Two
         three: Three
       '#destination__type': webform_email_multiple
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +173,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b3e3d8c7981e632fc9ca99dbddb398c121ed6767..284f5cb2c5e486613d8105223dc941d444e5e5f7 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
     '#type': webform_markup
     '#markup': '<p>Alter this markup.</p>'
     '#display_on': both
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c76a7536e3c3222c52627375cbfcf83105719695..a132123cc445c21edfff5358cab5bdb35fe50573 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -71,6 +72,7 @@ elements: |
       '#type': webform_video_file
       '#title': 'video_file (mp4)'
       '#file_extensions': mp4
+  
 css: ''
 javascript: ''
 settings:
@@ -112,6 +114,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 55d59d3c59c0b735f3c75d2bd738dfd6d8493e3e..1df6ecd1735273f6a4f28de260666378d9eb230f 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -91,6 +92,7 @@ elements: |
       '#message_close': true
       '#message_id': webform_test_message_custom
       '#message_storage': custom
+  
 css: ''
 javascript: ''
 settings:
@@ -132,6 +134,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 48d61b450338ae27d542ee93586b2c34b1f2eb02..37172184ca63e3afd1bc03ec31af842c64c7f644 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -64,6 +65,7 @@ elements: |
     '#more': '{This is an example of more}'
     '#description': '{This is a description}'
     '#description_display': tooltip
+  
 css: ''
 javascript: ''
 settings:
@@ -105,6 +107,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 76a1ce791368472fa65bb6e1f26bc1bd6ec4f303..253958e004d2e4de86f2f80b1b1f6e2a167f002c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -278,6 +279,7 @@ elements: |
         '#attributes':
           class:
             - custom-element
+  
 css: ''
 javascript: ''
 settings:
@@ -319,6 +321,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6154d75164c90684f502a78bdfb1bbb7b545d52c..dbe1cda540414acffbba7f2bfb8864ea279619ef 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -39,6 +40,7 @@ elements: |
       '#type': datelist
       '#title': datelist_basic
       '#multiple': true
+  
 css: ''
 javascript: ''
 settings:
@@ -80,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_header.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_header.yml
index 108763911c7933eb6d87d730637659f0e8642d33..253f9431e744ddcb437b83ccdc06b8de0127258d 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_header.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_element_multiple_header.yml
@@ -96,7 +96,7 @@ elements: |
       email:
         '#type': email
         '#title': email
-
+  
 css: ''
 javascript: ''
 settings:
@@ -138,6 +138,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -226,6 +229,7 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
   serial_disabled: false
 access:
   create:
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 c4618176ee60498c15d342e658e8f2d725aadaa1..2caa0f34e5405694e3b1ba7d31b825d13e68bb95 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -50,6 +51,7 @@ elements: |
     '#title': webform_element_multiple_custom_access
     '#default_value': 5
     '#access': false
+  
 css: ''
 javascript: ''
 settings:
@@ -91,6 +93,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 475d69d4c352badc2034df9e57c206cf0fd7a34c..53493e1f713aeab7ee5a9c5865c9af70b82f18e2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -82,6 +83,7 @@ elements: |
       '#type': number
       '#title': number_basic
       '#multiple': true
+  
 css: ''
 javascript: ''
 settings:
@@ -123,6 +125,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 37d90b9db731c3f36d07fb6c2251056c4a641cf9..fa03d05ddb6742c5a5e5572fe884107019e12257 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -75,6 +76,7 @@ elements: |
       '#title': webform_element_options_custom_type_multiple
       '#custom__type': webform_multiple
       '#default_value': {  }
+  
 css: ''
 javascript: ''
 settings:
@@ -116,6 +118,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 990a1764bbff64c54e757d356c921193c418b84a..66ebd99db1427c06be58b6e22decdc2e546a11ad 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -156,6 +157,7 @@ elements: |
         Two: Two
         Three: Three
       '#wrapper_type': container
+  
 css: ''
 javascript: ''
 settings:
@@ -197,6 +199,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9174fe5c2bdc65bd8115bf32e9f8379f00e49cfb..ae71f7f4edf45202b3bd4e6b88b1561b4f1e60c1 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -47,6 +48,7 @@ elements: |
       '#type': managed_file
       '#title': managed_file_prepopulate_02
       '#prepopulate': true
+  
 css: ''
 javascript: ''
 settings:
@@ -88,6 +90,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1e3a8115d0d009b5f7dee144dbbff7cd3fec75a7..8a5098985d209e69a46dde763b2a337fc21b91ef 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,6 +24,7 @@ elements: |
       '#type': textfield
       '#title': private
       '#private': true
+  
 css: ''
 javascript: ''
 settings:
@@ -64,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 0620a0a9beb382704ae3771d6c346bc1ea0230f7..a242c420d1472397b2c999477843a41b5bad1b60 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -237,6 +238,7 @@ elements: |
           '#prefix': '<div><strong>Group 1</strong></div>'
         three:
           '#prefix': '<div><strong>Group 2</strong></div>'
+  
 css: ''
 javascript: ''
 settings:
@@ -278,6 +280,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 09f989b4182501ce3bb89fa2701a73267a1a6611..c9842885ee1e62855846bd64a880a35e543347f7 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -70,6 +71,7 @@ elements: |
     '#output': right
     '#output__field_prefix': $
     '#output__field_suffix': '.00'
+  
 css: ''
 javascript: ''
 settings:
@@ -111,6 +113,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f45be46e50333f037f2e5c885a5eb6b80a3fe0cb..f71dead5ca25a9b2437a87f4c92b80f6e7cb07fa 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
       '#type': webform_rating
       '#title': rating_required
       '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 fe5c15852c56bd353dd881124071c870b2a1ffd7..708ef67959cf76487dbcbd66d3e94ffdbcaeae8d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,6 +24,7 @@ elements: |
     '#type': textarea
     '#title': textarea
     '#readonly': true
+  
 css: ''
 javascript: ''
 settings:
@@ -64,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 fab80d87a22049f5feae6389f335771e07c117e5..29c610229197cb033ce949dff929582bca0af54d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -88,6 +89,7 @@ elements: |
       '#title': textfield_multiple_destination
       '#multiple': true
       '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -129,6 +131,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1e0322b2e8a7e5c38a0fddf565df3800f6cedc90..8d6fc9fd08a1d512b07de252d5b741c66bd19f9e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,6 +60,7 @@ elements: |
     '#scale_type': flexbox
     '#min_text': '1 = disagree'
     '#max_text': 'agree = 5'
+  
 css: ''
 javascript: ''
 settings:
@@ -100,6 +102,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c61662b6c541c625c05fcecde8cfc3de5c1ba7f8..67e9b1c89e6ec51885fdf8e82f77791470ff11c3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -62,6 +63,7 @@ elements: |
     '#title': webform_section_description_display_invisible
     '#description': 'Display invisible description.'
     '#description_display': invisible
+  
 css: ''
 javascript: ''
 settings:
@@ -103,6 +105,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 079874db39c05fbaa0278176c1d7a2a98988c696..7fe2eaa1169b7e05a5d66f9b84480313b07fefc0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -371,6 +372,7 @@ elements: |
         three: Three
         four: Four
         five: Five
+  
 css: ''
 javascript: ''
 settings:
@@ -412,6 +414,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8079404a844df7c76d972de85faf55282a163ea8..18d14b69d926d684f28e972fe99b6eea50484cae 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -41,6 +42,7 @@ elements: |
     '#type': webform_signature
     '#title': signature_readonly
     '#readonly': true
+  
 css: ''
 javascript: ''
 settings:
@@ -82,6 +84,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 04e6f941dcd5ab9e86a3476362fc4e51c6f5063a..1c0855ee0f39672a07518e7bc756a45ae8b8298e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -123,6 +124,7 @@ elements: |
         custom_selector:
           value:
             pattern: '[a-z0-9]+'
+  
 css: ''
 javascript: ''
 settings:
@@ -164,6 +166,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6cdcd9699fdfe45be838ec6f426306ac113fee05..a4222b4b228763ca752d02fbee8ffe3057ebd0bb 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -46,6 +47,7 @@ elements: |
             - entity.webform.results_submissions
           node_routes:
             - entity.node.webform.results_submissions
+  
 css: ''
 javascript: ''
 settings:
@@ -87,6 +89,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f3ec8a179819e1adec6bfab647cbfae361a0a3cd..4b97cb72acb28fb1119e2c4962624f41ebcd5417 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,6 +41,7 @@ elements: |
           - entity.webform.results_submissions
         node_routes:
           - entity.node.webform.results_submissions
+  
 css: ''
 javascript: ''
 settings:
@@ -81,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 26d245046912242ad24c56534207342acdafa37a..5e554883051a4445ae0f4cb92d0a6856b53d3576 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -54,6 +55,7 @@ elements: |
       - one
       - two
       - three
+  
 css: ''
 javascript: ''
 settings:
@@ -95,6 +97,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 34effab0bedb72a076bcde0bd5429960c34ed37b..df73bd52e24998b0c58855282997b75b69e60669 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -192,6 +193,7 @@ elements: |
       table_advanced_04_textfield:
         '#type': textfield
         '#title': 'textfield (4)'
+  
 css: ''
 javascript: ''
 settings:
@@ -233,6 +235,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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
index 5b7688c86d0cccd5236e764e4028bad61783f3c2..1d11a6b760133f5d48070bbe44ab0d972a05bccd 100644
--- 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
@@ -1,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -68,6 +69,7 @@ elements: |
       three: Three
       four: Four
       five: Five
+  
 css: ''
 javascript: ''
 settings:
@@ -109,6 +111,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 acbcb406de4b56136f7f4a34e0aa2150cab4536e..7791597307062a47e0bb86aca1ce86e9d5678f67 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -156,6 +157,7 @@ elements: |
       '#default_value':
         five: five
         three: three
+  
 css: ''
 javascript: ''
 settings:
@@ -197,6 +199,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9a07be86e35b71042de47a6a4ccb9934797a11fe..3e10a7212ada1c2f1ffb398caeac37c4a6d96732 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -44,6 +45,7 @@ elements: |
     '#international': true
     '#international_preferred_countries':
       - ZW
+  
 css: ''
 javascript: ''
 settings:
@@ -85,6 +87,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 66b55fb5fde887df1787ba84874f2d07a64f266a..4199766614d4baf196a2451165ffc3923da84446 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -120,6 +121,7 @@ elements: |
         '#breadcrumb_delimiter': ' » '
         '#format': breadcrumb
         '#format_items': ul
+  
 css: ''
 javascript: ''
 settings:
@@ -161,6 +163,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 921c6a9d705693dbda87124e09c2f61a2b431e51..c9927777c223037cb6eb53b99a0b0821b2bcef64 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
     '#terms_type': slideout
     '#terms_title': terms_of_service_slideout
     '#terms_content': 'These are the terms of service.'
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 8e77275246b97df33362dc811528283fb50b878a..96e58d6c9ce5dd572855874f8ad6580307e21aaf 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,6 +31,7 @@ elements: |
     '#title': text_format_description_more
     '#description': 'This is a description'
     '#more': 'This is more'
+  
 css: ''
 javascript: ''
 settings:
@@ -71,6 +73,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 05f0511fef7e98a4153f272ba9d20253f1612a4c..670482807d24337b7d5ef44a05638c1245c45931 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -67,6 +68,7 @@ elements: |
     '#title': time_timepicker_placeholder
     '#timepicker': true
     '#placeholder': '{time}'
+  
 css: ''
 javascript: ''
 settings:
@@ -108,6 +110,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7f0b1bc4e99ef082e00615a9158e856c413f77bd..cf26aaf5c01ee8f3636e9237b19a818d8f33e70d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1657,6 +1658,7 @@ elements: |
       '#title_display': none
     machine_name_hr:
       '#type': webform_horizontal_rule
+  
 css: ''
 javascript: ''
 settings:
@@ -1698,6 +1700,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9e570b9a7fcbc981e46ba583ce7e93acbc7ffc3c..2b475af7e75ea351a4388227514a5555ffe80b96 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -32,6 +33,7 @@ elements: |
     '#include_anonymous': false
     '#default_value':
       authenticated: authenticated
+  
 css: ''
 javascript: ''
 settings:
@@ -73,6 +75,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 a135f8d1a8c0d5f2d41a4b1c19d1259e7fbd225b..f9fba9d7fb5ab576a6a01d31fd16c06a05f998cf 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,6 +27,7 @@ elements: |
     '#minlength': 5
     '#required': true
     '#default_value': value
+  
 css: ''
 javascript: ''
 settings:
@@ -67,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 bfc1766fc658860da49e7796c6e520c5d22a15df..1bf58eb48f6b91b416602895a0879b4c331b4cc2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -78,6 +79,7 @@ elements: |
       '#title': webform_element_multiple_managed_file_two
       '#select2': true
       '#multiple': 2
+  
 css: ''
 javascript: ''
 settings:
@@ -119,6 +121,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d3718fa83e7847db3acaa23c8df91a496dba7ee0..fe15babd2502fd4f5c3ece4aa0a48443d74d573f 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -37,6 +38,7 @@ elements: |
     '#title': pattern_unicode
     '#pattern': \u2E8F
     '#description': 'Enter unicode CJK characters ''⺏'''
+  
 css: ''
 javascript: ''
 settings:
@@ -78,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f9ef3b769e3ceec405a0256ab92225680246d858..41e25c346da6c8750ea0cd2b3b8bd86b2f2a5091 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -12,28 +13,33 @@ template: false
 archive: false
 id: test_element_validate_required
 title: 'Test: Element: Validate Required'
-description: 'Test #required_error element validation support.'
+description: 'Test #required and #required_error element validation support.'
 category: 'Test: Element'
 elements: |
-  required_textfield:
+  required_textfield_html:
+    '#type': textfield
+    '#title': 'required_error_textfield_<em>html</em>'
+    '#required': true
+  required_error_textfield:
     '#type': textfield
-    '#title': required_textfield
+    '#title': required_error_textfield
     '#required': true
     '#required_error': 'This is a custom required message'
-  required_textfield_html:
+  required_error_textfield_html:
     '#type': textfield
-    '#title': required_textfield_html
+    '#title': required_error_textfield_html
     '#required': true
     '#required_error': 'This is a <em>custom required message</em>'
-  required_radios:
+  required_error_radios:
     '#type': radios
-    '#title': required_radios
+    '#title': required_error_radios
     '#options':
       one: One
       two: Two
       three: Three
     '#required': true
     '#required_error': 'This is a custom required message'
+
 css: ''
 javascript: ''
 settings:
@@ -75,6 +81,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 143d75e4a889fa857012e037b8ecba8ae618827a..fd70edda7e53c3391e91196d0fd89b56fdf10cb0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -55,6 +56,7 @@ elements: |
     '#options':
       1: one
       2: two
+  
 css: ''
 javascript: ''
 settings:
@@ -96,6 +98,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1b3a8e55ff912fb9f9248c41cfa4e16804dfe5b9..8cb39f30d06d748aac2898f7bcd75802ad9d5264 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -90,6 +91,7 @@ elements: |
     textfield_03:
       '#type': textfield
       '#title': textfield_03
+  
 css: ''
 javascript: ''
 settings:
@@ -131,6 +133,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3c05cdc69411115403ec521ab4352b00aaf289ce..a79e1d6510700c79973a259e0baccfec716c5be5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -24,6 +25,7 @@ elements: |
     '#display_id': default
     '#arguments':
       - '[webform:id]'
+  
 css: ''
 javascript: ''
 settings:
@@ -65,6 +67,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9283a9e50d3cfa69a05065094a595540c79500f9..739524559129de345df0cfbaa21bfe78c451c6c2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -549,6 +550,7 @@ elements: |
     table:
       '#type': table
       '#title': Table
+  
 css: ''
 javascript: ''
 settings:
@@ -590,6 +592,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 17236a0537e6e98c76bceecc24f0a5cee7ea597d..02b0e936be10019261c39de199cab00eda808133 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -83,8 +84,6 @@ elements: |
           '#options':
             Male: Male
             Female: Female
-      '#multiple': true
-      '#multiple__header': true
   webform_likert_example:
     '#type': details
     '#title': Likert
@@ -170,6 +169,7 @@ 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:
@@ -211,6 +211,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_archive.yml b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_archive.yml
index 1c861582f37c6593c3bb6d99f5a93a97d7227257..ba7890cc76fdd308fc466c5923d0864681fc6cf3 100644
--- a/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_archive.yml
+++ b/web/modules/webform/tests/modules/webform_test/config/install/webform.webform.test_exporter_archive.yml
@@ -1,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,7 +27,7 @@ elements: |
     '#template': |
       <?xml version="1.0"?>
       <textfield>{value}</textfield>
-
+  
 css: ''
 javascript: ''
 settings:
@@ -68,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -156,6 +160,8 @@ settings:
   results_customize: false
   token_view: false
   token_update: false
+  token_delete: false
+  serial_disabled: false
 access:
   create:
     roles:
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 24ea2c2fe7b1af2cdbe910d1c0fb3142d2a7dc83..77428fa78dfbd21b9f8fc7ba3c747b5abe732434 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
     '#selection_handler': 'default:user'
     '#selection_settings':
       include_anonymous: true
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 de0c51c5f6d3f031d05810e1ee841a754d5c2f40..d4543998d62667cdc643d742f3ae2ea7f57a80a7 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -43,6 +44,7 @@ elements: |
       one: One
       two: Two
       three: Three
+  
 css: ''
 javascript: ''
 settings:
@@ -84,6 +86,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 38864a076044fbfd1cc6a223257a4261e0a48d98..beeb1cb4bbc35d7981a04bf394778bc8cfa4243c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: 'Please login to access <b>[webform:title]</b>.'
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3ed8401a8fe6e59ce03871fb4fda605c79520666..b3c4ec83205623f9a94cfc56719ef6c8048fe000 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -118,6 +119,7 @@ elements: |
     '#options':
       1: Administrator
       0: Anonymous
+  
 css: ''
 javascript: ''
 settings:
@@ -159,6 +161,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 132d882ce6d8ef557c6c0a0a54a83ad7ee853cde..ab27923de7dd282105d10abd156a5cdeb65aa48b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This webform is archived.'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6dee88a4bde72649825df5a33c99f0a5c74c18ac..de84812709e3ad7c0761d6b53174479f24d032c6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   test:
     '#type': textfield
     '#title': 'Text field'
+  
 css: |
   .webform-submission-form {
     background-color: #cccccc;
@@ -71,6 +73,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 659433da76c50d49b6dda1aa0cabdb6829f451b9..c87cdc6cddb31f2fe5ba9bb0fa7e5c9a0181fbaa 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -21,6 +22,7 @@ elements: |
   textfield_excluded:
     '#type': textfield
     '#title': textfield_excluded
+  
 css: ''
 javascript: ''
 settings:
@@ -62,6 +64,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 24de0796751142f142ca8c67151242f704559cae..ac05c096fe708875d0fc3f156bd36c2049853105 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   test:
     '#type': textfield
     '#title': 'First input'
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 01457518a1b401a087841c7baab3f7847b634fe0..22b235629ff6796844a4016c9af199fce3014a40 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: closed
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This message should not be displayed'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 a5221993c5380a091aad0544a36519108cff4c01..2718e7d52818ead6426e270cedca660d26cd9728 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6e90823e5bfa28157c221fc4d05850c1945c74ed..aa3c89c461940f6b4654969bd8f6b9efa5ab527d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,6 +26,7 @@ elements: |
     '#title': 'Details 02'
     details_02:
       '#markup': 'Detail 02 Markup'
+  
 css: ''
 javascript: ''
 settings:
@@ -66,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 98415fb9600593ef61d53561ef0ada74ed87335e..8e9f55829dca5a5b66a1cedfa6ccb987fefbb0da 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -20,6 +21,7 @@ elements: |
   test:
     '#type': email
     '#title': 'Test autocompletion is disabled.'
+  
 css: ''
 javascript: ''
 settings:
@@ -61,6 +63,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f24d095614b7f61c8c30703bfebd51d2cce26488..c67dbec7f74bdb6c277e3f40a3cf2e5f1df2c46d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -345,6 +346,7 @@ elements: |
     element_100:
       '#type': textfield
       '#title': 'Element #100'
+  
 css: ''
 javascript: ''
 settings:
@@ -386,6 +388,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d66bc8dd89b43446308eff0ed22e96c284c46c2d..0e3356bf75cf1d8e99c5ea2ac883ebfdacf7dc00 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': textfield
     '#title': textfield
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 53e61c8794a5b33ee920ed07c21ba38f4f0ef782..ac296823bed34c44c9797fe8234f24bc884583ee 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5ffa77fb9c7d2b61d7f4e9fbbee2c346ea1ba504..52281ee6d1c5a6f0d2b11364425710af0031ef7a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 bac504ee120d101db27123c267638d5a32320636..095f9b63848d44cd7b9df469e302cc1c4fc17d06 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
   comment:
     '#type': textarea
     '#title': Comment
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1c697c7bfb8bf7809c5b05047ff15f8c2520ded6..710daee520f9e6dd109188d4ed00a02774231077 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -126,6 +127,7 @@ elements: |
         1: 'Option 1'
         2: 'Option 2'
         3: 'Option 3'
+  
 css: ''
 javascript: ''
 settings:
@@ -167,6 +169,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 0fd8da4008999581e8b24acb0ec6111161c3c87f..ecf060e5fd3d3c7e514a4bedf6104716f89524d3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -39,6 +40,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -80,6 +82,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7ee691e7f4735e17e7caaa58793120384c8369f5..5ae9b3e48461c774a213839aff1e2006fe707a2c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4be550f70cb616b2b9051440e719404c89e09c24..eefd6416a669b1108e4e0bc6b2dac866a6f66ef2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1d99c3baf00e4f8a7f0807464ebe616883e6c8ef..67704d35ec5f0bd0fb22d6a506831e6e7d8c78ea 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1c5259b1b03707ee1a79e36034c1af836e96a724..df4fa2d19953e9c1decbd6864b5218b9faff1b7d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -315,6 +316,7 @@ elements: |
   element_100:
     '#type': textfield
     '#title': 'Element #100'
+  
 css: ''
 javascript: ''
 settings:
@@ -356,6 +358,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6e481aaa2d2a7b4b6ed7f5f900f5ac7c53a77b67..4357dd89930035763d8098fa1910640c96d3dabc 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -615,6 +616,7 @@ elements: |
   element_200:
     '#type': textfield
     '#title': 'Element #200'
+  
 css: ''
 javascript: ''
 settings:
@@ -656,6 +658,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 485c60e256b4661de95fa4934a43d05d8fa6b2a3..c5c8d7c510ae0fe6cd48193ccc190a20fbc373ff 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -915,6 +916,7 @@ elements: |
   element_300:
     '#type': textfield
     '#title': 'Element #300'
+  
 css: ''
 javascript: ''
 settings:
@@ -956,6 +958,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 225826b00a5c20369a7de1a3f181b0134a33ec7a..94820d652c37c20e9051e1d08cddae86f9232199 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
     '#title': 'Test required element with a custom error message.'
     '#required': true
     '#required_error': 'A custom error message'
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 6acbc94ae0f5dd8f65aa81b3efe4a2f314d93555..f059a22f6c64a74d4185cd4b4037a6f73f4b81b1 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: scheduled
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This message should not be displayed'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1dbc9cc8e983e58411460f37221a87fe98ec7cf5..7826357887ce4ebd34fa58e27b35d184ab730f18 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -38,6 +39,7 @@ 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:
@@ -79,6 +81,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 857befa9a90ccef8faa0777a5fe4309eed514b11..7054dbcfc52fdd2105329b62de9a1a92a54e05d2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -51,6 +52,7 @@ elements: |
       '#format_attributes':
         class:
           - format-attributes-class
+  
 css: |
   .format-attributes-class {
     border: 1px dashed #ccc;
@@ -97,6 +99,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 738af29fae360ae31ad187c9b43dcb3de961b86a..425ff533f93637366d3d9e05d61037af54692a5e 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -15,21 +16,15 @@ title: 'Test: Webform: Properties'
 description: 'Test custom webform properties.'
 category: 'Test: Webform'
 elements: |
-  '#method': get
-  '#action': 'https://www.google.com/search'
   '#prefix': 'Form prefix'
   '#suffix': 'Form suffix'
-  '#attributes':
-    invalid: invalid
-    class:
-      test-form-properties: test-form-properties
-    style: 'border: 10px solid red; padding: 1em;'
   '#validate': this_will_be_ignored
   description:
     '#markup': 'This webform has #prefix, #suffix, #attributes.class, #attributes.style, and #attributes.invalid properties.'
   q:
     '#type': search
     '#title': 'Search Google'
+  
 css: ''
 javascript: ''
 settings:
@@ -71,6 +66,13 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: get
+  form_action: 'https://www.google.com/search'
+  form_attributes:
+    invalid: invalid
+    class:
+      test-form-properties: test-form-properties
+    style: 'border: 10px solid red; padding: 1em;'
   share: false
   share_node: false
   share_theme_name: ''
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 a628ff99415bf0d2abeb69e97cf2b712b9ff07eb..e3becb4817c8d756ede5d560a541ddededbc3a75 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   name:
     '#type': textfield
     '#title': Name
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ccc217c61593d75dd626d85a6b3cbfa7ae60457f..35b31e1d173d0964908ad9573211ec166ae53985 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': textfield
     '#title': textfield
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5797b9ac967ed088ae2a46b5378fbef0d33a93d2..9ced01327814a47272245c48645ff536f6339a85 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': textfield
     '#title': 'Text field'
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 50a7c578b5a29ac6748487e640b53afd8d58ddf8..228f4932ba1526d7db5fcfbf629f25e84597cea5 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Form'
 elements: |
   description:
     '#markup': 'This webform will not save any submissions.'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 935e9e4011529c3a67049ba17a0a45c4a25387b6..b8b31ff5188a608a25b34225af856aec14001552 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -29,6 +30,7 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
+  
 css: ''
 javascript: ''
 settings:
@@ -70,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4a11c0f8b4df2f5519ad197365bc1a13aad253fd..6b733ae34ed2146cc5e238b27510c9df8f33d0e2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -26,6 +27,7 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
+  
 css: ''
 javascript: ''
 settings:
@@ -67,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e0f53bcd80af04e44c27b08599283bcf1079b8dc..4f15ea8c45ff4a7c5be9daed8cdd54358c2a82c2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Custom submit text'
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 749ab23b8f2e33039dcebdd543103608835ac144..d46c435f26f439171a9f448742314eca00f4d6ab 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: closed
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Webform'
 elements: |
   description:
     '#markup': 'This webform is a template'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d619fb8f34449464207ff494f377227881fe6bcf..d80b0bd51bc5bccac2f91c4db0880617672febd2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,6 +24,7 @@ elements: |
   text_format:
     '#type': text_format
     '#title': text_format
+  
 css: ''
 javascript: ''
 settings:
@@ -64,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 908833be9411e09934671914984c39e78e9ebe37..6952c5dde0a86c5d7007899a84cbd1e72b81514b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,6 +28,7 @@ elements: |
     testfield_2:
       '#type': textfield
       '#title': textfield_2
+  
 css: ''
 javascript: ''
 settings:
@@ -68,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 46c8665289bae6e0eab45cf1a6767febb690f9fc..ecd11c097fe4cf359caa1076838b089e4f210976 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   custom:
     '#title': 'Custom Field'
     '#type': textfield
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 df9c04ea46a350d42fdeb881d457fb3f47c86c42..4d6ab5b69f4a89849ea8d44ec72203137f2644da 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -56,6 +57,7 @@ elements: |
       '#type': textfield
       '#title': textfield_private
       '#default_value': '{textfield_private}'
+  
 css: ''
 javascript: ''
 settings:
@@ -97,6 +99,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 0e6e3fe2612af01b733b433d0244aea4a5a21477..cd69d047c4887fb2e6cfc15cf27adb145d380f6d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,6 +61,7 @@ elements: |
       '#type': textarea
       '#required': true
       '#default_value': 'Here is some feedback'
+  
 css: ''
 javascript: ''
 settings:
@@ -101,6 +103,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 aacd91c6175202a4e056fcd604fe3c1a9b8d4092..fc08778e8999b8431cb9b3427859f262060ea148 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -29,6 +30,7 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
+  
 css: ''
 javascript: ''
 settings:
@@ -70,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 91c6def06f605dd567599064c7cbbe9b0c0b553f..0f7acf68b5b3bacf5f21c4a71fe6058ccbd59775 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -98,6 +99,7 @@ elements: |
           unchecked: true
     page_5_markup:
       '#markup': 'This is page 5.'
+  
 css: ''
 javascript: ''
 settings:
@@ -139,6 +141,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3077224effc7f5b08d2750c36309a77a887e838e..34fe9495b1531f0681b0a3180f063ccc7a2c7be6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -61,6 +62,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': Apply
+  
 css: ''
 javascript: ''
 settings:
@@ -102,6 +104,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 949b36e9544a59a5efe08f1492e06e5287ddba1e..e745343b56f619744fed559274a7361b31b55664 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -29,6 +30,7 @@ elements: |
       '#title': 'Element 2'
       '#type': textfield
       '#default_value': '{element_2}'
+  
 css: ''
 javascript: ''
 settings:
@@ -70,6 +72,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b15a1a4e3e1bd29bb82dc1e1ced799086f4dcc05..188ef44e80a74cd45f16009ba39ae9661e6299d6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -345,6 +346,7 @@ elements: |
     element_100:
       '#type': textfield
       '#title': 'Element #100'
+  
 css: ''
 javascript: ''
 settings:
@@ -386,6 +388,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c7c0df10ef31242a553740df74bc46454dbfa05f..6a37f411680a5f0cceb75f2f5648e927a95776f4 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -675,6 +676,7 @@ elements: |
     element_200:
       '#type': textfield
       '#title': 'Element #200'
+  
 css: ''
 javascript: ''
 settings:
@@ -716,6 +718,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3c33e86de3e32a8195c2561aff5f85ca44fe3253..ce2884c31df570841cfa99f1dedf8a54a67cfb61 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1005,6 +1006,7 @@ elements: |
     element_300:
       '#type': textfield
       '#title': 'Element #300'
+  
 css: ''
 javascript: ''
 settings:
@@ -1046,6 +1048,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b6b7c279e3024bda7ac1f7017607945877364c23..6244018682e032a9b76f74d7978ba2196d2b6ff3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -58,6 +59,7 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
+  
 css: ''
 javascript: ''
 settings:
@@ -99,6 +101,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 acc2e5ec5e40ce6106f7e7984114e07359df88db..f1ab90fae49baf36447b9a327c1381495763e977 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -106,6 +107,7 @@ elements: |
   wizard_3:
     '#type': webform_wizard_page
     '#title': 'Wizard page #3'
+  
 css: ''
 javascript: ''
 settings:
@@ -147,6 +149,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 03d9b17f0b1b458568afabb51c5887f44f91df28..31f7d0e73c8b3967d60956cca40480893b145db6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -47,6 +48,7 @@ elements: |
       '#attributes':
         readonly: readonly
         style: 'background-color: #eee'
+  
 css: ''
 javascript: ''
 settings:
@@ -88,6 +90,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f152ad66c186d2ea298f99ae585394dd6f884418..2b779d285f18cb325f04f64275ddfe571608abc9 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,6 +41,7 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
+  
 css: ''
 javascript: ''
 settings:
@@ -81,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 92abea0b868e6ddd73d2906c52f1e25236bddaf9..a36cf3675adaa65f1374311723187fda787129b9 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -55,6 +56,7 @@ elements: |
     '#title': Notes
     '#private': true
     '#default_value': 'These notes are private.'
+  
 css: ''
 javascript: ''
 settings:
@@ -96,6 +98,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 dfdcaccc1b439ad1e32627ee3e9b44b900495f93..56b7a17cc5c81421d1fb56bf9b05a81dfb0bb119 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -30,6 +31,7 @@ elements: |
     '#title': radios_other
     '#options': sex
     '#description': 'Check and enter ''Other'' to trigger an email.'
+  
 css: ''
 javascript: ''
 settings:
@@ -71,6 +73,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 2791180c6274685b0434cb2522260cdce8634a7a..9bf78378817e56b2bc1adb22bc163b7cf492df34 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
       authenticated: 'Authenticated (authenticated)'
       administrator: 'Administrator (administrator)'
       other: Other
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 9b1913b23321c2a47829fd45c394ebd5c39ea3b9..9e6754196d48c193d8b7032d08ea08d6bf006b6c 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -17,6 +18,7 @@ category: 'Test: Handler'
 elements: |
   message:
     '#markup': 'Click ''Save Draft'' and ''Submit'' to send emails triggered by submissions  state.'
+  
 css: ''
 javascript: ''
 settings:
@@ -58,6 +60,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7ed79befbb406624e0b97656b4609e7b26004bb6..82d6f382afb6fcdd0051626ec2d03317ed568e35 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -40,6 +41,7 @@ elements: |
     '#type': textarea
     '#required': true
     '#default_value': '{message}'
+  
 css: ''
 javascript: ''
 settings:
@@ -81,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 489867959ac1c649f1f77447f0de5627bbda91db..418e9d2ae3f2fa3b8b0b4999984ccfe7dfc387cd 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -60,6 +61,7 @@ elements: |
       '#type': textfield
       '#title': 'Draft loaded message'
       '#default_value': '{Custom draft loaded message}'
+  
 css: ''
 javascript: ''
 settings:
@@ -101,6 +103,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 761eda3cd29ce7be488d4e4792efbb36b031cc5f..34eee48221032e4f199612daf70dcaa7b26289d9 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -84,6 +85,7 @@ elements: |
     signature:
       '#type': webform_signature
       '#title': Signature
+  
 css: ''
 javascript: ''
 settings:
@@ -125,6 +127,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 db9b928af38966d8df3220a043b51728ab7fe72b..d5319fa3f69917bc5c606a946adf0bdec40d60bb 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -49,6 +50,7 @@ elements: |
     '#default_value':
       value: '<p><em>{default_value}</em></p>'
       format: basic_html
+  
 css: ''
 javascript: ''
 settings:
@@ -90,6 +92,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5fb3a88416ad808b5393f0a80069f5f8269d2411..7014903e121f1611018d96fca4c3bff861667ea3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -159,6 +160,7 @@ elements: |
       kitten_3:
         text: 'Cute Kitten 3'
         src: 'http://placekitten.com/130/200'
+  
 css: ''
 javascript: ''
 settings:
@@ -200,6 +202,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 246cacecbfc60db252fcd5ade4dcae2d5bf5edd3..3d8b91f5325689f247fcaf73e472abfadd561284 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1016,6 +1017,7 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -1057,6 +1059,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 67ca393b28f4a66bf9f64927b8885a0f55068d7e..7d1007f1acec8dc64fd01719c0980c38308323fe 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -829,6 +830,7 @@ elements: |
       invisible:
         ':input[name="trigger"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -870,6 +872,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 5a9bac88c47be22a9e580683c28ebf808e7388c6..833513e2c92c6dff05b752ddde774c4b7d4661df 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -146,6 +147,7 @@ elements: |
         two: Two
         three: Three
       '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -187,6 +189,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 48d366241874b396ba07582cc317c9a81b5b89d3..3c39b8c6bd446c9e5ff41f1a4b85c7622e3feb62 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -1057,6 +1058,7 @@ elements: |
       required:
         ':input[name="trigger"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -1098,6 +1100,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ec9c1199f419ece95643e2372426604cee29de4a..7bef9e3c90f61f220964c6b42d1a717006aed724 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -45,6 +46,7 @@ elements: |
             checked: true
           ':input[name="trigger_2"]':
             checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -86,6 +88,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 df5254a23b15159abe99a83713c29106b575eade..c22b4d32b0fed62b8f8f00af787fba0abc984c88 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -59,6 +60,7 @@ elements: |
       disabled:
         ':input[name="disabled"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -100,6 +102,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3cd8a74a1999da36317b2d63a52da301b6622763..74b031dcb212daa758b917c6aff581a9e6150905 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -102,6 +103,7 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
+  
 css: ''
 javascript: ''
 settings:
@@ -143,6 +145,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f9c57c8c3378347f6df4fe1733020096fed2b1fb..9877f8c8ef726f1b2e352a27476e25cff247a89b 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -76,6 +77,7 @@ elements: |
       '#first__title': webform_name_nested_first
       '#last__required': true
       '#last__title': webform_name_nested_last
+  
 css: ''
 javascript: ''
 settings:
@@ -117,6 +119,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 48cf5ad6ab155dc12daba2c60631ebc9a7906ab6..8fc16c7ff19216118a906bfa074fd1d538136918 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -73,6 +74,7 @@ elements: |
             checked: true
           ':input[name="visible_slide_textfield"]':
             filled: true
+  
 css: ''
 javascript: ''
 settings:
@@ -114,6 +116,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3c4d4ed07b6392d6cdbdf345c82294539ec1d1bb..732f8f20c0debd13daade38fb452c359cc3c25c2 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -149,6 +150,7 @@ elements: |
       visible-slide:
         ':input[name="trigger_visible_slide"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -190,6 +192,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 97be7de50a5d30d48df3730d10e6d69972edb1bc..f715c7a86c63e2c8df07df62bef78c1bd426f6f1 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,6 +26,7 @@ elements: |
       required:
         ':input[name="files[trigger_file]"]':
           filled: true
+  
 css: ''
 javascript: ''
 settings:
@@ -66,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1e5f013013aa0718ec45e7e6290020448989366f..c928057f4577bdab5b7e13f9f3a6a0806bcfd436 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -138,6 +139,7 @@ elements: |
         invisible:
           ':input[name="trigger_checkbox"]':
             checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -179,6 +181,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b0cabed396afcaa7ccc8494ab4e3c93398c2793c..68d0dc210733051c0ce3e01a33417f98ff3da9a6 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
       visible:
         ':input[name="trigger_likert"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 7417dcaea589d20bf7f7ea3acc20125840f26a79..2fb6188f4cc86ba6eb688b83dcce4561810f5b76 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -27,6 +28,7 @@ elements: |
       required:
         ':input[name="trigger_required"]':
           checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -68,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 e77c84e769b7763548c1d48633bb5fe0cddb1e37..e8c7ab82d2a42d8f595bc4e349c7eed22551ef40 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -58,6 +59,7 @@ elements: |
                 checked: true
               ':input[name="b"]':
                 checked: true
+  
 css: ''
 javascript: ''
 settings:
@@ -99,6 +101,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b7516ea887737eed193ef57596e17f1b3ac22b63..2b5664b233a27bf96788efb51d1c7f0671bee846 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -52,6 +53,7 @@ elements: |
       '#type': textfield
       '#title': nested_textfield
       '#default_value': '{value}'
+  
 css: ''
 javascript: ''
 settings:
@@ -93,6 +95,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 3e40e4dcb74970f4f52d135fb1d955a95b9deefc..4ef71dc8b66192a96c12790d36815bd4b2be8f81 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -446,6 +447,7 @@ elements: |
         required:
           ':input[name="composite_sub_elements_required_trigger"]':
             value: b
+  
 css: ''
 javascript: ''
 settings:
@@ -487,6 +489,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 f61047073f295db876c7659a96f6d21d7586d1ac..0874c248513f9cb5dad747b402c278739eb1b674 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -70,6 +71,7 @@ elements: |
       '#type': textfield
       '#title': dependent_details_textfield
       '#default_value': '{dependent_details_textfield}'
+  
 css: ''
 javascript: ''
 settings:
@@ -111,6 +113,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 ed7fd63a583c95e2d1afaf6c05d7181ff107e743..c0b8612d93a13d6048f4339f0ade22334e76bded 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -233,6 +234,7 @@ elements: |
       '#default_value': '{default_value}'
       '#required': '{default_value}'
       '#description': '<b>Required:</b> page_01_trigger_checkbox:checked'
+  
 css: ''
 javascript: ''
 settings:
@@ -274,6 +276,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 177d1566228f65a330b07bebe06c07ee43de500f..0eb45bd891c528a416a787599d817b11e506ad4a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -68,6 +69,7 @@ elements: |
           - ':input[name="some_number"]':
               value:
                 between: '1:10'
+  
 css: ''
 javascript: ''
 settings:
@@ -109,6 +111,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 0ceaaee813097fc9c36c17592bb4baa9ff7032f9..43944855af1843b5aa5a3b81fe732a625e5827f0 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -43,10 +44,10 @@ elements: |
       '#markup': 'Checked multiple triggered using AND operator'
       '#states':
         visible:
-          - ':input[name="checked_multiple_and_trigger[one]"]':
-              checked: true
-          - ':input[name="checked_multiple_and_trigger[two]"]':
-              checked: true
+          ':input[name="checked_multiple_and_trigger[one]"]':
+            checked: true
+          ':input[name="checked_multiple_and_trigger[two]"]':
+            checked: true
   checked_multiple_or:
     '#type': details
     '#title': 'Test Trigger: Checked multiple using OR operator'
@@ -64,6 +65,7 @@ elements: |
         visible:
           - ':input[name="checked_multiple_or_trigger[one]"]':
               checked: true
+          - or
           - ':input[name="checked_multiple_or_trigger[two]"]':
               checked: true
   checked_multiple_xor:
@@ -116,20 +118,7 @@ elements: |
         visible:
           ':input[name="filled_trigger"]':
             filled: true
-  collapsed:
-    '#type': details
-    '#title': 'Test Trigger: Collapsed'
-    '#description': 'Below example is not working.'
-    collapsed_trigger:
-      '#type': details
-      '#title': 'Trigger collapsed'
-    collapsed_markup:
-      '#type': webform_markup
-      '#markup': 'Collapsed triggered'
-      '#states':
-        visible:
-          'details[data-webform-key="collapsed_trigger"]':
-            collapsed: true
+  
 css: ''
 javascript: ''
 settings:
@@ -171,6 +160,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b7cdfcebbe84c4c397ef5d2560e0e0cc5473ea5a..e05d6ab5cbc1be2a129f97904775fe9a58c70271 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': textfield
     '#title': Name
     '#required': true
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 2fd098585d400787d7e0e4fd0c3201daf2fca44b..7ce478f70b156d43f75bcd9c3c0c587b22e232d3 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   value:
     '#type': textfield
     '#title': 'Enter a value'
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d3d18c125761862c3abc3058ce2c0fcf7eb71d28..34b9cf58815b5fd09eacb7756e1bd929eeb932dc 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,6 +19,7 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
+  
 css: ''
 javascript: ''
 settings:
@@ -59,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4f1c00ed084da2c5514bc702d995fe5543f83049..76589ec47d165e55fa035e1ec5fdee4ca12db72a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -125,6 +126,7 @@ elements: |
       Summary: [webform_submission:node:summary]
       Title: [webform_submission:node:title]
       URL: [webform_submission:node:url]
+  
 css: ''
 javascript: ''
 settings:
@@ -166,6 +168,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 07cd561f91a285c0e4c507f28d41855ce86b8017..cad7aad158f1351cd0a4083e97fdb952fdf3982d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -18,7 +19,7 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
-
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +61,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -124,7 +128,7 @@ settings:
     <p>You can view your submission via <a href="[webform_submission:token-view-url]">[webform_submission:token-view-url:relative]</a></p>
     <p>You can update your submission via <a href="[webform_submission:token-update-url]">[webform_submission:token-update-url:relative]</a></p>
     <p>You can delete your submission via <a href="[webform_submission:token-delete-url]">[webform_submission:token-delete-url:relative]</a></p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -227,7 +231,7 @@ handlers:
         <a href="[webform_submission:token-view-url]">[webform_submission:token-view-url]</a><br/>
         <a href="[webform_submission:token-update-url]">[webform_submission:token-update-url]</a><br/>
         <a href="[webform_submission:token-delete-url]">[webform_submission:token-delete-url]</a>
-
+        
       excluded_elements: {  }
       ignore_access: false
       exclude_empty: true
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 01c3ebcebdd2e3956540d7631a4454095dfd5058..a0422bb1191e0a4895c0e5df08ee57e770c5a84d 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -141,6 +142,7 @@ elements: |
     '#type': textfield
     '#title': script
     '#default_value': '<script>alert(''hi'');</script>'
+  
 css: ''
 javascript: ''
 settings:
@@ -182,6 +184,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 b5bb577c5de9b30d947ecd0cfd00bd4479ac7dc1..bc0809e0a25e6f79c1014cbd2283bb1acaec322a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -19,6 +20,7 @@ elements: |
     '#type': webform_variant
     '#title': test_offcanvas_width
     '#variant': test_offcanvas_width
+  
 css: ''
 javascript: ''
 settings:
@@ -60,6 +62,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 26c34198263a0a70648e2f64c136319aee5d149d..020a273b6f6a96797f5eceed1cda216b96896930 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -33,6 +34,7 @@ elements: |
     '#wrapper_attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px; '
     '#markup': '{0}'
+  
 css: ''
 javascript: ''
 settings:
@@ -74,6 +76,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 905ba3099425bac30257fd6d5cf65d8bb2106fc5..5e96fbe0719e0e8109018262fcdc8314bf0eb37a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -23,6 +24,7 @@ elements: |
   textfield:
     '#type': textfield
     '#title': textfield
+  
 css: ''
 javascript: ''
 settings:
@@ -64,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 75e7597c1f967f6c4805fec36ada202c3897d1e0..c186c894182b7b0d791fdb7a1af0b5cd27e0818a 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,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -25,6 +26,7 @@ elements: |
     '#attributes':
       style: 'display: inline-block; margin: 0; padding: 0 20px; font-size: 100px;'
     '#markup': '{X}'
+  
 css: ''
 javascript: ''
 settings:
@@ -66,6 +68,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 25e5865c738b446f215bb453ce9fb4e30bcbe532..7cd69144527b43aa3af0e4acc126b74209cee060 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 83b694736bc9a07f730089968813048ba1669289..d0fd9dc0fa183fb81341a2405c421821765b7256 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 f8275450bdae006721abcba3dc1ad490b2727b87..ac2cce1ea5f6568145a81ed8e058e8f334881383 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 2179671b18d575633a02a01bf20d647d2aa34b83..9da168fc7759635d18c6966e6246d25f73697d50 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 2856bb74d6ab1360377d0527093a500ece687038..1b493bfbfdc7ed63acf8c3b25117523f8d5a02fd 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 99ee4a7562aa3d4e228729a26eb88e2f8b7f7892..77094c2550db72c90f097b68c64b4ced03c6fbd8 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 c94d4fdb0c5ce6d2d3d26fec58a1f6ceb00a372e..36a70f290d43f3089459be870c3312df3007038a 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 881ab90456a165d7d5da224730811c8a6d63e69d..df0f02d88f5a22d98ce77a8935b6901a9d795bc9 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
index 8963d3ff692485375cf848d22209aa415700b3fb..ac6ceafccba38c3f26dbda54fa800139dccb1422 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_comp_file_plugin.yml
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
index 1e7bb957825812fe28e5ab925328a3e1f9daa9a1..796dfd821fd886c50ec896fc2f05794f70668997 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_composite_plugin.yml
@@ -70,6 +70,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
index 496af8c171540e2044b7b9c67c8963e10f0985a2..5bb5e5bc65879f7bff26e6e5ea5f13ad05c56cc1 100644
--- a/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
+++ b/web/modules/webform/tests/modules/webform_test_element/config/install/webform.webform.test_element_plugin.yml
@@ -19,11 +19,12 @@ elements: |
   description:
     '#markup': |
       <p>This webform includes a #test elememt which will trigger all methods associated with a WebformElement plugin.</p>
+      
   test:
     '#type': webform_test_element
     '#title': 'This is a test element'
     '#default_value': '{default_value}'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -65,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 4c48a1a64c084e55b0b52eacf95260d91008919b..9ae0eb6fe09bc171c5573d197bc9829116bb2615 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 09d7b60f597540d2fd9bcfadc8a6a968055767a8..b298473eb03a7aa1aee8f0832b5a0d7daba2e22a 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
index 315c6caadec29e1543d4271aecae587b1b8392a1..096aa10ba7da91f626ef2c89cd096cbfe3f5cf79 100644
--- a/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
+++ b/web/modules/webform/tests/modules/webform_test_entity_reference_views/config/install/webform.webform.test_element_entity_reference_vs.yml
@@ -176,6 +176,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 1ce13e1aa48f4cdb9b354fbd08effd39b04251d7..e86cdb2200a4a95a7530812f34347215faa9f520 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 3a41b49f8c4d611780375989877f3add501bc855..b89779792f9407d358b52d83cb5121610f3423a4 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
index 5a221692126d8e3fc7d601c74347d8afcf75c797..dd5c8e59dfcd035c0b77a9a3dd9640a71719dce1 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_conditions.yml
@@ -66,6 +66,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
diff --git a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
index e2ca66d110b27ab37fb6e5dfe55a453ac2421191..abb4f827dea7edcbf4b540203bad30d3cff94698 100644
--- a/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler/config/install/webform.webform.test_handler_test.yml
@@ -64,6 +64,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 19c69ec3579e27f210f107064cdee87d6584bb60..0601760a45c52e9005243fbc2b22983dbeba81a3 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 eb89cefdb0a64cb64d8d3da53eda556fca7acae6..712eaa2a2aab402c3138fd74584e1b3e5432c745 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
index 1b4599dc66bf3266da8998456494abda8d84e3f9..118735cbf02a753561b5f85a9a8a6929deee7812 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_get.yml
@@ -80,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -260,6 +263,7 @@ handlers:
           custom_header: 'true'
         
       cast: false
+      file_data: true
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
index c2c9a30f906027da6bab550e9ea7532ca04bd6f9..d3fe878467c0c33fc7395c2e9858dd1291b472d5 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post.yml
@@ -83,6 +83,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -264,6 +267,7 @@ handlers:
           custom_header: 'true'
         
       cast: false
+      file_data: true
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
index 2d91bfebc56e82d148adb490af5a1f9830d5dabb..218edf2caddf719b66add18df9bdc94afcef36c4 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_cast.yml
@@ -81,6 +81,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -260,7 +263,6 @@ handlers:
         float: '(float) 100.01'
         
       custom_options: ''
-      debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: ''
       updated_url: 'http://webform-test-handler-remote-post/updated'
@@ -277,4 +279,6 @@ handlers:
       messages: {  }
       error_url: ''
       cast: true
+      file_data: true
+      debug: true
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_error.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_error.yml
index 46e00892787e81ccc3da3f06c9d62763ece264ba..3ce78a771c8d5b08f69b576e8198d1949c8d03dd 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_error.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_error.yml
@@ -1,3 +1,4 @@
+uuid: null
 langcode: en
 status: open
 dependencies:
@@ -22,6 +23,7 @@ elements: |
     '#title': 'Response type'
     '#type': value
     '#value': 500
+  
 css: ''
 javascript: ''
 settings:
@@ -63,6 +65,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -125,7 +130,7 @@ settings:
   confirmation_title: ''
   confirmation_message: |
     <p>Your confirmation number is [webform_submission:values:confirmation_number].</p>
-
+    
   confirmation_url: ''
   confirmation_attributes: {  }
   confirmation_back: true
@@ -238,6 +243,7 @@ handlers:
       custom_data: ''
       custom_options: ''
       cast: false
+      file_data: true
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: ''
@@ -253,5 +259,5 @@ handlers:
       converted_custom_data: ''
       message: ''
       messages: {  }
-      error_url: '/error_url'
+      error_url: /error_url
 variants: {  }
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
index fbad48119dd893d15a58b65828d8423c7bc5d83d..1e54820c97c3f10d52f303e8226d25f8f7dcc24e 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_post_file.yml
@@ -69,6 +69,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -244,6 +247,7 @@ handlers:
       custom_data: ''
       custom_options: ''
       cast: false
+      file_data: true
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: ''
diff --git a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
index c9724b868befbe7bede9752aadbfa47e9eabffb7..3185911fae71652794694b38e87159138f40509c 100644
--- a/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
+++ b/web/modules/webform/tests/modules/webform_test_handler_remote_post/config/install/webform.webform.test_handler_remote_put.yml
@@ -80,6 +80,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -260,6 +263,7 @@ handlers:
           custom_header: 'true'
         
       cast: false
+      file_data: true
       debug: true
       completed_url: 'http://webform-test-handler-remote-post/completed'
       completed_custom_data: |
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 ca2cdbf0574e55fef7bc039e2d1425e2e9e69f29..004deaee4e82134c3965c33102db79fe2e81b72b 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 0fc65c43c1fcb50988c9b228836bc08e97d62753..829c05f14e7f0a21237482173316529651460c78 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 60c5023ecfa7a004b9040d8f3e5f0bdb24168694..75e2f0c98b6035f4a3e16b9551a68df6eb19e1cd 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
index 105dc83f950d2886ae6cd665da499b7dcdc0392b..6f39307aad7c45a024261ee95cad9c570a7b7522 100644
--- a/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
+++ b/web/modules/webform/tests/modules/webform_test_options/config/install/webform.webform.test_options.yml
@@ -266,6 +266,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 c67dba30e99be028dd1b2de741853c707fb3a41d..4929c5981c75fd7bcbe9b5a684540a3bcf34e4bb 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 6077d3969836e8bcab1bfe91e4d486cf66c6ecdb..3cd9e999aa36fb5fb273a93ff65e0abbb88b7ad2 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 2bf9b40a6e4998019f9324b95bf5cdfa5e83d3dc..8807882125bd2a8528c8f463425b0466934d2d17 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 86087b1b304e7c1948fe603dc1a8778d6d4d0199..18b2c93014972bd61488b36056ded44c16e2524f 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
index beb224c146a5a1e78d4c141b4f8904b2b46cc969..d7db98dc90ea37abbfd90ac86eaf431cce4fe9e2 100644
--- a/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
+++ b/web/modules/webform/tests/modules/webform_test_submissions/config/install/webform.webform.test_submissions.yml
@@ -101,6 +101,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
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 d95ce2edfb0c73250b25662e5c891ecccd14e257..a909c0c6ff202960be97a31974c1e42aa90faed6 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 4a95a72d5aec4a6fa7b57cbeb8825cfa7560c50a..363649df4c771c43d50a491ce46603d2ad822716 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.settings.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.settings.yml
index a41ad004cb258d88e6eb41a617a6890bd9c3e125..b0e9d293cb7c5609e7af03e08555239efe0aad23 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.settings.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.settings.yml
@@ -16,11 +16,11 @@ mail:
   default_body: |
     Enviada [webform_submission:created]
     Presentado por:[webform_submission:user]
-
+    
     Los valores presentados son:
-
+    
     [webform_submission:values]
-
+    
 test:
   types: |
     checkbox:
@@ -77,7 +77,7 @@ test:
     webform_time:
       - '09:00'
       - '17:00'
-
+    
   names: |
     first_name:
       - 'John'
diff --git a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
index 2fed9bbd67b044047092f13282ade361a8acafcf..88e88dd8705eb0e266856775340ee5b2327196aa 100644
--- a/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
+++ b/web/modules/webform/tests/modules/webform_test_translation/config/install/language/es/webform.webform.test_translation.yml
@@ -41,8 +41,8 @@ elements: |
         '#title': Edad
         '#field_suffix': 'años. antiguo'
   address:
-    '#title': 'Dirección'
-    '#address__title': 'Dirección'
+    '#title': Dirección
+    '#address__title': Dirección
     '#address_2__title': 'Dirección 2'
     '#city__title': 'Ciudad / Pueblo'
     '#state_province__title': 'Estado / Provincia'
@@ -65,6 +65,7 @@ variants:
       elements: |
         textfield:
           '#title': 'Campo de texto - Variante'
+        
 ˚weight: 0
 dependencies:
   enforced:
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 91551411d1b61adf02d2baf583461c1eb140232d..6488012a5bd530f568259b5160e9bebd0dde22a2 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
@@ -97,7 +97,7 @@ elements: |
     '#type': webform_actions
     '#title': 'Submit button(s)'
     '#submit__label': 'Send message'
-
+  
 css: ''
 javascript: ''
 settings:
@@ -139,6 +139,9 @@ settings:
   form_access_denied_message: ''
   form_access_denied_attributes: {  }
   form_file_limit: ''
+  form_method: ''
+  form_action: ''
+  form_attributes: {  }
   share: false
   share_node: false
   share_theme_name: ''
@@ -329,6 +332,6 @@ variants:
         textfield:
           '#title': 'Text field - Variant'
           '#type': textarea
-
+        
       handlers: {  }
       debug: false
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 ebda1e56dcd39dd6fbded0c22514ad6c1e6bd65b..917af9b1d425c240c5e8194e21ee62e1b7a4fea0 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 42dbf387e6db6c2676031c426d874b6b854188f7..919b5b173f7c19714ab2b21d1ca2ed7ebcaefa54 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 495ce940f41162a328490e111ce4999677aebcd3..15a13b65b24da5ee740d76766fe7f26528f97508 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 845cec1c32bb3bbf0c1618075eab0bb76f017dc3..2823513a99af7136bf81536941635e23f97454ec 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 3521dee35ba568a6fa2187f1732f3e4d16f6fa36..e04cea017f12ae735a9937794381ee0135342ffd 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
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 3ac3a7b3082d64a826bd0536fea9bf962eb3a7e8..37f0ae0d86b973ba83732567a79e302dd73213b5 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomTest.php b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomTest.php
index e4c590b74de68d5a235fd1fa6c17db210c27b7ac..d6073688a2dc5056ef38aaa285a4f6f3e1086cf5 100644
--- a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomTest.php
+++ b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeCustomTest.php
@@ -39,6 +39,13 @@ public function testCustom() {
     // Check advanced custom composite.
     $this->assertRaw('<span class="field-suffix"> yrs. old</span>');
 
+    // Check composite in fieldset.
+    $this->assertRaw('<fieldset class="fieldgroup form-composite js-webform-type-webform-custom-composite webform-type-webform-custom-composite js-form-item form-item js-form-wrapper form-wrapper" data-drupal-selector="edit-webform-custom-composite-fieldset" id="edit-webform-custom-composite-fieldset">');
+    $this->assertRaw('<span class="fieldset-legend">webform_custom_composite_fieldset</span>');
+
+    // Check composite in container.
+    $this->assertRaw('<div id="webform_custom_composite_container_table"><div class="custom-class js-form-wrapper form-wrapper" data-drupal-selector="edit-webform-custom-composite-container" id="edit-webform-custom-composite-container">');
+
     /* Processing */
 
     // Check contact composite value.
diff --git a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeTest.php b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeTest.php
index a480142c24216fafaa2149f080813ca79dc8956e..23531c79b2ce0a15ef9e80be44c9a11ca5d8f9ba 100644
--- a/web/modules/webform/tests/src/Functional/Composite/WebformCompositeTest.php
+++ b/web/modules/webform/tests/src/Functional/Composite/WebformCompositeTest.php
@@ -34,7 +34,7 @@ public function testComposite() {
     $this->drupalGet('/webform/test_composite');
 
     // Check webform contact basic.
-    $this->assertRaw('<fieldset data-drupal-selector="edit-contact-basic" id="edit-contact-basic--wrapper" class="webform-contact--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-webform-contact webform-type-webform-contact js-form-item form-item js-form-wrapper form-wrapper">');
+    $this->assertRaw('<fieldset data-drupal-selector="edit-contact-basic" id="edit-contact-basic--wrapper" class="webform-contact--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-webform-contact webform-type-webform-contact js-form-item form-item js-form-wrapper form-wrapper" aria-required="true">');
     $this->assertRaw('<span class="visually-hidden fieldset-legend js-form-required form-required">Contact basic</span>');
     $this->assertRaw('<label for="edit-contact-basic-name" class="js-form-required form-required">Name</label>');
     $this->assertRaw('<input data-drupal-selector="edit-contact-basic-name" type="text" id="edit-contact-basic-name" name="contact_basic[name]" value="John Smith" size="60" maxlength="255" class="form-text required" required="required" aria-required="true" />');
@@ -53,8 +53,8 @@ public function testComposite() {
 
     // Check link multiple in table.
     $this->assertRaw('<label>Link multiple</label>');
-    $this->assertRaw('<th class="link_multiple-table--title webform-multiple-table--title">Link Title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Link Title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is link title help&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
-    $this->assertRaw('<th class="link_multiple-table--url webform-multiple-table--url">Link URL<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Link URL&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is link url help&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<th class="link_multiple-table--title webform-multiple-table--title">Link Title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Link Title" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Link Title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is link title help&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<th class="link_multiple-table--url webform-multiple-table--url">Link URL<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Link URL" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Link URL&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is link url help&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     /* Processing */
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementAddressTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementAddressTest.php
index c27ac2310382aee89c14d2864afd5164ff40e265..f7a37592c4d7ae1267542ae846e5ac0077b1f103 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementAddressTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementAddressTest.php
@@ -46,7 +46,7 @@ public function testAddress() {
 
     // Check advanced fieldset, legend, help, and description.
     $this->assertRaw('<fieldset data-drupal-selector="edit-address-advanced" aria-describedby="edit-address-advanced--wrapper--description" id="edit-address-advanced--wrapper" class="address--wrapper fieldgroup form-composite webform-composite-visible-title webform-element-help-container--title webform-element-help-container--title-after js-webform-type-address webform-type-address js-form-item form-item js-form-wrapper form-wrapper">');
-    $this->assertRaw('<span class="fieldset-legend">address_advanced<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;address_advanced&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="fieldset-legend">address_advanced<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="address_advanced" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;address_advanced&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
     if (floatval(\Drupal::VERSION) >= 9) {
       $this->assertRaw('<div class="description"><div id="edit-address-advanced--wrapper--description" data-drupal-field-elements="description" class="webform-element-description">This is a description</div>');
     }
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementAttributesTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementAttributesTest.php
index c72d5f1ce4fd7e91c415ea830d136ca5c0d95805..7c53d5932e2a8161b48f841acfb560bf404e5b6b 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementAttributesTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementAttributesTest.php
@@ -20,6 +20,18 @@ class WebformElementAttributesTest extends WebformElementBrowserTestBase {
    * Tests element attributes.
    */
   public function testAttributes() {
+    /* Rendering */
+
+    $this->drupalGet('/webform/test_element_attributes');
+
+    // Check four and five are merged in class select other text field.
+    $this->assertFieldByName('webform_element_attributes[class][other]', 'four five');
+
+    // Check one, two, four, and five are merged in class text field.
+    $this->assertFieldByName('webform_element_attributes_no_classes[class]', 'one two four five');
+
+    /* Submit */
+
     // Check default value handling.
     $this->drupalPostForm('/webform/test_element_attributes', [], 'Submit');
     $this->assertRaw("webform_element_attributes:
@@ -27,8 +39,15 @@ class:
     - one
     - two
     - four
+    - five
   style: 'color: red'
-  custom: test");
+  custom: test
+webform_element_attributes_no_classes:
+  class:
+    - one
+    - two
+    - four
+    - five");
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementCodeMirrorTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementCodeMirrorTest.php
index 62c1848fd87a2bdf79d2b3ae2f67265894e13116..55cf55c230161003a743fde639921f18ee5b590e 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementCodeMirrorTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementCodeMirrorTest.php
@@ -51,6 +51,10 @@ public function testCodeMirror() {
   one: One
   two: Two
   three: Three
+yaml_indexed_array:
+  - one
+yaml_indexed_associative_array:
+  - one: One
 yaml_decode_value:
   test: hello");
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementCompositeTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementCompositeTest.php
index 22765c50920203070c4a524cb429d72a494d6d17..0c14f0e5c96b062898238ffadf66db32283760c9 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementCompositeTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementCompositeTest.php
@@ -118,10 +118,10 @@ public function testComposite() {
     $this->drupalGet('/webform/test_element_composite_wrapper');
 
     // Check fieldset wrapper.
-    $this->assertRaw('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset" id="edit-radios-wrapper-fieldset--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-visible-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper">');
+    $this->assertRaw('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset" id="edit-radios-wrapper-fieldset--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-visible-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" aria-required="true">');
 
     // Check fieldset wrapper with hidden title.
-    $this->assertRaw('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset-hidden-title" id="edit-radios-wrapper-fieldset-hidden-title--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper">');
+    $this->assertRaw('<fieldset data-drupal-selector="edit-radios-wrapper-fieldset-hidden-title" id="edit-radios-wrapper-fieldset-hidden-title--wrapper" class="radios--wrapper fieldgroup form-composite webform-composite-hidden-title required js-webform-type-radios webform-type-radios js-form-item form-item js-form-wrapper form-wrapper" aria-required="true">');
 
     // Check form element wrapper.
     $this->assertRaw('<div class="js-form-item form-item js-form-type-radios form-item-radios-wrapper-form-element js-form-item-radios-wrapper-form-element">');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementDetailsTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementDetailsTest.php
index 08debedb213e84248a5ab222a6ec4b3e84baf8f3..980c32d9c5d3e0dc2581ff6174ac22f4168bdba7 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementDetailsTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementDetailsTest.php
@@ -26,7 +26,7 @@ public function testDetails() {
     // and more. Also, check that invalid 'required' and 'aria-required'
     // attributes are removed.
     $this->assertRaw('<details data-webform-key="details" data-drupal-selector="edit-details" aria-describedby="edit-details--description" id="edit-details" class="js-form-wrapper form-wrapper required webform-element-help-container--title webform-element-help-container--title-after" open="open">');
-    $this->assertRaw('<summary role="button" aria-controls="edit-details" aria-expanded="true" aria-pressed="true" class="js-form-required form-required">details<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;details&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span>');
+    $this->assertRaw('<summary role="button" aria-controls="edit-details" aria-expanded="true" aria-pressed="true" class="js-form-required form-required">details<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="details" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;details&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span>');
     $this->assertRaw('<div id="edit-details--description" class="webform-element-description">This is a description.</div>');
     $this->assertRaw('<div id="edit-details--more" class="js-webform-element-more webform-element-more">');
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementFieldsetTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementFieldsetTest.php
index cd23072598d7be39b5cfc562b2933cb8c28ca980..e928ab6a047ad1834e67c2fb5a62182296c21822 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementFieldsetTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementFieldsetTest.php
@@ -25,8 +25,8 @@ public function testFieldset() {
     // Check fieldset with help, field prefix, field suffix, description,
     // and more. Also, check that invalid 'required' and 'aria-required'
     // attributes are removed.
-    $this->assertRaw('<fieldset class="webform-has-field-prefix webform-has-field-suffix required webform-element-help-container--title webform-element-help-container--title-after js-webform-type-fieldset webform-type-fieldset js-form-item form-item js-form-wrapper form-wrapper" data-drupal-selector="edit-fieldset" aria-describedby="edit-fieldset--description" id="edit-fieldset">');
-    $this->assertRaw('<span class="fieldset-legend js-form-required form-required">fieldset<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;fieldset&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<fieldset class="webform-has-field-prefix webform-has-field-suffix required webform-element-help-container--title webform-element-help-container--title-after js-webform-type-fieldset webform-type-fieldset js-form-item form-item js-form-wrapper form-wrapper" data-drupal-selector="edit-fieldset" aria-describedby="edit-fieldset--description" id="edit-fieldset" aria-required="true">');
+    $this->assertRaw('<span class="fieldset-legend js-form-required form-required">fieldset<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="fieldset" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;fieldset&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
     $this->assertRaw('<span class="field-prefix">prefix</span>');
     $this->assertRaw('<span class="field-suffix">suffix</span>');
     $this->assertRaw('<div class="description">');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementHelpTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementHelpTest.php
index 96a7e4027bd93e9e581cccbb09ee219700fd1760..d6c56f3095501b43a87a0224763c48d4d3a872ac 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementHelpTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementHelpTest.php
@@ -23,47 +23,50 @@ public function testHelp() {
     $this->drupalGet('/webform/test_element_help');
 
     // Check basic help.
-    $this->assertRaw('<label for="edit-help">help<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help">help<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check help with required.
-    $this->assertRaw('<label for="edit-help-required" class="js-form-required form-required">help_required<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_required&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a required element}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-required" class="js-form-required form-required">help_required<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_required" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_required&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a required element}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check help with custom title.
-    $this->assertRaw('<label for="edit-help-title">help_title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;{Help custom title}&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with a custom help title}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-title">help_title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="{Help custom title}" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;{Help custom title}&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with a custom help title}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check help with HTML markup.
-    $this->assertRaw('<label for="edit-help-html">help_html<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_html&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with &lt;b&gt;HTML markup&lt;/b&gt;}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-html">help_html<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_html" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_html&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with &lt;b&gt;HTML markup&lt;/b&gt;}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check help with XSS.
-    $this->assertRaw('<label for="edit-help-xss">help_xss<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_xss&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with &lt;b&gt;XSS alert(&quot;XSS&quot;)&lt;/b&gt;}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-xss">help_xss<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_xss" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_xss&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with &lt;b&gt;XSS alert(&quot;XSS&quot;)&lt;/b&gt;}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+
+    // Check help empty.
+    $this->assertRaw('<label for="edit-help-empty">help_empty</label>');
 
     // Check help with inline title.
-    $this->assertRaw('<label for="edit-help-checkbox" class="option">help_checkbox<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_checkbox&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
-    $this->assertRaw('<label for="edit-help-inline"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_inline&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with an inline title}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-checkbox" class="option">help_checkbox<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_checkbox" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_checkbox&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-help-inline"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_inline" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_inline&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help with an inline title}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check radios (fieldset).
-    $this->assertRaw('<span class="fieldset-legend">help_radios<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_radios&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for radio buttons}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="fieldset-legend">help_radios<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_radios" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_radios&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for radio buttons}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check fieldset.
-    $this->assertRaw('<span class="fieldset-legend">help_radios<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_radios&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for radio buttons}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="fieldset-legend">help_radios<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_radios" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_radios&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for radio buttons}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check details.
-    $this->assertRaw('<summary role="button" aria-controls="edit-help-details" aria-expanded="false" aria-pressed="false">help_details<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_details&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a details element}&lt;/div&gt;"><span aria-hidden="true">?</span>');
+    $this->assertRaw('<summary role="button" aria-controls="edit-help-details" aria-expanded="false" aria-pressed="false">help_details<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_details" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_details&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a details element}&lt;/div&gt;"><span aria-hidden="true">?</span>');
 
     // Check section.
-    $this->assertRaw('<h2 class="webform-section-title">help_section<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_section&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a section element}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<h2 class="webform-section-title">help_section<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_section" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_section&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help for a section element}&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check help display title after.
-    $this->assertRaw('<label for="edit-help-after-title">help_after_title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_after_title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></label>');
+    $this->assertRaw('<label for="edit-help-after-title">help_after_title<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_after_title" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_after_title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></label>');
 
     // Check help display title before.
-    $this->assertRaw('<label for="edit-help-before-title"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_before_title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>help_before_title</label>');
+    $this->assertRaw('<label for="edit-help-before-title"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_before_title" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_before_title&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span>help_before_title</label>');
 
     // Check help display element after.
-    $this->assertRaw('<span class="field-suffix"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_after_element&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></span>');
+    $this->assertRaw('<span class="field-suffix"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_after_element" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_after_element&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></span>');
 
     // Check help display element before.
-    $this->assertRaw('<span class="field-prefix"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_before_element&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></span>');
+    $this->assertRaw('<span class="field-prefix"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="help_before_element" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;help_before_element&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;{This is an example of help}&lt;/div&gt;"><span aria-hidden="true">?</span></span></span>');
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
index 0c107bab9ba0011fe991ae81826c73d41b63a3e7..40552f801ed6327c76227739d17a2003fa73cf0e 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementLikertTest.php
@@ -45,9 +45,9 @@ public function testLikertElement() {
     $this->assertRaw('<span class="webform-likert-description hidden">This is a description</span>');
 
     // Check likert with help.
-    $this->assertRaw('<th>Option 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Option 1&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
-    $this->assertRaw('<label>Question 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Question 1&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
-    $this->assertRaw('<label for="edit-likert-help-q1--2" class="option"><span class="webform-likert-label visually-hidden">Option 2<span class="webform-likert-help hidden"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Option 2&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<th>Option 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Option 1" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Option 1&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label>Question 1<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Question 1" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Question 1&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-likert-help-q1--2" class="option"><span class="webform-likert-label visually-hidden">Option 2<span class="webform-likert-help hidden"><span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Option 2" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Option 2&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check likert with custom required error.
     $this->drupalPostForm('/webform/test_element_likert', [], 'Submit');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementMappingTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementMappingTest.php
index 5dfa8b0a308a3ae5b2f30e8125f8b2900e16ffe9..52189dfe26aad8ef9c4f26353e3ca9e056bd1e4c 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementMappingTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementMappingTest.php
@@ -31,7 +31,7 @@ public function testMappingElement() {
     $this->assertRaw('<td>One &rarr;<div class="description js-form-wrapper form-wrapper" data-drupal-selector="edit-table-one-source-data-description" id="edit-table-one-source-data-description">This is a description. This is a <a href="https://google.com">link</a></div>');
 
     // Check source help.
-    $this->assertRaw('<td>One<span data-drupal-selector="edit-table-one-source-data-help" class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;One&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help. This is a &lt;a href=&quot;https://google.com&quot;&gt;link&lt;/a&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span> &rarr;</td>');
+    $this->assertRaw('<td>One<span data-drupal-selector="edit-table-one-source-data-help" class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="One" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;One&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help. This is a &lt;a href=&quot;https://google.com&quot;&gt;link&lt;/a&gt;&lt;/div&gt;"><span aria-hidden="true">?</span></span> &rarr;</td>');
 
     // Check custom element.
     $this->assertRaw('<th>{Custom source} &raquo;</th>');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
index 8518c2d907b43c59379da3e56165366c8fd74ae0..8c7f75f8c8cf7f79ad094910354fd03634d0a35e 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
@@ -4607,10 +4607,10 @@ protected function getExpectedElementDefaultProperties() {
   field_prefix: ''
   field_suffix: ''
   flex: 1
-  format: ol
+  format: value
   format_attributes: {  }
   format_html: ''
-  format_items: comma
+  format_items: ol
   format_items_html: ''
   format_items_text: ''
   format_text: ''
@@ -4661,10 +4661,10 @@ protected function getExpectedElementDefaultProperties() {
   field_prefix: ''
   field_suffix: ''
   flex: 1
-  format: ol
+  format: value
   format_attributes: {  }
   format_html: ''
-  format_items: comma
+  format_items: ol
   format_items_html: ''
   format_items_text: ''
   format_text: ''
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementRadiosTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementRadiosTest.php
index 2fa5078f07fe365e566e1a5ef5cda2df808adca8..ea1b859b486108918d0ac052525da5c8c7f4bb54 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementRadiosTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementRadiosTest.php
@@ -31,7 +31,7 @@ public function testElementRadios() {
 
     // Check radios with help text display.
     $this->assertRaw('<input data-drupal-selector="edit-radios-help-one" type="radio" id="edit-radios-help-one" name="radios_help" value="one" class="form-radio" />');
-    $this->assertRaw('<label for="edit-radios-help-one" class="option">One<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;One&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is a description&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<label for="edit-radios-help-one" class="option">One<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="One" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;One&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is a description&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check radios displayed as buttons.
     $this->assertRaw('<div id="edit-radios-buttons" class="js-webform-radios webform-options-display-buttons"><div class="webform-options-display-buttons-wrapper">');
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
index fe71408838de4aa1f08c8bd27065d1240cbf0464..5e10689c1f359c727e5886c5bb0a8a1ccbde2214 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementSectionTest.php
@@ -24,7 +24,7 @@ public function testSection() {
 
     // Check section element.
     $this->assertRaw('<section data-drupal-selector="edit-webform-section" aria-describedby="edit-webform-section--description" id="edit-webform-section" class="required webform-element-help-container--title webform-element-help-container--title-after js-form-item form-item js-form-wrapper form-wrapper webform-section" required="required" aria-required="true">');
-    $this->assertRaw('<h2 class="webform-section-title js-form-required form-required">webform_section<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;webform_section&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<h2 class="webform-section-title js-form-required form-required">webform_section<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="webform_section" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;webform_section&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;This is help text.&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
     $this->assertRaw('<div class="description"><div id="edit-webform-section--description" class="webform-element-description">This is a description.</div>');
     $this->assertRaw('<div id="edit-webform-section--more" class="js-webform-element-more webform-element-more">');
 
diff --git a/web/modules/webform/tests/src/Functional/Element/WebformElementValidateRequiredTest.php b/web/modules/webform/tests/src/Functional/Element/WebformElementValidateRequiredTest.php
index edf0358a6613eff057a1c0c03c579c5c3bfbc23e..a8711866bfdc6383b8815b08cccc052f318f7170 100644
--- a/web/modules/webform/tests/src/Functional/Element/WebformElementValidateRequiredTest.php
+++ b/web/modules/webform/tests/src/Functional/Element/WebformElementValidateRequiredTest.php
@@ -22,10 +22,11 @@ class WebformElementValidateRequiredTest extends WebformElementBrowserTestBase {
   public function testPattern() {
     // Check that HTML tags are stripped  from required error attribute.
     $this->drupalGet('/webform/test_element_validate_required');
-    $this->assertRaw(' <input data-webform-required-error="This is a custom required message" data-drupal-selector="edit-required-textfield-html" type="text" id="edit-required-textfield-html" name="required_textfield_html" value="" size="60" maxlength="255" class="form-text required" required="required" aria-required="true" />');
+    $this->assertRaw('<input data-webform-required-error="This is a custom required message" data-drupal-selector="edit-required-error-textfield" type="text" id="edit-required-error-textfield" name="required_error_textfield" value="" size="60" maxlength="255" class="form-text required" required="required" aria-required="true" />');
 
     // Check that HTML tags are rendered in validation message.
     $this->drupalPostForm('/webform/test_element_validate_required', [], 'Submit');
+    $this->assertRaw(' <li>required_error_textfield_<em>html</em> field is required.</li>');
     $this->assertRaw('<li>This is a <em>custom required message</em></li>');
   }
 
diff --git a/web/modules/webform/tests/src/Functional/Form/WebformFormPropertiesTest.php b/web/modules/webform/tests/src/Functional/Form/WebformFormPropertiesTest.php
index 29737ebf94a3b0d0754b04d2a7545b0433204c01..7ae269372bad9b5dd9a926e791a57461dbd8f788 100644
--- a/web/modules/webform/tests/src/Functional/Form/WebformFormPropertiesTest.php
+++ b/web/modules/webform/tests/src/Functional/Form/WebformFormPropertiesTest.php
@@ -32,18 +32,18 @@ public function testProperties() {
     $this->drupalGet('/webform/test_form_properties');
     $this->assertPattern('/Form prefix<form /');
     $this->assertPattern('/<\/form>\s+Form suffix/');
-    $this->assertRaw('<form class="webform-submission-form webform-submission-add-form webform-submission-test-form-properties-form webform-submission-test-form-properties-add-form test-form-properties js-webform-details-toggle webform-details-toggle" invalid="invalid" style="border: 10px solid red; padding: 1em;" data-drupal-selector="webform-submission-test-form-properties-add-form" action="https://www.google.com/search" method="get" id="webform-submission-test-form-properties-add-form" accept-charset="UTF-8">');
+    $this->assertRaw('<form invalid="invalid" class="webform-submission-form webform-submission-add-form webform-submission-test-form-properties-form webform-submission-test-form-properties-add-form test-form-properties js-webform-details-toggle webform-details-toggle" style="border: 10px solid red; padding: 1em;" data-drupal-selector="webform-submission-test-form-properties-add-form" action="https://www.google.com/search" method="get" id="webform-submission-test-form-properties-add-form" accept-charset="UTF-8">');
 
     // Check editing webform settings style attributes and custom properties
     // updates the element's root properties.
     $this->drupalLogin($this->rootUser);
     $edit = [
-      'attributes[class][select][]' => ['form--inline clearfix', '_other_'],
-      'attributes[class][other]' => 'test-form-properties',
-      'attributes[style]' => 'border: 10px solid green; padding: 1em;',
-      'attributes[attributes]' => '',
-      'method' => '',
-      'action' => '',
+      'form_attributes[class][select][]' => ['form--inline clearfix', '_other_'],
+      'form_attributes[class][other]' => 'test-form-properties',
+      'form_attributes[style]' => 'border: 10px solid green; padding: 1em;',
+      'form_attributes[attributes]' => '',
+      'form_method' => '',
+      'form_action' => '',
       'custom' => "'suffix': 'Form suffix TEST'
 'prefix': 'Form prefix TEST'",
     ];
diff --git a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
index b9828df0e531acf1d530643cf2daae106cc95791..2c896d9cd2455d50158bb03737ab5a37da5a8652 100644
--- a/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
+++ b/web/modules/webform/tests/src/Functional/Handler/WebformHandlerRemotePostTest.php
@@ -301,6 +301,29 @@ public function testRemotePostHandler() {
       uuid: $files_uuid
       data: dGhpcyBpcyBhIHNhbXBsZSB0eHQgZmlsZQppdCBoYXMgdHdvIGxpbmVzCg==");
 
+    // Check the file data is NOT appended to form params.
+    $handler = $webform->getHandler('remote_post');
+    $handler->setSetting('file_data', FALSE);
+    $webform->save();
+    $this->drupalPostForm("/admin/structure/webform/manage/test_handler_remote_post_file/submission/$sid/edit", [], t('Save'));
+    $this->assertRaw("form_params:
+  file: 1
+  files:
+    - 2
+  _file:
+    id: $file_id
+    name: file.txt
+    uri: 'private://webform/test_handler_remote_post_file/$sid/file.txt'
+    mime: text/plain
+    uuid: $file_uuid
+  _files:
+    -
+      id: $files_id
+      name: files.txt
+      uri: 'private://webform/test_handler_remote_post_file/$sid/files.txt'
+      mime: text/plain
+      uuid: $files_uuid");
+
     /**************************************************************************/
     // POST cast.
     /**************************************************************************/
diff --git a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAdminTest.php b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAdminTest.php
index 15fac793520e67100321e407cfd6ac6b5ffc1576..118a56b0c9b1ae5acba03d606e30e39933ee96c0 100644
--- a/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAdminTest.php
+++ b/web/modules/webform/tests/src/Functional/Settings/WebformSettingsAdminTest.php
@@ -106,11 +106,11 @@ public function testAdminSettings() {
 
     // Check moving #description to #help for webform admin routes.
     $this->drupalPostForm('/admin/structure/webform/config/advanced', ['ui[description_help]' => TRUE], 'Save configuration');
-    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Display element description as help text (tooltip)&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;If checked, all element descriptions will be moved to help text (tooltip).&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Display element description as help text (tooltip)" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Display element description as help text (tooltip)&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;If checked, all element descriptions will be moved to help text (tooltip).&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     // Check moving #description to #help for webform admin routes.
     $this->drupalPostForm('/admin/structure/webform/config/advanced', ['ui[description_help]' => FALSE], 'Save configuration');
-    $this->assertNoRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Display element description as help text (tooltip)&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;If checked, all element descriptions will be moved to help text (tooltip).&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
+    $this->assertNoRaw('<span class="webform-element-help js-webform-element-help" role="tooltip" tabindex="0" aria-label="Display element description as help text (tooltip)" data-webform-help="&lt;div class=&quot;webform-element-help--title&quot;&gt;Display element description as help text (tooltip)&lt;/div&gt;&lt;div class=&quot;webform-element-help--content&quot;&gt;If checked, all element descriptions will be moved to help text (tooltip).&lt;/div&gt;"><span aria-hidden="true">?</span></span>');
 
     /* Toolbar */
 
diff --git a/web/modules/webform/tests/src/Functional/Views/WebformViewsBulkFormTest.php b/web/modules/webform/tests/src/Functional/Views/WebformViewsBulkFormTest.php
index 24c9d8afe32b2e2c5727ef97c4908b1a9c054ea1..e8423ff79339f47729b5e6a3c477fd778c19a190 100644
--- a/web/modules/webform/tests/src/Functional/Views/WebformViewsBulkFormTest.php
+++ b/web/modules/webform/tests/src/Functional/Views/WebformViewsBulkFormTest.php
@@ -88,7 +88,8 @@ public function testViewsBulkForm() {
       'action' => 'webform_submission_delete_action',
     ];
     $this->drupalPostForm('/admin/structure/webform/test/views_bulk_form', $edit, 'Apply to selected items');
-    $this->drupalPostForm(NULL, [], 'Delete');
+    $this->drupalPostForm(NULL, ['confirm_input' => TRUE], 'Delete');
+
     $webform_submission = $this->loadSubmission($webform_submission->id());
     $this->assertNull($webform_submission, '1: Webform submission has been deleted');
 
diff --git a/web/modules/webform/tests/src/Functional/WebformEditorTest.php b/web/modules/webform/tests/src/Functional/WebformEditorTest.php
index 3f648174e5be80d9bb7d3cd3073ad61bd0ad33f9..230294ed7eea36b8fe19e3671d6ab16f6e02f9ca 100644
--- a/web/modules/webform/tests/src/Functional/WebformEditorTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformEditorTest.php
@@ -168,7 +168,7 @@ public function testWebformSettingsFiles() {
     $this->assertFalse($images[0]->isTemporary());
 
     // Delete the webform.
-    Webform::load('contact')->delete();
+    $this->reloadWebform('contact')->delete();
     $this->reloadImages($images);
 
     // Check that file is temporary after the webform is deleted.
diff --git a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
index 3869d030bb89fabc3f2b15d9173a2256390c143d..2f92c5e99e44afbe6847bd72d5f3dba541642eb7 100644
--- a/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformEntityTranslationTest.php
@@ -271,6 +271,7 @@ public function testWebformTranslate() {
 
     // Make sure the site language is English (en).
     \Drupal::configFactory()->getEditable('system.site')->set('default_langcode', 'en')->save();
+    drupal_flush_all_caches();
 
     $language_manager = \Drupal::languageManager();
 
@@ -304,6 +305,7 @@ public function testWebformTranslate() {
 
     // Make sure the site language is English (en).
     \Drupal::configFactory()->getEditable('system.site')->set('default_langcode', 'en')->save();
+    drupal_flush_all_caches();
 
     // Duplicate translated webform.
     $edit = [
diff --git a/web/modules/webform/tests/src/Functional/WebformListBuilderTest.php b/web/modules/webform/tests/src/Functional/WebformListBuilderTest.php
index 4b62f5283f719765c9b3df1c72ecf2a012522d89..c8b395c20a71c2c0eb543c65cf0c0061cc10c62c 100644
--- a/web/modules/webform/tests/src/Functional/WebformListBuilderTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformListBuilderTest.php
@@ -17,9 +17,9 @@ class WebformListBuilderTest extends WebformBrowserTestBase {
   public static $modules = ['node', 'webform', 'webform_test_submissions'];
 
   /**
-   * Tests the webform overview filter.
+   * Tests the webform overview filter and limit.
    */
-  public function testFilter() {
+  public function testFilterAndLimit() {
     $this->drupalLogin($this->rootUser);
 
     // Check filter default category and state.
@@ -42,6 +42,168 @@ public function testFilter() {
     $this->drupalGet('/admin/structure/webform', ['query' => ['category' => '', 'state' => '']]);
     $this->assertOptionSelected('edit-category', '');
     $this->assertOptionSelected('edit-state', '');
+
+    // Clear the filters.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('form.filter_category', '')
+      ->set('form.filter_state', '')
+      ->save();
+
+    // Check that two webforms are displayed when the limit is 50.
+    $this->drupalGet('/admin/structure/webform');
+    $this->assertFieldByName('items[contact]');
+    $this->assertFieldByName('items[test_submissions]');
+    $this->assertNoCssSelect('.pager');
+
+    // Create 1 extra webform and set the limit to 1.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('form.limit', 1)
+      ->save();
+
+    // Check the now only one webform is displayed.
+    $this->drupalGet('/admin/structure/webform');
+    $this->assertFieldByName('items[contact]');
+    $this->assertNoFieldByName('items[test_submissions]');
+    $this->assertCssSelect('.pager');
+  }
+
+  /**
+   * Tests the webform overview bulk operations.
+   */
+  public function testBulkOperations() {
+    // Add three test webforms.
+    /** @var \Drupal\webform\Entity\Webform[] $webforms */
+    $webforms = [
+      $this->createWebform(['id' => 'one']),
+      $this->createWebform(['id' => 'two']),
+      $this->createWebform(['id' => 'three']),
+    ];
+
+    $this->drupalLogin($this->rootUser);
+
+    // Check bulk operation access.
+    $this->drupalGet('/admin/structure/webform');
+    $this->assertCssSelect('#webform-bulk-form');
+    $this->assertCssSelect('#edit-items-one');
+    $this->assertCssSelect('#edit-items-two');
+    $this->assertCssSelect('#edit-items-three');
+
+    // Check available actions when NOT filtered by archived webforms.
+    $this->drupalGet('/admin/structure/webform');
+    $this->assertCssSelect('option[value="webform_open_action"]');
+    $this->assertCssSelect('option[value="webform_close_action"]');
+    $this->assertCssSelect('option[value="webform_archive_action"]');
+    $this->assertNoCssSelect('option[value="webform_unarchive_action"]');
+    $this->assertCssSelect('option[value="webform_delete_action"]');
+
+    // Check available actions when filtered by archived webforms.
+    $this->drupalGet('/admin/structure/webform', ['query' => ['state' => 'archived']]);
+    $this->assertNoCssSelect('option[value="webform_open_action"]');
+    $this->assertNoCssSelect('option[value="webform_close_action"]');
+    $this->assertNoCssSelect('option[value="webform_archive_action"]');
+    $this->assertCssSelect('option[value="webform_unarchive_action"]');
+    $this->assertCssSelect('option[value="webform_delete_action"]');
+
+    /**************************************************************************/
+    // Disable/Enable.
+    /**************************************************************************/
+
+    // Check bulk operation disable.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('settings.webform_bulk_form', FALSE)
+      ->save();
+    $this->drupalGet('/admin/structure/webform');
+    $this->assertNoCssSelect('#webform-bulk-form');
+
+    // Re-enable bulk operations.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('settings.webform_bulk_form', TRUE)
+      ->save();
+
+    /**************************************************************************/
+    // Open/Close.
+    /**************************************************************************/
+
+    // Check webform one is opened.
+    $this->assertTrue($webforms[0]->isOpen());
+
+    // Check webform close action.
+    $edit = [
+      'action' => 'webform_close_action',
+      'items[one]' => TRUE,
+    ];
+    $this->drupalPostForm('/admin/structure/webform', $edit, 'Apply to selected items', [], 'webform-bulk-form');
+    $this->assertRaw('<em class="placeholder">Close webform</em> was applied to 1 item.');
+    $this->assertCssSelect('#edit-items-one');
+    $this->assertCssSelect('#edit-items-two');
+    $this->assertCssSelect('#edit-items-three');
+
+    // Check webform one is now closed.
+    $webforms[0] = $this->reloadWebform('one');
+    $this->assertTrue($webforms[0]->isClosed());
+
+    // Check webform close action.
+    $edit = [
+      'action' => 'webform_open_action',
+      'items[one]' => TRUE,
+    ];
+    $this->drupalPostForm('/admin/structure/webform', $edit, 'Apply to selected items', [], 'webform-bulk-form');
+    $this->assertRaw('<em class="placeholder">Open webform</em> was applied to 1 item.');
+
+    // Check webform one is now open.
+    $webforms[0] = $this->reloadWebform('one');
+    $this->assertTrue($webforms[0]->isOpen());
+
+    /**************************************************************************/
+    // Archive/Restore.
+    /**************************************************************************/
+
+    // Check webform archive action.
+    $edit = [
+      'action' => 'webform_archive_action',
+      'items[one]' => TRUE,
+    ];
+    $this->drupalPostForm('/admin/structure/webform', $edit, 'Apply to selected items', [], 'webform-bulk-form');
+    $this->assertRaw('<em class="placeholder">Archive webform</em> was applied to 1 item.');
+    $this->assertNoCssSelect('#edit-items-one');
+
+    // Check webform one is now archived.
+    $webforms[0] = $this->reloadWebform('one');
+    $this->assertTrue($webforms[0]->isArchived());
+    $this->drupalGet('/admin/structure/webform', ['query' => ['state' => 'archived']]);
+    $this->assertCssSelect('#edit-items-one');
+
+    // Check webform unarchive action.
+    $edit = [
+      'action' => 'webform_unarchive_action',
+      'items[one]' => TRUE,
+    ];
+    $this->drupalPostForm('/admin/structure/webform', $edit, 'Apply to selected items', ['query' => ['state' => 'archived']], 'webform-bulk-form');
+    $this->assertRaw('<em class="placeholder">Restore webform</em> was applied to 1 item.');
+
+    // Check webform one is now archived.
+    $webforms[0] = $this->reloadWebform('one');
+    $this->assertFalse($webforms[0]->isArchived());
+
+    /**************************************************************************/
+    // Delete.
+    /**************************************************************************/
+
+    // Check webform delete action.
+    $edit = [
+      'action' => 'webform_delete_action',
+      'items[one]' => TRUE,
+    ];
+    $this->drupalPostForm('/admin/structure/webform', $edit, 'Apply to selected items', [], 'webform-bulk-form');
+    $edit = [
+      'confirm_input' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Delete');
+    $this->assertRaw('Deleted 1 item.');
+
+    // Check webform one is now deleted.
+    $webforms[0] = $this->reloadWebform('one');
+    $this->assertNull($webforms[0]);
   }
 
   /**
diff --git a/web/modules/webform/tests/src/Functional/WebformOptionsTest.php b/web/modules/webform/tests/src/Functional/WebformOptionsTest.php
index aaa9ac5debbc5528657e12696d1b8d0d602c4813..64a9d5241190610326a55bc7fdeab0cf4b9d4d40 100644
--- a/web/modules/webform/tests/src/Functional/WebformOptionsTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformOptionsTest.php
@@ -129,6 +129,10 @@ public function testWebformOptions() {
     $this->assertResponse(200);
     $this->drupalGet('/admin/structure/webform/options/manage/add');
     $this->assertResponse(200);
+
+    // Check duplicate copies dynamic options.
+    $this->drupalGet('/admin/structure/webform/options/time_zones/duplicate');
+    $this->assertRaw('Africa/Abidjan: Africa/Abidjan');
   }
 
 }
diff --git a/web/modules/webform/tests/src/Functional/WebformResultsExportOptionsTest.php b/web/modules/webform/tests/src/Functional/WebformResultsExportOptionsTest.php
index c6a970c24cc7639f60149b9c6737bcb97ff23533..4e6e17db71167a1632f894e4da6b4d1ba3e2d7a5 100644
--- a/web/modules/webform/tests/src/Functional/WebformResultsExportOptionsTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformResultsExportOptionsTest.php
@@ -159,6 +159,13 @@ public function testExportOptions() {
     $this->assertRaw('Abraham,Lincoln');
     $this->assertNoRaw('Hillary,Clinton');
 
+    // Check uid.
+    $submissions[0]->setOwner($admin_submission_user)->save();
+    $this->getExport($webform, ['uid' => $admin_submission_user->id()]);
+    $this->assertRaw('George,Washington');
+    $this->assertNoRaw('Abraham,Lincoln');
+    $this->assertNoRaw('Hillary,Clinton');
+
     // Check date range.
     $this->getExport($webform, ['range_type' => 'date', 'range_start' => '2000-01-01', 'range_end' => '2001-01-01']);
     $this->assertRaw('George,Washington');
diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderBulkOperationsTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderBulkOperationsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d326a807164a06d885e38f70eb37ba4cec74401b
--- /dev/null
+++ b/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderBulkOperationsTest.php
@@ -0,0 +1,185 @@
+<?php
+
+namespace Drupal\Tests\webform\Functional;
+
+use Drupal\webform\Entity\Webform;
+
+/**
+ * Tests for webform submission list builder.
+ *
+ * @group webform
+ */
+class WebformSubmissionListBuilderBulkOperationsTest extends WebformBrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['node', 'webform', 'webform_test_submissions'];
+
+  /**
+   * Webforms to load.
+   *
+   * @var array
+   */
+  protected static $testWebforms = ['test_submissions'];
+
+  /**
+   * Tests results.
+   */
+  public function testResults() {
+    $admin_submission_user = $this->drupalCreateUser([
+      'administer webform submission',
+    ]);
+
+    $update_submission_user = $this->drupalCreateUser([
+      'view any webform submission',
+      'edit any webform submission',
+    ]);
+
+    /** @var \Drupal\webform\WebformInterface $webform */
+    $webform = Webform::load('test_submissions');
+
+    /** @var \Drupal\webform\WebformSubmissionInterface[] $submissions */
+    $submissions = array_values(\Drupal::entityTypeManager()->getStorage('webform_submission')->loadByProperties(['webform_id' => 'test_submissions']));
+
+    $path = '/admin/structure/webform/manage/' . $webform->id() . '/results/submissions';
+
+    /**************************************************************************/
+
+    // Login the admin submission user.
+    $this->drupalLogin($admin_submission_user);
+
+    // Check bulk operation access.
+    $this->drupalGet($path);
+    $this->assertCssSelect('#webform-submission-bulk-form');
+    $this->assertCssSelect('#edit-items-' . $submissions[0]->id());
+    $this->assertCssSelect('#edit-items-' . $submissions[1]->id());
+    $this->assertCssSelect('#edit-items-' . $submissions[2]->id());
+
+    // Check available actions when NOT filtered by archived webforms.
+    $this->drupalGet($path);
+    $this->assertCssSelect('option[value="webform_submission_make_sticky_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_unsticky_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_lock_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_unlock_action"]');
+    $this->assertCssSelect('option[value="webform_submission_delete_action"]');
+
+    /**************************************************************************/
+    // Access.
+    /**************************************************************************/
+
+    // Login the update submission user.
+    $this->drupalLogin($update_submission_user);
+
+    $this->drupalGet($path);
+    $this->assertCssSelect('option[value="webform_submission_make_sticky_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_unsticky_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_lock_action"]');
+    $this->assertCssSelect('option[value="webform_submission_make_unlock_action"]');
+    $this->assertNoCssSelect('option[value="webform_submission_delete_action"]');
+
+    // Login the admin submission user.
+    $this->drupalLogin($admin_submission_user);
+
+    /**************************************************************************/
+    // Disable/Enable.
+    /**************************************************************************/
+
+    // Check bulk operation disable.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('settings.webform_submission_bulk_form', FALSE)
+      ->save();
+    $this->drupalGet($path);
+    $this->assertNoCssSelect('#webform-submission-bulk-form');
+
+    // Re-enable bulk operations.
+    \Drupal::configFactory()->getEditable('webform.settings')
+      ->set('settings.webform_submission_bulk_form', TRUE)
+      ->save();
+
+    /**************************************************************************/
+    // Sticky/Unsticky.
+    /**************************************************************************/
+
+    // Check first submission is NOT sticky.
+    $this->assertFalse($submissions[0]->isSticky());
+
+    // Check submission sticky action.
+    $edit = [
+      'action' => 'webform_submission_make_sticky_action',
+      'items[' . $submissions[0]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($path, $edit, 'Apply to selected items', [], 'webform-submission-bulk-form');
+    $this->assertRaw('<em class="placeholder">Star/flag submission</em> was applied to 1 item.');
+
+    // Check first submission is sticky.
+    $submissions[0] = $this->reloadSubmission($submissions[0]->id());
+    $this->assertTrue($submissions[0]->isSticky());
+
+    // Check submission unsticky action.
+    $edit = [
+      'action' => 'webform_submission_make_unsticky_action',
+      'items[' . $submissions[0]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($path, $edit, 'Apply to selected items', [], 'webform-submission-bulk-form');
+    $this->assertRaw('<em class="placeholder">Unstar/unflag submission</em> was applied to 1 item.');
+
+    // Check first submission is NOT sticky.
+    $submissions[0] = $this->reloadSubmission($submissions[0]->id());
+    $this->assertFalse($submissions[0]->isSticky());
+
+    /**************************************************************************/
+    // Lock/Unlock.
+    /**************************************************************************/
+
+    // Check first submission is NOT lock.
+    $this->assertFalse($submissions[0]->isLocked());
+
+    // Check submission lock action.
+    $edit = [
+      'action' => 'webform_submission_make_lock_action',
+      'items[' . $submissions[0]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($path, $edit, 'Apply to selected items', [], 'webform-submission-bulk-form');
+    $this->assertRaw('<em class="placeholder">Lock submission</em> was applied to 1 item.');
+
+    // Check first submission is lock.
+    $submissions[0] = $this->reloadSubmission($submissions[0]->id());
+    $this->assertTrue($submissions[0]->isLocked());
+
+    // Check submission unlock action.
+    $edit = [
+      'action' => 'webform_submission_make_unlock_action',
+      'items[' . $submissions[0]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($path, $edit, 'Apply to selected items', [], 'webform-submission-bulk-form');
+    $this->assertRaw('<em class="placeholder">Unlock submission</em> was applied to 1 item.');
+
+    // Check first submission is NOT lock.
+    $submissions[0] = $this->reloadSubmission($submissions[0]->id());
+    $this->assertFalse($submissions[0]->isLocked());
+
+    /**************************************************************************/
+    // Delete.
+    /**************************************************************************/
+
+    // Check submission delete action.
+    $edit = [
+      'action' => 'webform_submission_delete_action',
+      'items[' . $submissions[0]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($path, $edit, 'Apply to selected items', [], 'webform-submission-bulk-form');
+    $edit = [
+      'confirm_input' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Delete');
+    $this->assertRaw('Deleted 1 item.');
+
+    // Check submission is now deleted.
+    $submissions[0] = $this->reloadSubmission($submissions[0]->id());
+    $this->assertNull($submissions[0]);
+  }
+
+}
diff --git a/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderTest.php b/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderTest.php
index e53f2734e9a821b4a68d2552d2edf72ac6c55b43..35c2a37d74c9ba3ee8e5a4d7fdfc8560c609e94a 100644
--- a/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderTest.php
+++ b/web/modules/webform/tests/src/Functional/WebformSubmissionListBuilderTest.php
@@ -42,7 +42,6 @@ public function testResults() {
 
     /** @var \Drupal\webform\WebformInterface $webform */
     $webform = Webform::load('test_submissions');
-    $this->webform = $webform;
 
     /** @var \Drupal\webform\WebformSubmissionInterface[] $submissions */
     $submissions = array_values(\Drupal::entityTypeManager()->getStorage('webform_submission')->loadByProperties(['webform_id' => 'test_submissions']));
diff --git a/web/modules/webform/tests/src/Traits/WebformBrowserTestTrait.php b/web/modules/webform/tests/src/Traits/WebformBrowserTestTrait.php
index bcf10a9ab1a6f88b42517b89a044f3bd668580f3..4338a80f38b4de7b3b9795bad63b8c724d7f69c2 100644
--- a/web/modules/webform/tests/src/Traits/WebformBrowserTestTrait.php
+++ b/web/modules/webform/tests/src/Traits/WebformBrowserTestTrait.php
@@ -231,6 +231,21 @@ protected function reloadWebform($id) {
     return $storage->load($id);
   }
 
+  /**
+   * Reload a test webform submission.
+   *
+   * @param string $id
+   *   Webform id.
+   *
+   * @return \Drupal\webform\WebformSubmissionInterface|null
+   *   A webform submission.
+   */
+  protected function reloadSubmission($id) {
+    $storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
+    $storage->resetCache([$id]);
+    return $storage->load($id);
+  }
+
   /****************************************************************************/
   // Submission.
   /****************************************************************************/
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 c65e2d4cfc1182d9320d5b876e997c8d6b5321ad..eb3c0004a2a0b0bb42abe13d76030ade0f35e777 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/webform.info.yml b/web/modules/webform/webform.info.yml
index 78eda227c348a8d1a6c5be2cac87ac619cda7f0d..fe858ac0afec12e2437d12dda6eb3f9cef20c688 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-08-25
-version: '6.0.5'
+# Information added by Drupal.org packaging script on 2021-10-31
+version: '6.1.0'
 project: 'webform'
-datestamp: 1629903950
+datestamp: 1635676674
diff --git a/web/modules/webform/webform.libraries.yml b/web/modules/webform/webform.libraries.yml
index da9f7ed477a34adb8188d3c9f81064e232802401..8c503e3c7a90a7297a750011afe410bc0b150d03 100644
--- a/web/modules/webform/webform.libraries.yml
+++ b/web/modules/webform/webform.libraries.yml
@@ -44,7 +44,7 @@ webform.admin.dialog:
     js/webform.admin.js: {}
   dependencies:
     - core/drupal.dialog.ajax
-    - webform/jquery.ui.dialog
+    - webform/drupal.dialog
     - webform/webform.ajax
     - webform/webform.form
     - webform/webform.form.tabs
@@ -185,7 +185,6 @@ webform.confirmation.modal:
     - core/drupal.dialog
     - core/drupal.dialog.position
     - core/jquery.once
-    - core/jquery.ui.dialog
     - webform/webform.confirmation
 
 # Contextual
@@ -205,7 +204,14 @@ webform.dialog:
     js/webform.dialog.js: {}
   dependencies:
     - core/drupal.dialog.ajax
-    - webform/jquery.ui.dialog
+    - webform/drupal.dialog
+
+drupal.dialog:
+  version: VERSION
+  js:
+    js/webform.drupal.dialog.js: {}
+  dependencies:
+    - core/drupal.dialog
 
 # Help.
 
@@ -343,6 +349,12 @@ webform.theme.bartik:
     theme:
       css/webform.theme.bartik.css: {}
 
+webform.theme.gin:
+  version: VERSION
+  css:
+    theme:
+      css/webform.theme.gin.css: {}
+
 webform.theme.seven:
   version: VERSION
   css:
@@ -712,7 +724,6 @@ webform.element.image_file.modal:
     - core/drupalSettings
     - core/drupal.dialog.ajax
     - core/jquery.once
-    - core/jquery.ui.dialog
 
 webform.element.inputmask:
   version: VERSION
@@ -780,6 +791,12 @@ webform.element.message:
     - core/drupal
     - core/jquery.once
 
+webform.element.message.info:
+  version: VERSION
+  css:
+    component:
+      css/webform.element.message.info.css: {}
+
 webform.element.multiple:
   version: VERSION
   css:
@@ -893,8 +910,8 @@ webform.element.states:
     js/webform.element.states.js: {}
   dependencies:
     - core/drupal
+    - core/drupal.autocomplete
     - core/jquery.once
-    - core/jquery.ui.autocomplete
 
 webform.element.telephone:
   version: VERSION
@@ -922,7 +939,6 @@ webform.element.terms_of_service:
     - core/drupal
     - core/drupal.dialog.ajax
     - core/jquery.once
-    - core/jquery.ui.dialog
 
 webform.element.text_format:
   version: VERSION
@@ -982,15 +998,6 @@ webform.composite.telephone:
   dependencies:
     - webform/webform.composite
 
-# jQuery UI.
-
-jquery.ui.dialog:
-  version: VERSION
-  js:
-    js/webform.jquery.ui.dialog.js: {}
-  dependencies:
-    - core/jquery.ui.dialog
-
 # Contrib Module.
 
 imce.input:
diff --git a/web/modules/webform/webform.module b/web/modules/webform/webform.module
index 2a1577d73739df2c316342bf4df4f0a46d178201..e9369f8763b7625be70081de61524ccd0f0bd9e5 100644
--- a/web/modules/webform/webform.module
+++ b/web/modules/webform/webform.module
@@ -271,8 +271,7 @@ function webform_menu_local_tasks_alter(&$data, $route_name, RefinableCacheableD
     $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])) {
+      if (isset($data['tabs'][0][$test_route_name])) {
         $has_test_tab = TRUE;
         if ($query) {
           $data['tabs'][0][$test_route_name]['#link']['url']
@@ -304,7 +303,7 @@ function webform_module_implements_alter(&$implementations, $hook) {
  * Implements hook_token_info_alter().
  */
 function webform_token_info_alter(&$data) {
-  module_load_include('inc', 'webform', 'webform.tokens.inc');
+  module_load_include('inc', 'webform', 'webform.tokens');
 
   // Append learn more about token suffixes to all webform token descriptions.
   // @see \Drupal\webform\WebformTokenManager::replace
@@ -502,56 +501,48 @@ function webform_toolbar_alter(&$items) {
  * Implements hook_menu_links_discovered_alter().
  */
 function webform_menu_links_discovered_alter(&$links) {
+  // Display Webforms as a top-level administration menu item in the toolbar.
   if (\Drupal::config('webform.settings')->get('ui.toolbar_item')) {
     $links['entity.webform.collection']['parent'] = 'system.admin';
     $links['entity.webform.collection']['weight'] = -9;
   }
 
   // Add webform local tasks as admin menu toolbar menu items.
-  // @see admin_toolbar_tools_menu_links_discovered_alter()
   if (\Drupal::moduleHandler()->moduleExists('admin_toolbar_tools')) {
+    // Get local task definitions.
     /** @var \Drupal\Core\Menu\LocalTaskManager $local_task_manager */
     $local_task_manager = \Drupal::service('plugin.manager.menu.local_task');
+    $definitions = $local_task_manager->getDefinitions();
 
-    $local_tasks = $local_task_manager->getLocalTasks('entity.webform.collection', 0);
-    foreach ($local_tasks['tabs'] as $local_task) {
-      if (!$local_task['#link']['url'] instanceof Url) {
-        continue;
-      }
+    // Set default definition.
+    $default_definition = [
+      'provider' => 'webform',
+      'menu_name' => 'admin',
+    ];
 
-      $menu_item_title = $local_task['#link']['title'];
-      $menu_item_route_name = $local_task['#link']['url']->getRouteName();
-      $menu_item_name = $menu_item_route_name . '.item';
-      $links[$menu_item_name] = [
-        'title' => $menu_item_title,
-        'route_name' => $menu_item_route_name,
-        'parent' => 'entity.webform.collection',
-        'weight' => $local_task['#weight'],
-        'provider' => 'webform',
-        'menu_name' => 'admin',
-      ];
+    // Get keys to be copied.
+    $keys = ['title', 'route_name', 'weight'];
+    $keys_to_copy = array_combine($keys, $keys);
 
-      if (\Drupal::config('webform.settings')->get('ui.toolbar_item')) {
-        $local_sub_tasks = $local_task_manager->getLocalTasks($menu_item_route_name, 1);
-        foreach ($local_sub_tasks['tabs'] as $local_sub_task) {
-          if (!$local_task['#link']['url'] instanceof Url) {
-            continue;
-          }
-
-          $menu_sub_item_title = $local_sub_task['#link']['title'];
-          $menu_sub_item_route_name = $local_sub_task['#link']['url']->getRouteName();
-          $menu_sub_item_name = $menu_sub_item_route_name . '.sub_item';
-          $links[$menu_sub_item_name] = [
-            'title' => $menu_sub_item_title,
-            'route_name' => $menu_sub_item_route_name,
-            'parent' => $menu_item_name,
-            'weight' => $local_sub_task['#weight'],
-            'provider' => 'webform',
-            'menu_name' => 'admin',
-          ];
+    $menu_links = [];
+    foreach ($definitions as $task_name => $definition) {
+      if (isset($definition['base_route']) && $definition['base_route'] === 'entity.webform.collection') {
+        $menu_links[$task_name . '.item'] = $default_definition
+          + array_intersect_key($definition, $keys_to_copy)
+          + ['parent' => 'entity.webform.collection'];
+      }
+    }
+    foreach($menu_links as $sub_link_task_name => $sub_link) {
+      foreach ($definitions as $task_name => $definition) {
+        if (isset($definition['parent_id']) && $definition['parent_id'] === preg_replace('/\.item$/', '', $sub_link_task_name)) {
+          $menu_links[$task_name . '.item'] = $default_definition
+            + array_intersect_key($definition, $keys_to_copy)
+            + ['parent' => $sub_link_task_name];
         }
       }
     }
+
+    $links += $menu_links;
   }
 }
 
diff --git a/web/modules/webform/webform.routing.yml b/web/modules/webform/webform.routing.yml
index 3aef6b4e4f90d36b41f7d3856181d56e5d04faf5..e16fb50c49b2cea2bed40169b44603d431237f61 100644
--- a/web/modules/webform/webform.routing.yml
+++ b/web/modules/webform/webform.routing.yml
@@ -275,6 +275,14 @@ entity.webform.delete_form:
   requirements:
     _entity_access: 'webform.delete'
 
+entity.webform.multiple_delete_confirm:
+  path: '/admin/structure/webform/delete'
+  defaults:
+    _form: '\Drupal\webform\Form\WebformEntityDeleteMultipleForm'
+    entity_type_id: webform
+  requirements:
+    _entity_delete_multiple_access: 'webform'
+
 # Webform settings.
 
 entity.webform.settings:
@@ -621,9 +629,10 @@ entity.webform_submission.sticky_toggle:
 webform_submission.multiple_delete_confirm:
   path: '/admin/structure/webform/results/delete'
   defaults:
-    _form: '\Drupal\webform\Form\WebformSubmissionDeleteMultiple'
+    _form: '\Drupal\webform\Form\WebformSubmissionDeleteMultipleForm'
+    entity_type_id: webform_submission
   requirements:
-    _permission: 'administer webform submission+delete any webform submission+delete own webform submission'
+    _entity_delete_multiple_access: 'webform_submission'
 
 # Handlers.