From 772d02578c0124aa0a677d8725162abb3f9bf4ad Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Fri, 24 Jan 2025 16:03:50 -0700
Subject: [PATCH 01/13] Fix phpcs issues

---
 README.md                                                | 3 ++-
 src/Controller/LayoutParagraphsBuilderController.php     | 1 -
 src/Event/LayoutParagraphsAllowedTypesEvent.php          | 6 ++----
 src/Form/ComponentFormBase.php                           | 7 ++++++-
 src/LayoutParagraphsLayout.php                           | 1 -
 src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php  | 4 ++--
 .../src/Entity/LpHostEntity.php                          | 3 +--
 .../layout_paragraphs_entity_validator_test.module       | 9 ++++++---
 .../Constraint/LayoutParagraphsTestConstraint.php        | 5 +++++
 .../src/MockLibrariesDirectoryFileFinder.php             | 2 +-
 tests/src/FunctionalJavascript/BuilderTest.php           | 2 +-
 tests/src/FunctionalJavascript/BuilderTestBase.php       | 6 +-----
 tests/src/FunctionalJavascript/CorrectRegionTest.php     | 3 +--
 tests/src/FunctionalJavascript/DisplayModeTest.php       | 3 +--
 .../src/FunctionalJavascript/ReorderFormElementsTest.php | 6 ------
 15 files changed, 29 insertions(+), 32 deletions(-)

diff --git a/README.md b/README.md
index d1c68ef..8cd2fcc 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,8 @@ seamlessly with existing paragraph reference fields.
   - Visit
   https://www.drupal.org/docs/develop/using-composer/manage-dependencies#third-party-libraries
   for further information.
-- Run `composer require bower-asset/dragula drupal/paragraphs drupal/layout_paragraphs`
+- Run `composer require
+    bower-asset/dragula drupal/paragraphs drupal/layout_paragraphs`
 - Install Layout Paragraps.
 
 **Without composer**
diff --git a/src/Controller/LayoutParagraphsBuilderController.php b/src/Controller/LayoutParagraphsBuilderController.php
index c56c540..e68ae39 100644
--- a/src/Controller/LayoutParagraphsBuilderController.php
+++ b/src/Controller/LayoutParagraphsBuilderController.php
@@ -9,7 +9,6 @@ use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Controller\ControllerBase;
 use Symfony\Component\HttpFoundation\Request;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\layout_paragraphs\LayoutParagraphsLayout;
 use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
diff --git a/src/Event/LayoutParagraphsAllowedTypesEvent.php b/src/Event/LayoutParagraphsAllowedTypesEvent.php
index 75f6500..cb36f7a 100644
--- a/src/Event/LayoutParagraphsAllowedTypesEvent.php
+++ b/src/Event/LayoutParagraphsAllowedTypesEvent.php
@@ -60,10 +60,8 @@ class LayoutParagraphsAllowedTypesEvent extends Event {
    *   An array of paragraph types.
    * @param \Drupal\layout_paragraphs\LayoutParagraphsLayout $layout
    *   The layout object.
-   * @param string $parent_uuid
-   *   The parent uuid.
-   * @param string $region
-   *   The region.
+   * @param array $context
+   *   The context.
    */
   public function __construct(array $types, LayoutParagraphsLayout $layout, $context) {
     $this->types = $types;
diff --git a/src/Form/ComponentFormBase.php b/src/Form/ComponentFormBase.php
index f8e6079..a1f5d66 100644
--- a/src/Form/ComponentFormBase.php
+++ b/src/Form/ComponentFormBase.php
@@ -158,6 +158,8 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
    *   The form array.
    * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The form state object.
+   * @param string $form_display_mode
+   *   The form display mode.
    */
   protected function buildComponentForm(
     array $form,
@@ -373,7 +375,10 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
    *   The form element.
    */
   public function afterBuild(array $element, FormStateInterface $form_state) {
-    $parents = array_merge($element['#parents'], [$this->getFormId(), $element['#paragraph']->bundle()]);
+    $parents = array_merge($element['#parents'], [
+      $this->getFormId(),
+      $element['#paragraph']->bundle(),
+    ]);
     $unprocessed_id = 'edit-' . implode('-', $parents);
     $element['#attributes']['data-drupal-selector'] = Html::getId($unprocessed_id);
     $element['#dialog_id'] = $unprocessed_id . '-dialog';
diff --git a/src/LayoutParagraphsLayout.php b/src/LayoutParagraphsLayout.php
index 7179a60..19672a4 100644
--- a/src/LayoutParagraphsLayout.php
+++ b/src/LayoutParagraphsLayout.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\layout_paragraphs;
 
-use Drupal\Component\Utility\Crypt;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
diff --git a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
index 3d6c476..936d16c 100644
--- a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
@@ -365,13 +365,13 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
   public function settingsForm(array $form, FormStateInterface $form_state) {
     $entity_type_id = $this->getFieldSetting('target_type');
     $element = parent::settingsForm($form, $form_state);
-    $element['view_mode'] = array(
+    $element['view_mode'] = [
       '#type' => 'select',
       '#title' => $this->t('View mode'),
       '#default_value' => $this->getSetting('view_mode'),
       '#options' => $this->entityDisplayRepository->getViewModeOptions($entity_type_id),
       '#required' => TRUE,
-    );
+    ];
     $element['preview_view_mode'] = [
       '#type' => 'select',
       '#title' => $this->t('Preview view mode'),
diff --git a/tests/modules/layout_paragraphs_custom_host_entity_test/src/Entity/LpHostEntity.php b/tests/modules/layout_paragraphs_custom_host_entity_test/src/Entity/LpHostEntity.php
index 2d3ae8c..322a103 100644
--- a/tests/modules/layout_paragraphs_custom_host_entity_test/src/Entity/LpHostEntity.php
+++ b/tests/modules/layout_paragraphs_custom_host_entity_test/src/Entity/LpHostEntity.php
@@ -54,8 +54,7 @@ class LpHostEntity extends ContentEntityBase implements LpHostEntityInterface {
   /**
    * {@inheritdoc}
    *
-   * When a new lp host entity entity is created, set the uid entity reference to
-   * the current user as the creator of the entity.
+   * Set the uid entity reference to the current user.
    */
   public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
     parent::preCreate($storage_controller, $values);
diff --git a/tests/modules/layout_paragraphs_entity_validator_test/layout_paragraphs_entity_validator_test.module b/tests/modules/layout_paragraphs_entity_validator_test/layout_paragraphs_entity_validator_test.module
index 38e80f0..9a3328d 100644
--- a/tests/modules/layout_paragraphs_entity_validator_test/layout_paragraphs_entity_validator_test.module
+++ b/tests/modules/layout_paragraphs_entity_validator_test/layout_paragraphs_entity_validator_test.module
@@ -1,11 +1,14 @@
 <?php
 
+/**
+ * @file
+ * Contains layout_paragraphs_entity_validator_test.module.
+ */
+
 /**
  * Implements hook_entity_type_alter().
- *
- * @param array $entity_types
  */
 function layout_paragraphs_entity_validator_test_entity_type_alter(array &$entity_types) {
-  // Add validation constraint to the paragraph entity
+  // Add validation constraint to the paragraph entity.
   $entity_types['paragraph']->addConstraint('LayoutParagraphsTestConstraint');
 }
diff --git a/tests/modules/layout_paragraphs_entity_validator_test/src/Plugin/Validation/Constraint/LayoutParagraphsTestConstraint.php b/tests/modules/layout_paragraphs_entity_validator_test/src/Plugin/Validation/Constraint/LayoutParagraphsTestConstraint.php
index f4f09a0..006c12c 100644
--- a/tests/modules/layout_paragraphs_entity_validator_test/src/Plugin/Validation/Constraint/LayoutParagraphsTestConstraint.php
+++ b/tests/modules/layout_paragraphs_entity_validator_test/src/Plugin/Validation/Constraint/LayoutParagraphsTestConstraint.php
@@ -15,6 +15,11 @@ use Symfony\Component\Validator\Constraint;
  */
 class LayoutParagraphsTestConstraint extends Constraint {
 
+  /**
+   * The message that will be shown if the value is not unique.
+   *
+   * @var string
+   */
   public $message = 'Failed Layout Paragraphs test validation.';
 
 }
diff --git a/tests/modules/test_layout_paragraphs_libraries/src/MockLibrariesDirectoryFileFinder.php b/tests/modules/test_layout_paragraphs_libraries/src/MockLibrariesDirectoryFileFinder.php
index 1b43d0e..a638b0f 100644
--- a/tests/modules/test_layout_paragraphs_libraries/src/MockLibrariesDirectoryFileFinder.php
+++ b/tests/modules/test_layout_paragraphs_libraries/src/MockLibrariesDirectoryFileFinder.php
@@ -20,4 +20,4 @@ class MockLibrariesDirectoryFileFinder extends LibrariesDirectoryFileFinder {
     return parent::find($path);
   }
 
-}
\ No newline at end of file
+}
diff --git a/tests/src/FunctionalJavascript/BuilderTest.php b/tests/src/FunctionalJavascript/BuilderTest.php
index f9f8808..e4a345e 100644
--- a/tests/src/FunctionalJavascript/BuilderTest.php
+++ b/tests/src/FunctionalJavascript/BuilderTest.php
@@ -178,7 +178,7 @@ class BuilderTest extends BuilderTestBase {
     $this->htmlOutput($this->getSession()->getPage()->getHtml());
 
     $this->assertSession()->elementExists('css', '.layout__region--first .js-lpb-component');
-//    $this->assertSession()->assertWaitOnAjaxRequest();
+    // $this->assertSession()->assertWaitOnAjaxRequest();
     $this->getSession()->wait(1000);
     $this->submitForm([
       'title[0][value]' => 'Node title',
diff --git a/tests/src/FunctionalJavascript/BuilderTestBase.php b/tests/src/FunctionalJavascript/BuilderTestBase.php
index 9122fea..b1d9ad0 100644
--- a/tests/src/FunctionalJavascript/BuilderTestBase.php
+++ b/tests/src/FunctionalJavascript/BuilderTestBase.php
@@ -182,26 +182,22 @@ abstract class BuilderTestBase extends WebDriverTestBase {
     $page = $this->getSession()->getPage();
     // Click the Add Component button.
     $page->find('css', $css_selector)->click();
-//    $this->assertSession()->assertWaitOnAjaxRequest(1000, 'Unable to click add a component.');
     $this->assertNotEmpty($this->assertSession()->waitForText('Choose a component'));
 
-
     // Add a section.
     $page->clickLink('section');
-//    $this->assertSession()->assertWaitOnAjaxRequest(1000, 'Unable to select section component.');
     $this->assertNotEmpty($this->assertSession()->waitForText('Create new section'));
 
     // Choose a three-column layout.
     $elements = $page->findAll('css', '.layout-select__item label.option');
     $elements[$columns_choice]->click();
-//    $this->assertSession()->assertWaitOnAjaxRequest(1000, 'Unable to select layout.');
     $this->assertNotEmpty($this->assertSession()->waitForText('Choose a layout:'));
     $this->getSession()->wait(1000);
 
     // Save the layout.
     $button = $page->find('css', 'button.lpb-btn--save');
     $button->click();
-//    $this->assertSession()->assertWaitOnAjaxRequest();
+    // $this->assertSession()->assertWaitOnAjaxRequest();
     $this->getSession()->wait(1000);
   }
 
diff --git a/tests/src/FunctionalJavascript/CorrectRegionTest.php b/tests/src/FunctionalJavascript/CorrectRegionTest.php
index dec9ebb..9260c37 100644
--- a/tests/src/FunctionalJavascript/CorrectRegionTest.php
+++ b/tests/src/FunctionalJavascript/CorrectRegionTest.php
@@ -60,8 +60,7 @@ class CorrectRegionTest extends BuilderTestBase {
     $this->keyPress('ArrowUp');
     $this->assertSession()->assertWaitOnAjaxRequest();
     $this->keyPress('Enter');
-//    $this->assertSession()->assertWaitOnAjaxRequest();
-
+    // $this->assertSession()->assertWaitOnAjaxRequest();
     // Add a fourth item above the third item, which has been moved to the first
     // region. Ensure the fourth item is correctly added to the first region,
     // hiding the controls ui first so it doesn't overlapp the + button.
diff --git a/tests/src/FunctionalJavascript/DisplayModeTest.php b/tests/src/FunctionalJavascript/DisplayModeTest.php
index bf4bb73..c3234d4 100644
--- a/tests/src/FunctionalJavascript/DisplayModeTest.php
+++ b/tests/src/FunctionalJavascript/DisplayModeTest.php
@@ -8,8 +8,7 @@ use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Entity\Entity\EntityViewMode;
 
 /**
- * Tests setting non-default view modes for paragraphs rendered on the page and
- * rendered in the preview. Also tests setting a non-default form display mode.
+ * Tests non-default view modes and form modes.
  *
  * @group layout_paragraphs
  */
diff --git a/tests/src/FunctionalJavascript/ReorderFormElementsTest.php b/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
index b884ce9..bbb8d2d 100644
--- a/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
+++ b/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
@@ -24,9 +24,6 @@ class ReorderFormElementsTest extends BuilderTestBase {
     ]);
     $this->drupalGet('admin/structure/paragraphs_type/section/form-display');
     $page = $this->getSession()->getPage();
-//    $published_field = $page->find('xpath', '//tr[@id="status"]//a[@class="tabledrag-handle"]');
-//    $lp_fields = $page->find('xpath', '//tr[@id="layout-paragraphs-fields"]');
-//    $published_field->dragTo($lp_fields);
     $published_field = $page->find('css', 'tr#status a.tabledrag-handle');
     $published_field->dragTo($page->find('css', 'tr#layout-paragraphs-fields td'));
     $this->submitForm([], 'Save');
@@ -56,9 +53,6 @@ class ReorderFormElementsTest extends BuilderTestBase {
     ]);
     $this->drupalGet('admin/structure/paragraphs_type/section/form-display');
     $page = $this->getSession()->getPage();
-//    $published_field = $page->find('xpath', '//tr[@id="status"]');
-//    $lp_fields = $page->find('xpath', '//tr[@id="layout-paragraphs-fields"]//a[@class="tabledrag-handle"]');
-//    $lp_fields->dragTo($published_field);
     $lp_fields = $page->find('css', 'tr#layout-paragraphs-fields a.tabledrag-handle');
     $lp_fields->dragTo($page->find('css', 'tr#status'));
     $this->submitForm([], 'Save');
-- 
GitLab


From 54dfd5115c3b65e75464f7c1a84f6bf6897a668b Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Fri, 24 Jan 2025 16:21:04 -0700
Subject: [PATCH 02/13] fix phpstan errors

---
 layout_paragraphs.module | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/layout_paragraphs.module b/layout_paragraphs.module
index a482820..4445e02 100644
--- a/layout_paragraphs.module
+++ b/layout_paragraphs.module
@@ -182,7 +182,7 @@ function layout_paragraphs_preprocess_layout_paragraphs_builder_controls(&$varia
       '#attributes' => [
         'class' => ['lpb-controls-label'],
       ],
-      '#value' => $entity->getParagraphType()->label,
+      '#value' => $entity->getParagraphType()->get('label'),
       '#weight' => 30,
     ],
     'move_up' => [
@@ -335,6 +335,7 @@ function layout_paragraphs_paragraph_presave(ParagraphInterface $paragraph) {
   }
 
   // If the parent component cannot be loaded, we are not cloning.
+  /** @var \Drupal\paragraphs\Entity\Paragraph|NULL $parent_component */
   $parent_component = \Drupal::service('entity.repository')
     ->loadEntityByUuid('paragraph', $parent_uuid);
   if (empty($parent_component)) {
@@ -351,8 +352,11 @@ function layout_paragraphs_paragraph_presave(ParagraphInterface $paragraph) {
   // the paragraph's parent's host's id, we ARE cloning.
   if ($host->id() !== $parent_host->id()) {
 
+    $uuid_map = [];
+
     // Map the UUIDs to deltas from the clone source.
     $items = _layout_paragraphs_get_paragraphs($parent_component);
+    /** @var \Drupal\paragraphs\Entity\Paragraph $item */
     foreach ($items as $delta => $item) {
       $uuid_map[$item->uuid()] = $delta;
     }
@@ -360,6 +364,7 @@ function layout_paragraphs_paragraph_presave(ParagraphInterface $paragraph) {
     // Map the deltas to UUIds from the clone destination.
     $items = _layout_paragraphs_get_paragraphs($paragraph);
     $delta_map = [];
+    /** @var \Drupal\paragraphs\Entity\Paragraph $item */
     foreach ($items as $delta => $item) {
       $delta_map[$delta] = $item->uuid();
     }
@@ -385,6 +390,7 @@ function layout_paragraphs_paragraph_presave(ParagraphInterface $paragraph) {
  */
 function layout_paragraphs_entity_translation_create(FieldableEntityInterface $entity) {
   $entity_type_manager = \Drupal::entityTypeManager();
+  /** @var \Drupal\Core\Entity\RevisionableStorageInterface $paragraph_storage */
   $paragraph_storage = $entity_type_manager->getStorage('paragraph');
   /** @var \Drupal\field\FieldConfigInterface[] $field_definitions */
   $field_definitions = $entity_type_manager->getStorage('field_config')
@@ -468,8 +474,8 @@ function layout_paragraphs_entity_translation_create(FieldableEntityInterface $e
  * @param \Drupal\paragraphs\ParagraphInterface $paragraph
  *   The paragraph to use for finding the complete list of siblings.
  *
- * @return \Drupal\Core\Field\EntityReferenceFieldItemList
- *   The list of paragraphs.
+ * @return array
+ *   The list of paragraph entities.
  */
 function _layout_paragraphs_get_paragraphs(ParagraphInterface $paragraph) {
   $host = $paragraph->getParentEntity();
-- 
GitLab


From e473fe654b3f6840e1b78f9c067994605145296f Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Fri, 24 Jan 2025 17:31:12 -0700
Subject: [PATCH 03/13] fix phpstan errors

---
 composer.json                                 |  3 +-
 .../layout_paragraphs_library.module          |  1 +
 .../layout_paragraphs_permissions.module      |  2 +-
 src/Access/LayoutParagraphsBuilderAccess.php  |  2 +-
 src/Contracts/ComponentFormInterface.php      |  4 +-
 src/Controller/ChooseComponentController.php  |  5 +-
 src/Element/LayoutParagraphsBuilder.php       | 22 ++++-----
 src/Form/LayoutParagraphsBuilderForm.php      |  4 +-
 src/LayoutParagraphsLayout.php                |  3 +-
 ...outParagraphsLayoutTempstoreRepository.php |  2 +-
 src/LayoutParagraphsSection.php               |  4 +-
 .../LayoutParagraphsBuilderFormatter.php      | 23 ++++++---
 .../LayoutParagraphsFormatter.php             | 49 +++++++++++++++++--
 .../FieldWidget/LayoutParagraphsWidget.php    | 18 +++++--
 .../Behavior/LayoutParagraphsBehavior.php     | 34 +++++++++++--
 .../src/Form/LpHostEntityForm.php             | 37 +++++++++++++-
 16 files changed, 168 insertions(+), 45 deletions(-)

diff --git a/composer.json b/composer.json
index 283def5..785b4ef 100644
--- a/composer.json
+++ b/composer.json
@@ -21,6 +21,7 @@
   },
   "require-dev": {
     "drupal/entity_usage": "2.x-dev",
-    "drupal/block_field": "~1.0"
+    "drupal/block_field": "~1.0",
+    "drupal/field_group": "~1.0"
   }
 }
diff --git a/modules/layout_paragraphs_library/layout_paragraphs_library.module b/modules/layout_paragraphs_library/layout_paragraphs_library.module
index aae8c24..2417710 100644
--- a/modules/layout_paragraphs_library/layout_paragraphs_library.module
+++ b/modules/layout_paragraphs_library/layout_paragraphs_library.module
@@ -142,6 +142,7 @@ function layout_paragraphs_library_submit(&$form, FormStateInterface $form_state
       /** @var \Drupal\paragraphs_library\Entity\LibraryItem $library_item */
       $library_item = $paragraph->get('field_reusable_paragraph')->entity;
       if ($library_item) {
+        /** @var \Drupal\paragraphs\Entity\Paragraph $original_paragraph */
         $original_paragraph = $library_item->get('paragraphs')->entity;
         $form_object->setParagraph($original_paragraph);
         $new_paragraph = $original_paragraph;
diff --git a/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.module b/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.module
index 20fe7c5..7e08d22 100644
--- a/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.module
+++ b/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.module
@@ -36,7 +36,7 @@ function layout_paragraphs_permissions_preprocess_layout_paragraphs_builder(&$va
  * @param string $operation
  *   The operation (i.e. "reorder" or "edit").
  *
- * @return AccessResult
+ * @return \Drupal\Core\Access\AccessResultInterface
  *   The access.
  */
 function layout_paragraphs_permissions_access(LayoutParagraphsLayout $layout_paragraphs_layout, string $operation) {
diff --git a/src/Access/LayoutParagraphsBuilderAccess.php b/src/Access/LayoutParagraphsBuilderAccess.php
index b3fade4..ceabc69 100644
--- a/src/Access/LayoutParagraphsBuilderAccess.php
+++ b/src/Access/LayoutParagraphsBuilderAccess.php
@@ -46,7 +46,7 @@ class LayoutParagraphsBuilderAccess implements AccessInterface {
    * @param \Drupal\paragraphs\ParagraphsTypeInterface $paragraph_type
    *   The paragraph type of a component being added.
    *
-   * @return \Drupal\Core\Access\AccessResult
+   * @return \Drupal\Core\Access\AccessResultInterface
    *   The access result.
    */
   public function access(
diff --git a/src/Contracts/ComponentFormInterface.php b/src/Contracts/ComponentFormInterface.php
index 5493a48..33bc4ad 100644
--- a/src/Contracts/ComponentFormInterface.php
+++ b/src/Contracts/ComponentFormInterface.php
@@ -57,7 +57,7 @@ interface ComponentFormInterface extends FormInterface {
    *
    * @param array $element
    *   The form element.
-   * @param Drupal\Core\Form\FormStateInterface $form_state
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The form state.
    * @param array $form
    *   The complete form array.
@@ -74,7 +74,7 @@ interface ComponentFormInterface extends FormInterface {
    *
    * @param array $element
    *   The form element.
-   * @param Drupal\Core\Form\FormStateInterface $form_state
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
    *   The form state.
    * @param array $form
    *   The complete form array.
diff --git a/src/Controller/ChooseComponentController.php b/src/Controller/ChooseComponentController.php
index 222cf69..8d99751 100644
--- a/src/Controller/ChooseComponentController.php
+++ b/src/Controller/ChooseComponentController.php
@@ -32,7 +32,7 @@ class ChooseComponentController extends ControllerBase {
   /**
    * The entity type bundle info service.
    *
-   * @var \Drupal\Core\Entity\EntityTypeBundleInfo
+   * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
    */
   protected $entityTypeBundleInfo;
 
@@ -97,7 +97,7 @@ class ChooseComponentController extends ControllerBase {
       return $this->componentForm(key($types), $layout_paragraphs_layout, $context);
     }
     else {
-      return $this->componentMenu($types, $route_params, $context);
+      return $this->componentMenu($types);
     }
   }
 
@@ -295,6 +295,7 @@ class ChooseComponentController extends ControllerBase {
    */
   protected function getSortedAllowedTypes(array $settings) {
     $bundles = $this->entityTypeBundleInfo->getBundleInfo('paragraph');
+    $return_bundles = [];
     if (!empty($settings['target_bundles'])) {
       if (isset($settings['negate']) && $settings['negate'] == '1') {
         $bundles = array_diff_key($bundles, $settings['target_bundles']);
diff --git a/src/Element/LayoutParagraphsBuilder.php b/src/Element/LayoutParagraphsBuilder.php
index 7334ecc..47a7578 100644
--- a/src/Element/LayoutParagraphsBuilder.php
+++ b/src/Element/LayoutParagraphsBuilder.php
@@ -2,23 +2,23 @@
 
 namespace Drupal\layout_paragraphs\Element;
 
+use Drupal\Core\Url;
+use Drupal\Core\Render\Markup;
 use Drupal\Component\Serialization\Json;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\paragraphs\ParagraphInterface;
 use Drupal\Core\Access\AccessResultAllowed;
+use Drupal\layout_paragraphs\Utility\Dialog;
 use Drupal\Core\Access\AccessResultForbidden;
-use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
+use Drupal\Core\Render\Element\RenderElementBase;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Layout\LayoutPluginManagerInterface;
+use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
+use Drupal\layout_paragraphs\LayoutParagraphsSection;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Render\Element\RenderElement;
-use Drupal\Core\Render\Markup;
-use Drupal\Core\Render\RendererInterface;
-use Drupal\Core\Url;
 use Drupal\layout_paragraphs\LayoutParagraphsComponent;
-use Drupal\layout_paragraphs\LayoutParagraphsLayoutTempstoreRepository;
-use Drupal\layout_paragraphs\LayoutParagraphsSection;
-use Drupal\layout_paragraphs\Utility\Dialog;
-use Drupal\paragraphs\ParagraphInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\layout_paragraphs\LayoutParagraphsLayoutTempstoreRepository;
 
 /**
  * Defines a render element for building the Layout Builder UI.
@@ -28,7 +28,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * @internal
  *   Plugin classes are internal.
  */
-class LayoutParagraphsBuilder extends RenderElement implements ContainerFactoryPluginInterface {
+class LayoutParagraphsBuilder extends RenderElementBase implements ContainerFactoryPluginInterface {
 
   /**
    * The layout paragraphs tempstore service.
@@ -467,7 +467,7 @@ class LayoutParagraphsBuilder extends RenderElement implements ContainerFactoryP
   /**
    * Builds a translation warning message.
    *
-   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
+   * @return \Drupal\Core\StringTranslation\TranslatableMarkup|null
    *   The translation warning.
    */
   protected function translationWarning() {
diff --git a/src/Form/LayoutParagraphsBuilderForm.php b/src/Form/LayoutParagraphsBuilderForm.php
index 6711354..29c0d63 100644
--- a/src/Form/LayoutParagraphsBuilderForm.php
+++ b/src/Form/LayoutParagraphsBuilderForm.php
@@ -222,8 +222,10 @@ class LayoutParagraphsBuilderForm extends FormBase {
     $field_name = $this->layoutParagraphsLayout->getFieldName();
     if ($entity instanceof RevisionableInterface) {
       $revision_id = $entity->getRevisionId();
+      /** @var \Drupal\Core\Entity\RevisionableStorageInterface $storage */
+      $storage = $this->entityTypeManager->getStorage($entity_type);
       /** @var \Drupal\Core\Entity\RevisionableInterface $entity */
-      $entity = $this->entityTypeManager->getStorage($entity_type)->loadRevision($revision_id);
+      $entity = $storage->loadRevision($revision_id);
       $entity->setNewRevision(FALSE);
     }
     else {
diff --git a/src/LayoutParagraphsLayout.php b/src/LayoutParagraphsLayout.php
index 19672a4..68ce849 100644
--- a/src/LayoutParagraphsLayout.php
+++ b/src/LayoutParagraphsLayout.php
@@ -212,7 +212,7 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
    * @param string $uuid
    *   The uuid to search for.
    *
-   * @return LayoutParagraphsComponent
+   * @return LayoutParagraphsComponent|null
    *   The component.
    */
   public function getComponentByUuid($uuid) {
@@ -333,6 +333,7 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
    * @return $this
    */
   public function reorderComponents(array $ordered_items) {
+    $reordered_items = [];
     foreach ($ordered_items as $ordered_item) {
       if ($component = $this->getComponentByUuid($ordered_item['uuid'])) {
         $component->setSettings([
diff --git a/src/LayoutParagraphsLayoutTempstoreRepository.php b/src/LayoutParagraphsLayoutTempstoreRepository.php
index bf8efca..5216269 100644
--- a/src/LayoutParagraphsLayoutTempstoreRepository.php
+++ b/src/LayoutParagraphsLayoutTempstoreRepository.php
@@ -51,7 +51,7 @@ class LayoutParagraphsLayoutTempstoreRepository {
    * @param string $key
    *   The storage key.
    *
-   * @return \Drupal\layout_paragraphs\LayoutParagraphsLayout
+   * @return \Drupal\layout_paragraphs\LayoutParagraphsLayout|null
    *   The layout.
    */
   public function getWithStorageKey(string $key) {
diff --git a/src/LayoutParagraphsSection.php b/src/LayoutParagraphsSection.php
index 06960c3..1ef0454 100644
--- a/src/LayoutParagraphsSection.php
+++ b/src/LayoutParagraphsSection.php
@@ -45,7 +45,7 @@ class LayoutParagraphsSection extends LayoutParagraphsComponent {
    * @param \Drupal\paragraphs\ParagraphInterface $paragraph
    *   The paragraph entity.
    *
-   * @return LayoutParagraphsComponent|LayoutParagraphsSection
+   * @return LayoutParagraphsComponent|LayoutParagraphsSection|null
    *   The component.
    */
   public function getComponent(ParagraphInterface $paragraph) {
@@ -62,7 +62,7 @@ class LayoutParagraphsSection extends LayoutParagraphsComponent {
    * @param string $uuid
    *   The uuid to search for.
    *
-   * @return LayoutParagraphsComponent
+   * @return LayoutParagraphsComponent|null
    *   The component.
    */
   public function getComponentByUuid($uuid) {
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
index b2fca45..c814b70 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
@@ -10,6 +10,8 @@ use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Routing\Access\AccessInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\layout_paragraphs\LayoutParagraphsLayout;
 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
@@ -53,14 +55,22 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
    */
   protected $account;
 
+  /**
+   * The field widget plugin manager.
+   *
+   * @var \Drupal\Core\Plugin\PluginManagerInterface
+   */
+  protected $fieldWidgetPluginManager;
+
   /**
    * {@inheritDoc}
    */
-  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, EntityDisplayRepositoryInterface $entity_display_repository, LayoutParagraphsLayoutTempstoreRepository $tempstore, AccessInterface $layout_paragraphs_builder_access, AccountProxyInterface $current_user) {
-    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $logger_factory, $entity_display_repository);
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, EntityDisplayRepositoryInterface $entity_display_repository, EntityRepositoryInterface $entity_repository, LayoutParagraphsLayoutTempstoreRepository $tempstore, AccessInterface $layout_paragraphs_builder_access, AccountProxyInterface $current_user, PluginManagerInterface $field_widget_plugin_manager) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $logger_factory, $entity_display_repository, $entity_repository);
     $this->tempstore = $tempstore;
     $this->layoutParagraphsBuilderAccess = $layout_paragraphs_builder_access;
     $this->account = $current_user->getAccount();
+    $this->fieldWidgetPluginManager = $field_widget_plugin_manager;
   }
 
   /**
@@ -77,10 +87,12 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
       $configuration['third_party_settings'],
       $container->get('logger.factory'),
       $container->get('entity_display.repository'),
+      $container->get('entity.repository'),
       $container->get('layout_paragraphs.tempstore_repository'),
       $container->get('layout_paragraphs.builder_access'),
-      $container->get('current_user')
-    );
+      $container->get('current_user'),
+      $container->get('plugin.manager.field.widget')
+      );
   }
 
   /**
@@ -182,8 +194,7 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
    *   The widget instance.
    */
   protected function widgetInstance() {
-    $plugin_manager = \Drupal::service('plugin.manager.field.widget');
-    $widget = $plugin_manager->getInstance([
+    $widget = $this->fieldWidgetPluginManager->getInstance([
       'field_definition' => $this->fieldDefinition,
       'form_mode' => 'layout_paragraphs_editor',
       'prepare' => TRUE,
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
index d9ae2bc..8dd0f34 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
@@ -2,12 +2,17 @@
 
 namespace Drupal\layout_paragraphs\Plugin\Field\FieldFormatter;
 
-use Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter\EntityReferenceRevisionsEntityFormatter;
+use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
-use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
 use Drupal\layout_paragraphs\LayoutParagraphsComponent;
-use Drupal\Core\TypedData\TranslatableInterface;
-use Drupal\Core\Cache\CacheableMetadata;
+use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
+use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter\EntityReferenceRevisionsEntityFormatter;
 
 /**
  * Layout Paragraphs field formatter.
@@ -23,6 +28,39 @@ use Drupal\Core\Cache\CacheableMetadata;
  */
 class LayoutParagraphsFormatter extends EntityReferenceRevisionsEntityFormatter implements ContainerFactoryPluginInterface {
 
+  /**
+   * The entity reportory.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
+  /**
+   * {@inheritDoc}
+   */
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, EntityDisplayRepositoryInterface $entity_display_repository, EntityRepositoryInterface $entity_repository) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $logger_factory, $entity_display_repository);
+    $this->entityRepository = $entity_repository;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['label'],
+      $configuration['view_mode'],
+      $configuration['third_party_settings'],
+      $container->get('logger.factory'),
+      $container->get('entity_display.repository'),
+      $container->get('entity.repository')
+    );
+  }
+
   /**
    * Returns the referenced entities for display.
    *
@@ -44,6 +82,7 @@ class LayoutParagraphsFormatter extends EntityReferenceRevisionsEntityFormatter
     foreach ($items as $delta => $item) {
       // Ignore items where no entity could be loaded in prepareView().
       if (!empty($item->_loaded)) {
+        /** @var \Drupal\Core\Entity\EntityInterface $entity */
         $entity = $item->entity;
         $access = $this->checkAccess($entity);
         // Add the access result's cacheability, ::view() needs it.
@@ -57,7 +96,7 @@ class LayoutParagraphsFormatter extends EntityReferenceRevisionsEntityFormatter
           if (LayoutParagraphsComponent::isRootComponent($item->entity)) {
             // Set the entity in the correct language for display.
             if ($entity instanceof TranslatableInterface) {
-              $entity = \Drupal::service('entity.repository')->getTranslationFromContext($entity, $langcode);
+              $entity = $this->entityRepository->getTranslationFromContext($entity, $langcode);
             }
             $entities[$delta] = $entity;
           }
diff --git a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
index 936d16c..4e6a672 100644
--- a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
@@ -118,6 +118,13 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
    */
   protected $isTranslating;
 
+  /**
+   * The optional content translation service.
+   *
+   * @var \Drupal\content_translation\ContentTranslationManagerInterface|null
+   */
+  protected $contentTranslationManager;
+
   /**
    * {@inheritDoc}
    */
@@ -133,7 +140,8 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
     FormBuilderInterface $form_builder,
     EntityDisplayRepositoryInterface $entity_display_repository,
     ConfigFactoryInterface $config_factory,
-    EntityRepositoryInterface $entity_repository
+    EntityRepositoryInterface $entity_repository,
+    $content_translation_manager
     ) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
 
@@ -144,7 +152,7 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
     $this->entityDisplayRepository = $entity_display_repository;
     $this->entityRepository = $entity_repository;
     $this->config = $config_factory->get('layout_paragraphs.settings');
-
+    $this->contentTranslationManager = $content_translation_manager;
   }
 
   /**
@@ -163,7 +171,8 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
       $container->get('form_builder'),
       $container->get('entity_display.repository'),
       $container->get('config.factory'),
-      $container->get('entity.repository')
+      $container->get('entity.repository'),
+      $container->has('content_translation.manager') ? $container->get('content_translation.manager') : NULL
     );
   }
 
@@ -308,8 +317,7 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
               // Initialise the translation with source language values.
               $paragraph->addTranslation($this->langcode, $paragraph->toArray());
               $translation = $paragraph->getTranslation($this->langcode);
-              $manager = \Drupal::service('content_translation.manager');
-              $manager->getTranslationMetadata($translation)
+              $this->contentTranslationManager->getTranslationMetadata($translation)
                 ->setSource($paragraph->language()->getId());
             }
           }
diff --git a/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php b/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
index efd0bff..82a5567 100644
--- a/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
+++ b/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
@@ -3,7 +3,6 @@
 namespace Drupal\layout_paragraphs\Plugin\paragraphs\Behavior;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Form\SubformState;
 use Drupal\Core\Layout\LayoutInterface;
 use Drupal\Core\Form\FormStateInterface;
@@ -13,7 +12,10 @@ use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\paragraphs\ParagraphsBehaviorBase;
 use Drupal\Core\Plugin\PluginWithFormsInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Plugin\PluginFormFactoryInterface;
+use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Layout\LayoutPluginManagerInterface;
+use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\layout_paragraphs\LayoutParagraphsSection;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\layout_paragraphs\LayoutParagraphsRendererService;
@@ -60,6 +62,20 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
    */
   protected $paragraph;
 
+  /**
+   * The plugin form factory.
+   *
+   * @var \Drupal\Core\Plugin\PluginFormFactoryInterface
+   */
+  protected $pluginFormFactory;
+
+  /**
+   * The logger factory.
+   *
+   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
+   */
+  protected $loggerFactory;
+
   /**
    * ParagraphsLayoutPlugin constructor.
    *
@@ -77,6 +93,10 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
    *   The grid discovery service.
    * @param \Drupal\layout_paragraphs\LayoutParagraphsRendererService $layout_paragraphs_renderer_service
    *   The layout paragraphs service.
+   * @param \Drupal\Core\Plugin\PluginFormFactoryInterface $plugin_form_factory
+   *   The plugin form factory.
+   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
+   *   The logger factory.
    */
   public function __construct(
       array $configuration,
@@ -85,11 +105,15 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
       EntityFieldManagerInterface $entity_field_manager,
       LayoutPluginManagerInterface $layout_plugin_manager,
       EntityTypeManagerInterface $entity_type_manager,
-      LayoutParagraphsRendererService $layout_paragraphs_renderer_service) {
+      LayoutParagraphsRendererService $layout_paragraphs_renderer_service,
+      PluginFormFactoryInterface $plugin_form_factory,
+      LoggerChannelFactoryInterface $logger_factory) {
     parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_field_manager);
     $this->layoutPluginManager = $layout_plugin_manager;
     $this->entityTypeManager = $entity_type_manager;
     $this->layoutParagraphsRendererService = $layout_paragraphs_renderer_service;
+    $this->pluginFormFactory = $plugin_form_factory;
+    $this->loggerFactory = $logger_factory;
   }
 
   /**
@@ -103,7 +127,9 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
       $container->get('entity_field.manager'),
       $container->get('plugin.manager.core.layout'),
       $container->get('entity_type.manager'),
-      $container->get('layout_paragraphs.renderer')
+      $container->get('layout_paragraphs.renderer'),
+      $container->get('plugin_form.factory'),
+      $container->get('logger.factory')
     );
   }
 
@@ -289,7 +315,7 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
         return $this->pluginFormFactory->createInstance($layout, 'configure');
       }
       catch (\Exception $e) {
-        $this->loggerFactory->get('layout_paragraphs')->error('Erl, Layout Configuration', $e);
+        $this->loggerFactory->get('layout_paragraphs')->error('Erl, Layout Configuration', [$e]);
       }
     }
 
diff --git a/tests/modules/layout_paragraphs_custom_host_entity_test/src/Form/LpHostEntityForm.php b/tests/modules/layout_paragraphs_custom_host_entity_test/src/Form/LpHostEntityForm.php
index 509e33d..f13ab62 100644
--- a/tests/modules/layout_paragraphs_custom_host_entity_test/src/Form/LpHostEntityForm.php
+++ b/tests/modules/layout_paragraphs_custom_host_entity_test/src/Form/LpHostEntityForm.php
@@ -2,14 +2,46 @@
 
 namespace Drupal\layout_paragraphs_custom_host_entity_test\Form;
 
-use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Entity\ContentEntityForm;
+use Drupal\Core\Render\RendererInterface;
+use Drupal\Component\Datetime\TimeInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
+use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Form controller for the lp host entity entity edit forms.
  */
 class LpHostEntityForm extends ContentEntityForm {
 
+  /**
+   * The renderer service.
+   *
+   * @var \Drupal\Core\Renderer\RendererInterface
+   */
+  protected $renderer;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(EntityRepositoryInterface $entity_repository, EntityTypeBundleInfoInterface $entity_type_bundle_info, TimeInterface $time, RendererInterface $renderer) {
+    parent::__construct($entity_repository, $entity_type_bundle_info, $time);
+    $this->renderer = $renderer;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('entity.repository'),
+      $container->get('entity_type.bundle.info'),
+      $container->get('datetime.time'),
+      $container->get('renderer')
+    );
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -20,7 +52,7 @@ class LpHostEntityForm extends ContentEntityForm {
     $link = $entity->toLink($this->t('View'))->toRenderable();
 
     $message_arguments = ['%label' => $this->entity->label()];
-    $logger_arguments = $message_arguments + ['link' => \Drupal::service('renderer')->render($link)];
+    $logger_arguments = $message_arguments + ['link' => $this->renderer->render($link)];
 
     if ($result == SAVED_NEW) {
       $this->messenger()->addStatus($this->t('New lp host entity %label has been created.', $message_arguments));
@@ -32,6 +64,7 @@ class LpHostEntityForm extends ContentEntityForm {
     }
 
     $form_state->setRedirect('entity.lp_host_entity.canonical', ['lp_host_entity' => $entity->id()]);
+    return $result;
   }
 
 }
-- 
GitLab


From bc6dec9444b7290fd0906fb7dd58517462097db5 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Fri, 24 Jan 2025 17:40:49 -0700
Subject: [PATCH 04/13] Change dev dependency version

---
 composer.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/composer.json b/composer.json
index 785b4ef..3856ce5 100644
--- a/composer.json
+++ b/composer.json
@@ -22,6 +22,6 @@
   "require-dev": {
     "drupal/entity_usage": "2.x-dev",
     "drupal/block_field": "~1.0",
-    "drupal/field_group": "~1.0"
+    "drupal/field_group": "^1.0"
   }
 }
-- 
GitLab


From a4cd09968944b102149e88db0bb871f3ae52b8ce Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Fri, 24 Jan 2025 17:47:34 -0700
Subject: [PATCH 05/13] Change dev dependency version

---
 composer.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/composer.json b/composer.json
index 3856ce5..0e3fc69 100644
--- a/composer.json
+++ b/composer.json
@@ -22,6 +22,6 @@
   "require-dev": {
     "drupal/entity_usage": "2.x-dev",
     "drupal/block_field": "~1.0",
-    "drupal/field_group": "^1.0"
+    "drupal/field_group": "^3.6"
   }
 }
-- 
GitLab


From de0815cf21ed9732f24e66cb04866dc3792bfb3a Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Tue, 28 Jan 2025 10:19:09 -0700
Subject: [PATCH 06/13] phpcs errors

---
 .../layout_paragraphs_library.module          |  2 +-
 ...youtParagraphsPermissionsBuilderAccess.php |  8 +++---
 src/Access/LayoutParagraphsBuilderAccess.php  |  8 +++---
 src/Controller/ChooseComponentController.php  |  6 +----
 src/Controller/ComponentFormController.php    |  2 +-
 src/Controller/DuplicateController.php        |  4 +--
 .../LayoutParagraphsBuilderController.php     |  4 +--
 src/Controller/ReorderController.php          |  4 +--
 src/Element/LayoutParagraphsBuilder.php       |  7 +++---
 src/Element/LayoutSelect.php                  |  3 ++-
 ...LayoutParagraphsComponentDefaultsEvent.php |  3 ++-
 ...LayoutParagraphsAllowedTypesSubscriber.php |  2 +-
 ...LayoutParagraphsUpdateLayoutSubscriber.php |  2 +-
 src/Form/ComponentFormBase.php                | 25 ++++++++++---------
 src/Form/DeleteComponentForm.php              | 12 ++++-----
 src/Form/EditComponentForm.php                | 11 ++++----
 src/Form/InsertComponentForm.php              | 22 ++++++++--------
 src/Form/LayoutParagraphsBuilderForm.php      | 15 +++++------
 .../LayoutParagraphsSectionsSettingsForm.php  |  2 +-
 src/Form/LayoutParagraphsSettingsForm.php     |  2 +-
 src/LayoutParagraphsLayout.php                |  7 +++---
 src/LayoutParagraphsSection.php               |  4 +--
 .../LayoutParagraphsBuilderFormatter.php      |  4 +--
 .../LayoutParagraphsFormatter.php             |  2 +-
 .../FieldWidget/LayoutParagraphsWidget.php    |  6 ++---
 .../Behavior/LayoutParagraphsBehavior.php     | 23 +++++++++--------
 src/Utility/Dialog.php                        |  2 +-
 ...ragraphs_complex_permissions_test.info.yml |  4 +--
 .../src/Access/ReorderAccessByContentType.php |  8 +++---
 ...ut_paragraphs_correct_region_test.info.yml |  2 +-
 ...ayoutParagraphsRefreshLayoutSubscriber.php |  2 +-
 ...aragraphs_custom_host_entity_test.info.yml |  2 +-
 ...agraphs_empty_component_list_test.info.yml |  2 +-
 ...LayoutParagraphsAllowedTypesSubscriber.php |  2 +-
 ...ut_paragraphs_form_rendering_test.info.yml |  2 +-
 .../src/Form/TestForm.php                     |  6 ++---
 ...paragraphs_preprocess_layout_test.info.yml |  2 +-
 ...yout_paragraphs_translations_test.info.yml |  2 +-
 tests/src/Functional/LayoutParagraphsTest.php |  2 ++
 .../AlterControlsTest.php                     |  2 ++
 .../FunctionalJavascript/BlockFieldTest.php   |  4 ++-
 .../BuilderAlteredTemplatesTest.php           |  2 ++
 .../src/FunctionalJavascript/BuilderTest.php  |  2 ++
 .../FunctionalJavascript/BuilderTestBase.php  |  4 ++-
 .../FunctionalJavascript/CardinalityTest.php  |  2 ++
 .../ComplexPermissionsTest.php                |  2 ++
 .../CorrectRegionTest.php                     |  2 ++
 .../CustomHostEntityTest.php                  |  4 ++-
 .../FunctionalJavascript/DisplayModeTest.php  |  4 ++-
 .../DuplicateComponentsTest.php               |  2 ++
 .../EmptyComponentListTest.php                |  2 ++
 .../FormRenderingTest.php                     |  2 ++
 .../LayoutParagraphsLibraryTest.php           |  4 ++-
 .../LayoutParagraphsPermissionsTest.php       |  2 ++
 .../FunctionalJavascript/ModalHeightTest.php  |  2 ++
 .../NestedSectionsTest.php                    |  4 ++-
 .../ParagraphsWidgetCompatibilityTest.php     |  2 ++
 .../PreprocessLayoutTest.php                  |  2 ++
 .../ReorderFormElementsTest.php               |  2 ++
 .../FunctionalJavascript/TranslationTest.php  |  2 ++
 .../ValidationConstraintTest.php              |  2 ++
 61 files changed, 167 insertions(+), 117 deletions(-)

diff --git a/modules/layout_paragraphs_library/layout_paragraphs_library.module b/modules/layout_paragraphs_library/layout_paragraphs_library.module
index 2417710..e548336 100644
--- a/modules/layout_paragraphs_library/layout_paragraphs_library.module
+++ b/modules/layout_paragraphs_library/layout_paragraphs_library.module
@@ -197,7 +197,7 @@ function layout_paragraphs_library_ajax(&$form, FormStateInterface $form_state)
       if ($command['command'] == 'insert' && $command['selector'] == $wrong_selector) {
         $command['selector'] = $correct_selector;
       }
-    };
+    }
     return $response;
   }
   else {
diff --git a/modules/layout_paragraphs_permissions/src/Access/LayoutParagraphsPermissionsBuilderAccess.php b/modules/layout_paragraphs_permissions/src/Access/LayoutParagraphsPermissionsBuilderAccess.php
index d8e760f..67c5eda 100644
--- a/modules/layout_paragraphs_permissions/src/Access/LayoutParagraphsPermissionsBuilderAccess.php
+++ b/modules/layout_paragraphs_permissions/src/Access/LayoutParagraphsPermissionsBuilderAccess.php
@@ -14,14 +14,14 @@ use Drupal\Core\Access\AccessResult;
 class LayoutParagraphsPermissionsBuilderAccess extends LayoutParagraphsBuilderAccess {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function access(
     AccountInterface $account,
     LayoutParagraphsLayout $layout_paragraphs_layout,
-    string $operation = NULL,
-    string $component_uuid = NULL,
-    ParagraphsTypeInterface $paragraph_type = NULL
+    ?string $operation = NULL,
+    ?string $component_uuid = NULL,
+    ?ParagraphsTypeInterface $paragraph_type = NULL,
   ) {
     $access = parent::access($account, $layout_paragraphs_layout, $operation, $component_uuid, $paragraph_type);
     if ($operation == 'reorder') {
diff --git a/src/Access/LayoutParagraphsBuilderAccess.php b/src/Access/LayoutParagraphsBuilderAccess.php
index ceabc69..4d64a92 100644
--- a/src/Access/LayoutParagraphsBuilderAccess.php
+++ b/src/Access/LayoutParagraphsBuilderAccess.php
@@ -33,7 +33,7 @@ class LayoutParagraphsBuilderAccess implements AccessInterface {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The account to check access for.
@@ -52,9 +52,9 @@ class LayoutParagraphsBuilderAccess implements AccessInterface {
   public function access(
     AccountInterface $account,
     LayoutParagraphsLayout $layout_paragraphs_layout,
-    string $operation = NULL,
-    string $component_uuid = NULL,
-    ParagraphsTypeInterface $paragraph_type = NULL
+    ?string $operation = NULL,
+    ?string $component_uuid = NULL,
+    ?ParagraphsTypeInterface $paragraph_type = NULL,
   ) {
 
     // Check field access.
diff --git a/src/Controller/ChooseComponentController.php b/src/Controller/ChooseComponentController.php
index 8d99751..f00d36a 100644
--- a/src/Controller/ChooseComponentController.php
+++ b/src/Controller/ChooseComponentController.php
@@ -57,7 +57,7 @@ class ChooseComponentController extends ControllerBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
@@ -78,9 +78,6 @@ class ChooseComponentController extends ControllerBase {
    *   The build array.
    */
   public function list(Request $request, LayoutParagraphsLayout $layout_paragraphs_layout) {
-    $route_params = [
-      'layout_paragraphs_layout' => $layout_paragraphs_layout->id(),
-    ];
     $context = $this->getContextFromRequest($request);
     // If inserting a new item adjecent to a sibling component, the region
     // passed in the URL will be incorrect if the existing sibling component
@@ -270,7 +267,6 @@ class ChooseComponentController extends ControllerBase {
           'layout_paragraphs_layout' => $layout->id(),
           'paragraph_type_id' => $paragraphs_type->id(),
         ];
-        $query_params = $context;
         $types[$bundle] = [
           'id' => $paragraphs_type->id(),
           'label' => $paragraphs_type->label(),
diff --git a/src/Controller/ComponentFormController.php b/src/Controller/ComponentFormController.php
index 0fd36ff..74c40a5 100644
--- a/src/Controller/ComponentFormController.php
+++ b/src/Controller/ComponentFormController.php
@@ -38,7 +38,7 @@ class ComponentFormController extends ControllerBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
diff --git a/src/Controller/DuplicateController.php b/src/Controller/DuplicateController.php
index 110695d..509af78 100755
--- a/src/Controller/DuplicateController.php
+++ b/src/Controller/DuplicateController.php
@@ -30,14 +30,14 @@ class DuplicateController extends ControllerBase {
   protected $tempstore;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(LayoutParagraphsLayoutTempstoreRepository $tempstore) {
     $this->tempstore = $tempstore;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
diff --git a/src/Controller/LayoutParagraphsBuilderController.php b/src/Controller/LayoutParagraphsBuilderController.php
index e68ae39..f278c86 100644
--- a/src/Controller/LayoutParagraphsBuilderController.php
+++ b/src/Controller/LayoutParagraphsBuilderController.php
@@ -46,7 +46,7 @@ class LayoutParagraphsBuilderController extends ControllerBase {
   protected $layoutParagraphsBuilderAccess;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(LayoutParagraphsLayoutTempstoreRepository $tempstore, EntityDisplayRepositoryInterface $entity_display_repository, $layout_paragraphs_builder_access) {
     $this->tempstore = $tempstore;
@@ -55,7 +55,7 @@ class LayoutParagraphsBuilderController extends ControllerBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
diff --git a/src/Controller/ReorderController.php b/src/Controller/ReorderController.php
index 823f056..3b0f065 100644
--- a/src/Controller/ReorderController.php
+++ b/src/Controller/ReorderController.php
@@ -28,14 +28,14 @@ class ReorderController extends ControllerBase {
   protected $tempstore;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(LayoutParagraphsLayoutTempstoreRepository $tempstore) {
     $this->tempstore = $tempstore;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
diff --git a/src/Element/LayoutParagraphsBuilder.php b/src/Element/LayoutParagraphsBuilder.php
index 47a7578..f18841a 100644
--- a/src/Element/LayoutParagraphsBuilder.php
+++ b/src/Element/LayoutParagraphsBuilder.php
@@ -80,7 +80,7 @@ class LayoutParagraphsBuilder extends RenderElementBase implements ContainerFact
   protected $layoutParagraphsLayout;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(
     array $configuration,
@@ -90,7 +90,8 @@ class LayoutParagraphsBuilder extends RenderElementBase implements ContainerFact
     EntityTypeManagerInterface $entity_type_manager,
     LayoutPluginManagerInterface $layout_plugin_manager,
     RendererInterface $renderer,
-    EntityTypeBundleInfoInterface $entity_type_bundle_info) {
+    EntityTypeBundleInfoInterface $entity_type_bundle_info,
+  ) {
 
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->tempstore = $tempstore_repository;
@@ -101,7 +102,7 @@ class LayoutParagraphsBuilder extends RenderElementBase implements ContainerFact
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static(
diff --git a/src/Element/LayoutSelect.php b/src/Element/LayoutSelect.php
index d0e0320..e5ed138 100644
--- a/src/Element/LayoutSelect.php
+++ b/src/Element/LayoutSelect.php
@@ -54,7 +54,8 @@ class LayoutSelect extends Radios {
   public static function processLayoutSelect(
     &$element,
     FormStateInterface $form_state,
-    &$complete_form) {
+    &$complete_form,
+  ) {
     foreach (Element::children($element) as $key) {
       $layout_name = $key;
       $definition = \Drupal::service('plugin.manager.core.layout')->getDefinition($layout_name);
diff --git a/src/Event/LayoutParagraphsComponentDefaultsEvent.php b/src/Event/LayoutParagraphsComponentDefaultsEvent.php
index 200d0d0..8f87aaf 100644
--- a/src/Event/LayoutParagraphsComponentDefaultsEvent.php
+++ b/src/Event/LayoutParagraphsComponentDefaultsEvent.php
@@ -22,7 +22,8 @@ class LayoutParagraphsComponentDefaultsEvent extends Event {
    */
   public function __construct(
     protected string $paragraphTypeId,
-    protected array $defaultValues) {
+    protected array $defaultValues,
+  ) {
   }
 
   /**
diff --git a/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php b/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
index 504bfd2..5ecf3e3 100644
--- a/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
+++ b/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
@@ -11,7 +11,7 @@ use Drupal\layout_paragraphs\Event\LayoutParagraphsAllowedTypesEvent;
 class LayoutParagraphsAllowedTypesSubscriber implements EventSubscriberInterface {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function getSubscribedEvents(): array {
     return [
diff --git a/src/EventSubscriber/LayoutParagraphsUpdateLayoutSubscriber.php b/src/EventSubscriber/LayoutParagraphsUpdateLayoutSubscriber.php
index 89ac79d..1140618 100644
--- a/src/EventSubscriber/LayoutParagraphsUpdateLayoutSubscriber.php
+++ b/src/EventSubscriber/LayoutParagraphsUpdateLayoutSubscriber.php
@@ -11,7 +11,7 @@ use Drupal\layout_paragraphs\Event\LayoutParagraphsUpdateLayoutEvent;
 class LayoutParagraphsUpdateLayoutSubscriber implements EventSubscriberInterface {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function getSubscribedEvents(): array {
     return [
diff --git a/src/Form/ComponentFormBase.php b/src/Form/ComponentFormBase.php
index a1f5d66..0dbb7b2 100644
--- a/src/Form/ComponentFormBase.php
+++ b/src/Form/ComponentFormBase.php
@@ -91,7 +91,7 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   protected $formMode = 'default';
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(
     LayoutParagraphsLayoutTempstoreRepository $tempstore,
@@ -99,8 +99,8 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
     LayoutPluginManagerInterface $layout_plugin_manager,
     ModuleHandlerInterface $module_handler,
     EventDispatcherInterface $event_dispatcher,
-    EntityRepositoryInterface $entity_repository
-    ) {
+    EntityRepositoryInterface $entity_repository,
+  ) {
     $this->tempstore = $tempstore;
     $this->entityTypeManager = $entity_type_manager;
     $this->layoutPluginManager = $layout_plugin_manager;
@@ -110,7 +110,7 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
@@ -124,28 +124,28 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getFormId() {
     return 'layout_paragraphs_component_form';
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getParagraph() {
     return $this->paragraph;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function setParagraph(ParagraphInterface $paragraph) {
     $this->paragraph = $paragraph;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getLayoutParagraphsLayout() {
     return $this->layoutParagraphsLayout;
@@ -164,7 +164,8 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   protected function buildComponentForm(
     array $form,
     FormStateInterface $form_state,
-    string $form_display_mode = 'default') {
+    string $form_display_mode = 'default',
+  ) {
 
     $this->initFormLangcodes($form_state);
     $display = EntityFormDisplay::collectRenderDisplay($this->paragraph, $form_display_mode);
@@ -312,7 +313,7 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   abstract public function successfulAjaxSubmit(array $form, FormStateInterface $form_state);
 
@@ -621,14 +622,14 @@ abstract class ComponentFormBase extends FormBase implements ComponentFormInterf
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getFormMode() {
     return $this->formMode;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function setFormMode($view_mode) {
     $this->formMode = $view_mode;
diff --git a/src/Form/DeleteComponentForm.php b/src/Form/DeleteComponentForm.php
index 2b7cafd..c3ed13d 100644
--- a/src/Form/DeleteComponentForm.php
+++ b/src/Form/DeleteComponentForm.php
@@ -35,14 +35,14 @@ class DeleteComponentForm extends FormBase {
   protected $componentUuid;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   protected function __construct($tempstore) {
     $this->tempstore = $tempstore;
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
@@ -51,16 +51,16 @@ class DeleteComponentForm extends FormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getFormId() {
     return 'layout_paragraphs_delete_component_form';
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state, LayoutParagraphsLayout $layout_paragraphs_layout = NULL, string $component_uuid = NULL) {
+  public function buildForm(array $form, FormStateInterface $form_state, ?LayoutParagraphsLayout $layout_paragraphs_layout = NULL, ?string $component_uuid = NULL) {
     $this->setLayoutParagraphsLayout($layout_paragraphs_layout);
     $this->componentUuid = $component_uuid;
     $component = $this->layoutParagraphsLayout->getComponentByUuid($this->componentUuid);
@@ -100,7 +100,7 @@ class DeleteComponentForm extends FormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * Deletes the component and saves the layout.
    */
diff --git a/src/Form/EditComponentForm.php b/src/Form/EditComponentForm.php
index 3238646..19fbc43 100644
--- a/src/Form/EditComponentForm.php
+++ b/src/Form/EditComponentForm.php
@@ -16,13 +16,14 @@ use Drupal\layout_paragraphs\Ajax\LayoutParagraphsEventCommand;
 class EditComponentForm extends ComponentFormBase {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function buildForm(
     array $form,
     FormStateInterface $form_state,
-    LayoutParagraphsLayout $layout_paragraphs_layout = NULL,
-    string $component_uuid = NULL) {
+    ?LayoutParagraphsLayout $layout_paragraphs_layout = NULL,
+    ?string $component_uuid = NULL,
+  ) {
 
     $this->setLayoutParagraphsLayout($layout_paragraphs_layout);
     $this->paragraph = $this->layoutParagraphsLayout
@@ -58,7 +59,7 @@ class EditComponentForm extends ComponentFormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function successfulAjaxSubmit(array $form, FormStateInterface $form_state) {
 
@@ -121,7 +122,7 @@ class EditComponentForm extends ComponentFormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     parent::submitForm($form, $form_state);
diff --git a/src/Form/InsertComponentForm.php b/src/Form/InsertComponentForm.php
index 5a2372d..c844c89 100644
--- a/src/Form/InsertComponentForm.php
+++ b/src/Form/InsertComponentForm.php
@@ -73,7 +73,7 @@ class InsertComponentForm extends ComponentFormBase {
   protected $siblingUuid;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * @param array $form
    *   The form array.
@@ -97,14 +97,14 @@ class InsertComponentForm extends ComponentFormBase {
   public function buildForm(
     array $form,
     FormStateInterface $form_state,
-    LayoutParagraphsLayout $layout_paragraphs_layout = NULL,
-    ParagraphsTypeInterface $paragraph_type = NULL,
-    string $parent_uuid = NULL,
-    string $region = NULL,
-    string $sibling_uuid = NULL,
-    string $placement = NULL,
-    array $paragraph_defaults = []
-    ) {
+    ?LayoutParagraphsLayout $layout_paragraphs_layout = NULL,
+    ?ParagraphsTypeInterface $paragraph_type = NULL,
+    ?string $parent_uuid = NULL,
+    ?string $region = NULL,
+    ?string $sibling_uuid = NULL,
+    ?string $placement = NULL,
+    array $paragraph_defaults = [],
+  ) {
 
     if (!empty($paragraph_defaults)) {
       $this->paragraphDefaults = $paragraph_defaults;
@@ -144,7 +144,7 @@ class InsertComponentForm extends ComponentFormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function successfulAjaxSubmit(array $form, FormStateInterface $form_state) {
 
@@ -180,7 +180,7 @@ class InsertComponentForm extends ComponentFormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
     parent::submitForm($form, $form_state);
diff --git a/src/Form/LayoutParagraphsBuilderForm.php b/src/Form/LayoutParagraphsBuilderForm.php
index 29c0d63..dd47baa 100644
--- a/src/Form/LayoutParagraphsBuilderForm.php
+++ b/src/Form/LayoutParagraphsBuilderForm.php
@@ -50,14 +50,14 @@ class LayoutParagraphsBuilderForm extends FormBase {
   protected $entityTypeManager;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getFormId() {
     return 'layout_paragraphs_builder_form';
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(LayoutParagraphsLayoutTempstoreRepository $tempstore, EntityTypeManagerInterface $entity_type_manager) {
     $this->tempstore = $tempstore;
@@ -65,7 +65,7 @@ class LayoutParagraphsBuilderForm extends FormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function create(ContainerInterface $container) {
     return new static(
@@ -91,9 +91,10 @@ class LayoutParagraphsBuilderForm extends FormBase {
   public function buildForm(
     array $form,
     FormStateInterface $form_state,
-    ContentEntityInterface $entity = NULL,
-    string $field_name = NULL,
-    string $view_mode = NULL) {
+    ?ContentEntityInterface $entity = NULL,
+    ?string $field_name = NULL,
+    ?string $view_mode = NULL,
+  ) {
 
     $parents = array_merge($form['#parents'] ?? [], ['layout_paragraphs_storage_key']);
     $input = $form_state->getUserInput();
@@ -203,7 +204,7 @@ class LayoutParagraphsBuilderForm extends FormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * Saves the layout to its parent entity.
    *
diff --git a/src/Form/LayoutParagraphsSectionsSettingsForm.php b/src/Form/LayoutParagraphsSectionsSettingsForm.php
index ae7e4f7..dbb9edc 100644
--- a/src/Form/LayoutParagraphsSectionsSettingsForm.php
+++ b/src/Form/LayoutParagraphsSectionsSettingsForm.php
@@ -56,7 +56,7 @@ class LayoutParagraphsSectionsSettingsForm extends ConfigFormBase {
     TypedConfigManagerInterface $typedConfigManager,
     EntityTypeBundleInfoInterface $entity_type_bundle_info,
     EntityTypeManagerInterface $entity_type_manager,
-    LayoutPluginManagerInterface $layout_plugin_manager
+    LayoutPluginManagerInterface $layout_plugin_manager,
   ) {
     parent::__construct($config_factory, $typedConfigManager);
     $this->typedConfigManager = $typedConfigManager;
diff --git a/src/Form/LayoutParagraphsSettingsForm.php b/src/Form/LayoutParagraphsSettingsForm.php
index 394b9b1..547e41e 100644
--- a/src/Form/LayoutParagraphsSettingsForm.php
+++ b/src/Form/LayoutParagraphsSettingsForm.php
@@ -23,7 +23,7 @@ class LayoutParagraphsSettingsForm extends ConfigFormBase {
    */
   public function __construct(
     ConfigFactoryInterface $config_factory,
-    TypedConfigManagerInterface $typedConfigManager
+    TypedConfigManagerInterface $typedConfigManager,
   ) {
     parent::__construct($config_factory, $typedConfigManager);
     $this->typedConfigManager = $typedConfigManager;
diff --git a/src/LayoutParagraphsLayout.php b/src/LayoutParagraphsLayout.php
index 68ce849..89fddba 100644
--- a/src/LayoutParagraphsLayout.php
+++ b/src/LayoutParagraphsLayout.php
@@ -76,7 +76,7 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
    */
   public function __construct(
     EntityReferenceFieldItemListInterface $paragraphs_reference_field,
-    array $settings = []
+    array $settings = [],
   ) {
     $this->paragraphsReferenceField = $paragraphs_reference_field;
     $this->settings = $settings;
@@ -363,7 +363,7 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
    * @return \Drupal\layout_paragraphs\LayoutParagraphsComponent
    *   The duplicated component.
    */
-  public function duplicateComponent(string $source_uuid, string $target_section_uuid = NULL) {
+  public function duplicateComponent(string $source_uuid, ?string $target_section_uuid = NULL) {
     $source_component = $this->getComponentByUuid($source_uuid);
     $cloned_paragraph = $source_component->getEntity()->createDuplicate();
     if ($target_section_uuid) {
@@ -467,7 +467,8 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
   protected function insertSiblingComponent(
     string $sibling_uuid,
     ParagraphInterface $new_paragraph,
-    int $delta_offset = 0) {
+    int $delta_offset = 0,
+  ) {
 
     // Create a layout component for the new paragraph.
     $new_component = $this->getComponent($new_paragraph);
diff --git a/src/LayoutParagraphsSection.php b/src/LayoutParagraphsSection.php
index 1ef0454..8aed58f 100644
--- a/src/LayoutParagraphsSection.php
+++ b/src/LayoutParagraphsSection.php
@@ -33,7 +33,7 @@ class LayoutParagraphsSection extends LayoutParagraphsComponent {
    */
   public function __construct(
     ParagraphInterface $paragraph,
-    array $components = []
+    array $components = [],
   ) {
     parent::__construct($paragraph);
     $this->components = $components;
@@ -120,7 +120,7 @@ class LayoutParagraphsSection extends LayoutParagraphsComponent {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function defaultSettings() {
     return [
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
index c814b70..b954a1f 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
@@ -63,7 +63,7 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
   protected $fieldWidgetPluginManager;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, EntityDisplayRepositoryInterface $entity_display_repository, EntityRepositoryInterface $entity_repository, LayoutParagraphsLayoutTempstoreRepository $tempstore, AccessInterface $layout_paragraphs_builder_access, AccountProxyInterface $current_user, PluginManagerInterface $field_widget_plugin_manager) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $logger_factory, $entity_display_repository, $entity_repository);
@@ -96,7 +96,7 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function view(FieldItemListInterface $items, $langcode = NULL) {
 
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
index 8dd0f34..8231f6b 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
@@ -36,7 +36,7 @@ class LayoutParagraphsFormatter extends EntityReferenceRevisionsEntityFormatter
   protected $entityRepository;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LoggerChannelFactoryInterface $logger_factory, EntityDisplayRepositoryInterface $entity_display_repository, EntityRepositoryInterface $entity_repository) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $logger_factory, $entity_display_repository);
diff --git a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
index 4e6a672..54c6b53 100644
--- a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
@@ -126,7 +126,7 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
   protected $contentTranslationManager;
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function __construct(
     $plugin_id,
@@ -141,8 +141,8 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
     EntityDisplayRepositoryInterface $entity_display_repository,
     ConfigFactoryInterface $config_factory,
     EntityRepositoryInterface $entity_repository,
-    $content_translation_manager
-    ) {
+    $content_translation_manager,
+  ) {
     parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
 
     $this->tempstore = $tempstore;
diff --git a/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php b/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
index 82a5567..585928a 100644
--- a/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
+++ b/src/Plugin/paragraphs/Behavior/LayoutParagraphsBehavior.php
@@ -99,15 +99,16 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
    *   The logger factory.
    */
   public function __construct(
-      array $configuration,
-      $plugin_id,
-      $plugin_definition,
-      EntityFieldManagerInterface $entity_field_manager,
-      LayoutPluginManagerInterface $layout_plugin_manager,
-      EntityTypeManagerInterface $entity_type_manager,
-      LayoutParagraphsRendererService $layout_paragraphs_renderer_service,
-      PluginFormFactoryInterface $plugin_form_factory,
-      LoggerChannelFactoryInterface $logger_factory) {
+    array $configuration,
+    $plugin_id,
+    $plugin_definition,
+    EntityFieldManagerInterface $entity_field_manager,
+    LayoutPluginManagerInterface $layout_plugin_manager,
+    EntityTypeManagerInterface $entity_type_manager,
+    LayoutParagraphsRendererService $layout_paragraphs_renderer_service,
+    PluginFormFactoryInterface $plugin_form_factory,
+    LoggerChannelFactoryInterface $logger_factory,
+  ) {
     parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_field_manager);
     $this->layoutPluginManager = $layout_plugin_manager;
     $this->entityTypeManager = $entity_type_manager;
@@ -134,12 +135,12 @@ class LayoutParagraphsBehavior extends ParagraphsBehaviorBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function buildBehaviorForm(
     ParagraphInterface $paragraph,
     array &$form,
-    FormStateInterface $form_state
+    FormStateInterface $form_state,
   ) {
 
     $layout_paragraphs_section = new LayoutParagraphsSection($paragraph);
diff --git a/src/Utility/Dialog.php b/src/Utility/Dialog.php
index a65a70a..3582853 100644
--- a/src/Utility/Dialog.php
+++ b/src/Utility/Dialog.php
@@ -59,7 +59,7 @@ class Dialog {
    * @return array
    *   The modal settings.
    */
-  public static function dialogSettings(LayoutParagraphsLayout $layout = NULL) {
+  public static function dialogSettings(?LayoutParagraphsLayout $layout = NULL) {
     $config = \Drupal::config('layout_paragraphs.modal_settings');
 
     $modal_settings = [
diff --git a/tests/modules/layout_paragraphs_complex_permissions_test/layout_paragraphs_complex_permissions_test.info.yml b/tests/modules/layout_paragraphs_complex_permissions_test/layout_paragraphs_complex_permissions_test.info.yml
index a8d29a1..ea36f05 100644
--- a/tests/modules/layout_paragraphs_complex_permissions_test/layout_paragraphs_complex_permissions_test.info.yml
+++ b/tests/modules/layout_paragraphs_complex_permissions_test/layout_paragraphs_complex_permissions_test.info.yml
@@ -4,5 +4,5 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
-  - layout_paragraphs_permissions
+  - layout_paragraphs:layout_paragraphs
+  - layout_paragraphs:layout_paragraphs_permissions
diff --git a/tests/modules/layout_paragraphs_complex_permissions_test/src/Access/ReorderAccessByContentType.php b/tests/modules/layout_paragraphs_complex_permissions_test/src/Access/ReorderAccessByContentType.php
index 5349c57..87b4b1a 100644
--- a/tests/modules/layout_paragraphs_complex_permissions_test/src/Access/ReorderAccessByContentType.php
+++ b/tests/modules/layout_paragraphs_complex_permissions_test/src/Access/ReorderAccessByContentType.php
@@ -14,14 +14,14 @@ use Drupal\layout_paragraphs\Access\LayoutParagraphsBuilderAccess;
 class ReorderAccessByContentType extends LayoutParagraphsBuilderAccess {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function access(
     AccountInterface $account,
     LayoutParagraphsLayout $layout_paragraphs_layout,
-    string $operation = NULL,
-    string $component_uuid = NULL,
-    ParagraphsTypeInterface $paragraph_type = NULL
+    ?string $operation = NULL,
+    ?string $component_uuid = NULL,
+    ?ParagraphsTypeInterface $paragraph_type = NULL,
   ) {
     $access = parent::access($account, $layout_paragraphs_layout, $operation, $component_uuid, $paragraph_type);
     if ($operation == 'reorder') {
diff --git a/tests/modules/layout_paragraphs_correct_region_test/layout_paragraphs_correct_region_test.info.yml b/tests/modules/layout_paragraphs_correct_region_test/layout_paragraphs_correct_region_test.info.yml
index 0b7aa74..48ef182 100644
--- a/tests/modules/layout_paragraphs_correct_region_test/layout_paragraphs_correct_region_test.info.yml
+++ b/tests/modules/layout_paragraphs_correct_region_test/layout_paragraphs_correct_region_test.info.yml
@@ -4,4 +4,4 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
diff --git a/tests/modules/layout_paragraphs_correct_region_test/src/EventSubscriber/LayoutParagraphsRefreshLayoutSubscriber.php b/tests/modules/layout_paragraphs_correct_region_test/src/EventSubscriber/LayoutParagraphsRefreshLayoutSubscriber.php
index 90eb51e..92e0c9e 100644
--- a/tests/modules/layout_paragraphs_correct_region_test/src/EventSubscriber/LayoutParagraphsRefreshLayoutSubscriber.php
+++ b/tests/modules/layout_paragraphs_correct_region_test/src/EventSubscriber/LayoutParagraphsRefreshLayoutSubscriber.php
@@ -11,7 +11,7 @@ use Drupal\layout_paragraphs\Event\LayoutParagraphsUpdateLayoutEvent;
 class LayoutParagraphsRefreshLayoutSubscriber implements EventSubscriberInterface {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function getSubscribedEvents(): array {
     return [
diff --git a/tests/modules/layout_paragraphs_custom_host_entity_test/layout_paragraphs_custom_host_entity_test.info.yml b/tests/modules/layout_paragraphs_custom_host_entity_test/layout_paragraphs_custom_host_entity_test.info.yml
index 68dc57b..0d7c8e7 100644
--- a/tests/modules/layout_paragraphs_custom_host_entity_test/layout_paragraphs_custom_host_entity_test.info.yml
+++ b/tests/modules/layout_paragraphs_custom_host_entity_test/layout_paragraphs_custom_host_entity_test.info.yml
@@ -4,6 +4,6 @@ description: 'Provides a lp host entity entity.'
 package: Layout Paragraphs Tests
 core_version_requirement: ^9.2 || ^10 || ^11
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
   - drupal:text
 configure: entity.lp_host_entity.settings
diff --git a/tests/modules/layout_paragraphs_empty_component_list_test/layout_paragraphs_empty_component_list_test.info.yml b/tests/modules/layout_paragraphs_empty_component_list_test/layout_paragraphs_empty_component_list_test.info.yml
index 44bd55a..9d31395 100644
--- a/tests/modules/layout_paragraphs_empty_component_list_test/layout_paragraphs_empty_component_list_test.info.yml
+++ b/tests/modules/layout_paragraphs_empty_component_list_test/layout_paragraphs_empty_component_list_test.info.yml
@@ -4,4 +4,4 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
diff --git a/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php b/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
index cf2bf76..bcaab6b 100644
--- a/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
+++ b/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
@@ -31,7 +31,7 @@ class LayoutParagraphsAllowedTypesSubscriber implements EventSubscriberInterface
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public static function getSubscribedEvents(): array {
     return [
diff --git a/tests/modules/layout_paragraphs_form_rendering_test/layout_paragraphs_form_rendering_test.info.yml b/tests/modules/layout_paragraphs_form_rendering_test/layout_paragraphs_form_rendering_test.info.yml
index 4641c4c..7103e3e 100644
--- a/tests/modules/layout_paragraphs_form_rendering_test/layout_paragraphs_form_rendering_test.info.yml
+++ b/tests/modules/layout_paragraphs_form_rendering_test/layout_paragraphs_form_rendering_test.info.yml
@@ -4,4 +4,4 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
diff --git a/tests/modules/layout_paragraphs_form_rendering_test/src/Form/TestForm.php b/tests/modules/layout_paragraphs_form_rendering_test/src/Form/TestForm.php
index 59194a8..4689959 100644
--- a/tests/modules/layout_paragraphs_form_rendering_test/src/Form/TestForm.php
+++ b/tests/modules/layout_paragraphs_form_rendering_test/src/Form/TestForm.php
@@ -14,14 +14,14 @@ use Drupal\Core\Form\FormStateInterface;
 class TestForm extends FormBase {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function getFormId() {
     return 'layout_paragraphs_test_form';
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     // Intentionally named "title" to test for conflict with node title.
@@ -39,7 +39,7 @@ class TestForm extends FormBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
   }
diff --git a/tests/modules/layout_paragraphs_preprocess_layout_test/layout_paragraphs_preprocess_layout_test.info.yml b/tests/modules/layout_paragraphs_preprocess_layout_test/layout_paragraphs_preprocess_layout_test.info.yml
index d68a28a..f9788f7 100644
--- a/tests/modules/layout_paragraphs_preprocess_layout_test/layout_paragraphs_preprocess_layout_test.info.yml
+++ b/tests/modules/layout_paragraphs_preprocess_layout_test/layout_paragraphs_preprocess_layout_test.info.yml
@@ -4,4 +4,4 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
diff --git a/tests/modules/layout_paragraphs_translations_test/layout_paragraphs_translations_test.info.yml b/tests/modules/layout_paragraphs_translations_test/layout_paragraphs_translations_test.info.yml
index c3858f6..3bdef72 100644
--- a/tests/modules/layout_paragraphs_translations_test/layout_paragraphs_translations_test.info.yml
+++ b/tests/modules/layout_paragraphs_translations_test/layout_paragraphs_translations_test.info.yml
@@ -4,4 +4,4 @@ core_version_requirement: ^9.2 || ^10 || ^11
 type: module
 package: Layout Paragraphs
 dependencies:
-  - layout_paragraphs
+  - layout_paragraphs:layout_paragraphs
diff --git a/tests/src/Functional/LayoutParagraphsTest.php b/tests/src/Functional/LayoutParagraphsTest.php
index 484e461..9a27de9 100644
--- a/tests/src/Functional/LayoutParagraphsTest.php
+++ b/tests/src/Functional/LayoutParagraphsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\Functional;
 
 use Drupal\Tests\BrowserTestBase;
diff --git a/tests/src/FunctionalJavascript/AlterControlsTest.php b/tests/src/FunctionalJavascript/AlterControlsTest.php
index 6eb03b5..9535ac1 100644
--- a/tests/src/FunctionalJavascript/AlterControlsTest.php
+++ b/tests/src/FunctionalJavascript/AlterControlsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Behat\Mink\Exception\ExpectationException;
diff --git a/tests/src/FunctionalJavascript/BlockFieldTest.php b/tests/src/FunctionalJavascript/BlockFieldTest.php
index f656849..3e37d3a 100644
--- a/tests/src/FunctionalJavascript/BlockFieldTest.php
+++ b/tests/src/FunctionalJavascript/BlockFieldTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
@@ -25,7 +27,7 @@ class BlockFieldTest extends BuilderTestBase {
   ];
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   protected function setUp(): void {
     $this->markTestSkipped('must be revisited.');
diff --git a/tests/src/FunctionalJavascript/BuilderAlteredTemplatesTest.php b/tests/src/FunctionalJavascript/BuilderAlteredTemplatesTest.php
index 1102d75..c1469b5 100644
--- a/tests/src/FunctionalJavascript/BuilderAlteredTemplatesTest.php
+++ b/tests/src/FunctionalJavascript/BuilderAlteredTemplatesTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/BuilderTest.php b/tests/src/FunctionalJavascript/BuilderTest.php
index e4a345e..296708f 100644
--- a/tests/src/FunctionalJavascript/BuilderTest.php
+++ b/tests/src/FunctionalJavascript/BuilderTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/BuilderTestBase.php b/tests/src/FunctionalJavascript/BuilderTestBase.php
index b1d9ad0..ddc6ce8 100644
--- a/tests/src/FunctionalJavascript/BuilderTestBase.php
+++ b/tests/src/FunctionalJavascript/BuilderTestBase.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Behat\Mink\Exception\ExpectationException;
@@ -217,7 +219,7 @@ abstract class BuilderTestBase extends WebDriverTestBase {
   }
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * Added method with fixed return comment for IDE type hinting.
    *
diff --git a/tests/src/FunctionalJavascript/CardinalityTest.php b/tests/src/FunctionalJavascript/CardinalityTest.php
index c83be45..9a9ee07 100644
--- a/tests/src/FunctionalJavascript/CardinalityTest.php
+++ b/tests/src/FunctionalJavascript/CardinalityTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/ComplexPermissionsTest.php b/tests/src/FunctionalJavascript/ComplexPermissionsTest.php
index 5fc1c28..426c1ee 100644
--- a/tests/src/FunctionalJavascript/ComplexPermissionsTest.php
+++ b/tests/src/FunctionalJavascript/ComplexPermissionsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/CorrectRegionTest.php b/tests/src/FunctionalJavascript/CorrectRegionTest.php
index 9260c37..e86c525 100644
--- a/tests/src/FunctionalJavascript/CorrectRegionTest.php
+++ b/tests/src/FunctionalJavascript/CorrectRegionTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/CustomHostEntityTest.php b/tests/src/FunctionalJavascript/CustomHostEntityTest.php
index c88ba8f..b056654 100644
--- a/tests/src/FunctionalJavascript/CustomHostEntityTest.php
+++ b/tests/src/FunctionalJavascript/CustomHostEntityTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Drupal\field\Entity\FieldConfig;
@@ -61,7 +63,7 @@ class CustomHostEntityTest extends BuilderTest {
   ];
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    *
    * Adds fields to the custom host entity rather than a content type.
    */
diff --git a/tests/src/FunctionalJavascript/DisplayModeTest.php b/tests/src/FunctionalJavascript/DisplayModeTest.php
index c3234d4..a434621 100644
--- a/tests/src/FunctionalJavascript/DisplayModeTest.php
+++ b/tests/src/FunctionalJavascript/DisplayModeTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
@@ -28,7 +30,7 @@ class DisplayModeTest extends BuilderTestBase {
   ];
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   protected function setUp(): void {
     parent::setUp();
diff --git a/tests/src/FunctionalJavascript/DuplicateComponentsTest.php b/tests/src/FunctionalJavascript/DuplicateComponentsTest.php
index a30ea0f..d6b26d2 100644
--- a/tests/src/FunctionalJavascript/DuplicateComponentsTest.php
+++ b/tests/src/FunctionalJavascript/DuplicateComponentsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Behat\Mink\Exception\ExpectationException;
diff --git a/tests/src/FunctionalJavascript/EmptyComponentListTest.php b/tests/src/FunctionalJavascript/EmptyComponentListTest.php
index 75ac754..5ba52da 100644
--- a/tests/src/FunctionalJavascript/EmptyComponentListTest.php
+++ b/tests/src/FunctionalJavascript/EmptyComponentListTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/FormRenderingTest.php b/tests/src/FunctionalJavascript/FormRenderingTest.php
index 6454399..00823e1 100644
--- a/tests/src/FunctionalJavascript/FormRenderingTest.php
+++ b/tests/src/FunctionalJavascript/FormRenderingTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/LayoutParagraphsLibraryTest.php b/tests/src/FunctionalJavascript/LayoutParagraphsLibraryTest.php
index 69e22c2..980c76a 100644
--- a/tests/src/FunctionalJavascript/LayoutParagraphsLibraryTest.php
+++ b/tests/src/FunctionalJavascript/LayoutParagraphsLibraryTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
@@ -28,7 +30,7 @@ class LayoutParagraphsLibraryTest extends BuilderTestBase {
   ];
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   protected function setUp(): void {
     parent::setUp();
diff --git a/tests/src/FunctionalJavascript/LayoutParagraphsPermissionsTest.php b/tests/src/FunctionalJavascript/LayoutParagraphsPermissionsTest.php
index 6423c4a..a012b1d 100644
--- a/tests/src/FunctionalJavascript/LayoutParagraphsPermissionsTest.php
+++ b/tests/src/FunctionalJavascript/LayoutParagraphsPermissionsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/ModalHeightTest.php b/tests/src/FunctionalJavascript/ModalHeightTest.php
index 6297acf..351e3b5 100644
--- a/tests/src/FunctionalJavascript/ModalHeightTest.php
+++ b/tests/src/FunctionalJavascript/ModalHeightTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/NestedSectionsTest.php b/tests/src/FunctionalJavascript/NestedSectionsTest.php
index f95dad6..388e7d4 100644
--- a/tests/src/FunctionalJavascript/NestedSectionsTest.php
+++ b/tests/src/FunctionalJavascript/NestedSectionsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
@@ -12,7 +14,7 @@ use Drupal\Core\Entity\Entity\EntityFormDisplay;
 class NestedSectionsTest extends BuilderTestBase {
 
   /**
-   * {@inheritDoc}
+   * {@inheritdoc}
    */
   protected function setUp(): void {
     parent::setUp();
diff --git a/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php b/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
index 19f6534..8efd075 100644
--- a/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
+++ b/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
diff --git a/tests/src/FunctionalJavascript/PreprocessLayoutTest.php b/tests/src/FunctionalJavascript/PreprocessLayoutTest.php
index 1ad3241..c71a79d 100644
--- a/tests/src/FunctionalJavascript/PreprocessLayoutTest.php
+++ b/tests/src/FunctionalJavascript/PreprocessLayoutTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/ReorderFormElementsTest.php b/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
index bbb8d2d..9f4f714 100644
--- a/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
+++ b/tests/src/FunctionalJavascript/ReorderFormElementsTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
diff --git a/tests/src/FunctionalJavascript/TranslationTest.php b/tests/src/FunctionalJavascript/TranslationTest.php
index c87ff21..6c3e1bb 100644
--- a/tests/src/FunctionalJavascript/TranslationTest.php
+++ b/tests/src/FunctionalJavascript/TranslationTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 use Behat\Mink\Exception\ExpectationException;
diff --git a/tests/src/FunctionalJavascript/ValidationConstraintTest.php b/tests/src/FunctionalJavascript/ValidationConstraintTest.php
index 00c4ce7..7ca470f 100644
--- a/tests/src/FunctionalJavascript/ValidationConstraintTest.php
+++ b/tests/src/FunctionalJavascript/ValidationConstraintTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\Tests\layout_paragraphs\FunctionalJavascript;
 
 /**
-- 
GitLab


From 825ce16abe41deb23132609b7af7eb8be74adf13 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Tue, 28 Jan 2025 11:48:15 -0700
Subject: [PATCH 07/13] Fix cspell mistakes. Add spelling exceptions to gitlab
 ci config.

---
 .gitlab-ci.yml                                            | 1 +
 README.md                                                 | 8 ++++----
 config/schema/layout_paragraphs.schema.yml                | 2 +-
 js/builder.js                                             | 6 +++---
 layout_paragraphs.module                                  | 4 ++--
 src/Contracts/ComponentFormInterface.php                  | 2 +-
 src/Controller/ChooseComponentController.php              | 4 ++--
 src/Controller/ComponentFormController.php                | 2 +-
 src/Controller/DuplicateController.php                    | 2 +-
 src/Controller/ReorderController.php                      | 2 +-
 src/Event/LayoutParagraphsAllowedTypesEvent.php           | 4 ++--
 src/Event/LayoutParagraphsUpdateLayoutEvent.php           | 4 ++--
 .../LayoutParagraphsAllowedTypesSubscriber.php            | 2 +-
 src/LayoutParagraphsLayout.php                            | 4 ++--
 src/LayoutParagraphsLayoutTempstoreRepository.php         | 2 +-
 .../FieldFormatter/LayoutParagraphsBuilderFormatter.php   | 2 +-
 .../Field/FieldFormatter/LayoutParagraphsFormatter.php    | 2 +-
 src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php   | 4 ++--
 src/Utility/Dialog.php                                    | 2 +-
 .../LayoutParagraphsAllowedTypesSubscriber.php            | 2 +-
 tests/src/FunctionalJavascript/BuilderTest.php            | 8 ++++----
 tests/src/FunctionalJavascript/BuilderTestBase.php        | 8 ++++----
 tests/src/FunctionalJavascript/CorrectRegionTest.php      | 4 ++--
 .../ParagraphsWidgetCompatibilityTest.php                 | 2 +-
 tests/src/FunctionalJavascript/TranslationTest.php        | 6 +++---
 .../src/FunctionalJavascript/ValidationConstraintTest.php | 2 +-
 26 files changed, 46 insertions(+), 45 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c6f62cf..e23b3e6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -51,6 +51,7 @@ include:
 variables:
   OPT_IN_TEST_PREVIOUS_MINOR: 1
   OPT_IN_TEST_NEXT_MINOR: 1
+  _CSPELL_WORDS: 'bevacqua, dragula, tooltiptext, Toupin, Italo, Mairo, itamair, autoresize, Fieldto'
 # SKIP_ESLINT: '1'
 
 
diff --git a/README.md b/README.md
index 8cd2fcc..e2ee57e 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ seamlessly with existing paragraph reference fields.
   for further information.
 - Run `composer require
     bower-asset/dragula drupal/paragraphs drupal/layout_paragraphs`
-- Install Layout Paragraps.
+- Install Layout Paragraphs.
 
 **Without composer**
 - Download the [Dragula dist folder](https://github.com/bevacqua/dragula/tree/master/dist)
@@ -44,7 +44,7 @@ as you would normally install a contributed Drupal module.
 - Install the the [Paragraphs module](https://www.drupal.org/project/paragraphs)
 and the [Layout Paragraphs module](https://www.drupal.org/project/layout_paragraphs)
 as you would normally install a contributed Drupal module.
-- The Dragual library will be automatically loaded via CDN if no local library
+- The Dragula library will be automatically loaded via CDN if no local library
 exists.
 
 Visit "[Installing Modules](https://www.drupal.org/node/1897420)", if you have
@@ -158,11 +158,11 @@ system.
 #### Example Code: Working with a Layout
 
 ```php
-// Instantiate a new layout given an exisitng node
+// Instantiate a new layout given an existing node
 // and the paragraph reference field name.
 $layout = new LayoutParagraphsLayout($node, $field_name);
 
-// Insert a new component directly after the exisiting paragraph with the given
+// Insert a new component directly after the existing paragraph with the given
 // uuid. This will add the new component into the same section and region as the
 // paragraph with the given uuid.
 $layout->insertAfterComponent($existing_paragraph_uuid, $the_new_paragraph);
diff --git a/config/schema/layout_paragraphs.schema.yml b/config/schema/layout_paragraphs.schema.yml
index 93c2a2e..9bdcf25 100644
--- a/config/schema/layout_paragraphs.schema.yml
+++ b/config/schema/layout_paragraphs.schema.yml
@@ -13,7 +13,7 @@ layout_paragraphs.settings:
     paragraph_behaviors_label:
       type: string
       label: 'Paragraph behaviors label'
-      descripton: 'The paragraph behaviors form fieldset label'
+      description: 'The paragraph behaviors form fieldset label'
     paragraph_behaviors_position:
       type: integer
       label: 'Paragraph behaviors fieldset position'
diff --git a/js/builder.js b/js/builder.js
index 6af8e5c..56b1b13 100644
--- a/js/builder.js
+++ b/js/builder.js
@@ -203,10 +203,10 @@
       ? 'translateX'
       : 'translateY';
     // Determine the dimension property to use for the animation.
-    const dimmensionProp = animateProp === 'translateX' ? 'offsetWidth' : 'offsetHeight';
+    const dimensionProp = animateProp === 'translateX' ? 'offsetWidth' : 'offsetHeight';
     // Determine the distance to move the sibling and the item.
-    const siblingDest = $moveItem[0][dimmensionProp] * direction * -1;
-    const itemDest = $sibling[0][dimmensionProp] * direction;
+    const siblingDest = $moveItem[0][dimensionProp] * direction * -1;
+    const itemDest = $sibling[0][dimensionProp] * direction;
     const distance = Math.abs(Math.max(siblingDest, itemDest));
     const duration  = distance * .25;
     const siblingKeyframes = [
diff --git a/layout_paragraphs.module b/layout_paragraphs.module
index 4445e02..0d2ae30 100644
--- a/layout_paragraphs.module
+++ b/layout_paragraphs.module
@@ -126,7 +126,7 @@ function layout_paragraphs_module_implements_alter(&$implementations, $hook) {
 }
 
 /**
- * Implements hook_prepreprocess_radios().
+ * Implements hook_preprocess_radios().
  *
  * Add wrapper class for layout selection.
  */
@@ -160,7 +160,7 @@ function layout_paragraphs_preprocess_layout_paragraphs_builder_controls(&$varia
           'lpb-tooltip--hover',
           'lpb-tooltip--focus',
         ],
-        'aria-describedy' => $id . '--tip',
+        'aria-describedby' => $id . '--tip',
       ],
       '#weight' => 10,
     ],
diff --git a/src/Contracts/ComponentFormInterface.php b/src/Contracts/ComponentFormInterface.php
index 33bc4ad..b0b9ec3 100644
--- a/src/Contracts/ComponentFormInterface.php
+++ b/src/Contracts/ComponentFormInterface.php
@@ -85,7 +85,7 @@ interface ComponentFormInterface extends FormInterface {
   public function behaviorPluginsForm(array $element, FormStateInterface $form_state, array &$form);
 
   /**
-   * Provides an Ajax reponse to inject the new / editing component.
+   * Provides an Ajax response to inject the new / editing component.
    *
    * @param array $form
    *   The form array.
diff --git a/src/Controller/ChooseComponentController.php b/src/Controller/ChooseComponentController.php
index f00d36a..9ea1dac 100644
--- a/src/Controller/ChooseComponentController.php
+++ b/src/Controller/ChooseComponentController.php
@@ -79,7 +79,7 @@ class ChooseComponentController extends ControllerBase {
    */
   public function list(Request $request, LayoutParagraphsLayout $layout_paragraphs_layout) {
     $context = $this->getContextFromRequest($request);
-    // If inserting a new item adjecent to a sibling component, the region
+    // If inserting a new item adjacent to a sibling component, the region
     // passed in the URL will be incorrect if the existing sibling component
     // was dragged into another region. In that case, always use the existing
     // sibling's region.
@@ -199,7 +199,7 @@ class ChooseComponentController extends ControllerBase {
    *   The request object.
    *
    * @return array
-   *   The context into which the new component is being iserted.
+   *   The context into which the new component is being inserted.
    */
   protected function getContextFromRequest(Request $request) {
     return [
diff --git a/src/Controller/ComponentFormController.php b/src/Controller/ComponentFormController.php
index 74c40a5..1683777 100644
--- a/src/Controller/ComponentFormController.php
+++ b/src/Controller/ComponentFormController.php
@@ -57,7 +57,7 @@ class ComponentFormController extends ControllerBase {
    *   The paragraph type id.
    *
    * @return array|\Drupal\Core\Ajax\AjaxResponse
-   *   A build array or Ajax respone.
+   *   A build array or Ajax response.
    */
   public function insertForm(Request $request, LayoutParagraphsLayout $layout_paragraphs_layout, string $paragraph_type_id) {
 
diff --git a/src/Controller/DuplicateController.php b/src/Controller/DuplicateController.php
index 509af78..df0f5c5 100755
--- a/src/Controller/DuplicateController.php
+++ b/src/Controller/DuplicateController.php
@@ -54,7 +54,7 @@ class DuplicateController extends ControllerBase {
    *   The source component to be cloned.
    *
    * @return array|\Drupal\Core\Ajax\AjaxResponse
-   *   A build array or Ajax respone.
+   *   A build array or Ajax response.
    */
   public function duplicate(LayoutParagraphsLayout $layout_paragraphs_layout, string $source_uuid) {
     $this->setLayoutParagraphsLayout($layout_paragraphs_layout);
diff --git a/src/Controller/ReorderController.php b/src/Controller/ReorderController.php
index 3b0f065..afaa5d5 100644
--- a/src/Controller/ReorderController.php
+++ b/src/Controller/ReorderController.php
@@ -46,7 +46,7 @@ class ReorderController extends ControllerBase {
   /**
    * Reorders a Layout Paragraphs Layout's components.
    *
-   * Expects an two-dimmensional array of components in the "components" POST
+   * Expects an two-dimensional array of components in the "components" POST
    * parameter with key/value pairs for "uuid", "parent_uuid", and "region".
    *
    * @param \Symfony\Component\HttpFoundation\Request $request
diff --git a/src/Event/LayoutParagraphsAllowedTypesEvent.php b/src/Event/LayoutParagraphsAllowedTypesEvent.php
index cb36f7a..dfe6d62 100644
--- a/src/Event/LayoutParagraphsAllowedTypesEvent.php
+++ b/src/Event/LayoutParagraphsAllowedTypesEvent.php
@@ -47,14 +47,14 @@ class LayoutParagraphsAllowedTypesEvent extends Event {
   protected $region;
 
   /**
-   * The context a new compoment is being added into.
+   * The context a new component is being added into.
    *
    * @var array
    */
   protected $context;
 
   /**
-   * Class cosntructor.
+   * Class constructor.
    *
    * @param array $types
    *   An array of paragraph types.
diff --git a/src/Event/LayoutParagraphsUpdateLayoutEvent.php b/src/Event/LayoutParagraphsUpdateLayoutEvent.php
index a823474..d073881 100644
--- a/src/Event/LayoutParagraphsUpdateLayoutEvent.php
+++ b/src/Event/LayoutParagraphsUpdateLayoutEvent.php
@@ -17,7 +17,7 @@ use Drupal\layout_paragraphs\LayoutParagraphsLayout;
  * avoid refreshing the entire builder whenever possible (for example, by
  * appending the HTML for a new paragraph in the correct position in the ui).
  * There are times when simply appending or replacing the new or altered
- * paragraph is insufficient for correclty rendering the layout, and the entire
+ * paragraph is insufficient for correctly rendering the layout, and the entire
  * builder interface should be refreshed by setting $needsRefresh to true in
  * this event.
  */
@@ -47,7 +47,7 @@ class LayoutParagraphsUpdateLayoutEvent extends Event {
   public $needsRefresh = FALSE;
 
   /**
-   * Class cosntructor.
+   * Class constructor.
    *
    * @param \Drupal\layout_paragraphs\LayoutParagraphsLayout $original_layout
    *   The layout object.
diff --git a/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php b/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
index 5ecf3e3..262c38b 100644
--- a/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
+++ b/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
@@ -6,7 +6,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Drupal\layout_paragraphs\Event\LayoutParagraphsAllowedTypesEvent;
 
 /**
- * Class definition for LayoutParagraphsAllowedTypesSubcriber.
+ * Class definition for LayoutParagraphsAllowedTypesSubscriber.
  */
 class LayoutParagraphsAllowedTypesSubscriber implements EventSubscriberInterface {
 
diff --git a/src/LayoutParagraphsLayout.php b/src/LayoutParagraphsLayout.php
index 89fddba..fdadf19 100644
--- a/src/LayoutParagraphsLayout.php
+++ b/src/LayoutParagraphsLayout.php
@@ -15,7 +15,7 @@ use Drupal\paragraphs\ParagraphInterface;
  * Layout Paragraphs Sections and Layout Paragraphs Components
  * associated with a paragraphs reference field.
  * This class provides public methods for manipulating a layout -
- * i.e. adding, removing, and reording paragraph layout sections
+ * i.e. adding, removing, and reordering paragraph layout sections
  * and paragraph layout components.
  *
  * See also:
@@ -543,7 +543,7 @@ class LayoutParagraphsLayout implements ThirdPartySettingsInterface {
   }
 
   /**
-   * Searchs for a component by its uuid and returns its delta.
+   * Searches for a component by its uuid and returns its delta.
    *
    * @param string $uuid
    *   The uuid to search for.
diff --git a/src/LayoutParagraphsLayoutTempstoreRepository.php b/src/LayoutParagraphsLayoutTempstoreRepository.php
index 5216269..22f0dfb 100644
--- a/src/LayoutParagraphsLayoutTempstoreRepository.php
+++ b/src/LayoutParagraphsLayoutTempstoreRepository.php
@@ -46,7 +46,7 @@ class LayoutParagraphsLayoutTempstoreRepository {
   }
 
   /**
-   * Get a layout paragraphs layout frome the tempstore using its storage key.
+   * Get a layout paragraphs layout from the tempstore using its storage key.
    *
    * @param string $key
    *   The storage key.
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
index b954a1f..87973ee 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsBuilderFormatter.php
@@ -105,7 +105,7 @@ class LayoutParagraphsBuilderFormatter extends LayoutParagraphsFormatter impleme
       '#root_components' => parent::view($items, $langcode),
     ];
     $entity = $items->getEntity();
-    /** @var \Drupal\Core\Entity\EntityDefintion $definition */
+    /** @var \Drupal\Core\Entity\EntityDefinition $definition */
     $definition = $items->getFieldDefinition();
     $layout = new LayoutParagraphsLayout($items, $this->getSettings() + ['reference_field_view_mode' => $this->viewMode]);
 
diff --git a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
index 8231f6b..15c1119 100644
--- a/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/LayoutParagraphsFormatter.php
@@ -29,7 +29,7 @@ use Drupal\entity_reference_revisions\Plugin\Field\FieldFormatter\EntityReferenc
 class LayoutParagraphsFormatter extends EntityReferenceRevisionsEntityFormatter implements ContainerFactoryPluginInterface {
 
   /**
-   * The entity reportory.
+   * The entity repository.
    *
    * @var \Drupal\Core\Entity\EntityRepositoryInterface
    */
diff --git a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
index 54c6b53..52b04f2 100644
--- a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
@@ -314,7 +314,7 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
             // if no paragraph entity field is translatable,
             // even if the host is.
             if ($paragraph->hasField('content_translation_source')) {
-              // Initialise the translation with source language values.
+              // Initialize the translation with source language values.
               $paragraph->addTranslation($this->langcode, $paragraph->toArray());
               $translation = $paragraph->getTranslation($this->langcode);
               $this->contentTranslationManager->getTranslationMetadata($translation)
@@ -339,7 +339,7 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
    */
   public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state) {
     $field_name = $this->fieldDefinition->getName();
-    // Load the correct layout paragraphs layout instnace using the value
+    // Load the correct layout paragraphs layout instance using the value
     // passed in the layout_instance_id hidden field.
     $path = array_merge($form['#parents'], [$field_name]);
     $layout_paragraphs_storage_key = $form_state->getValue(array_merge($path, ['layout_paragraphs_storage_key']));
diff --git a/src/Utility/Dialog.php b/src/Utility/Dialog.php
index 3582853..2b00566 100644
--- a/src/Utility/Dialog.php
+++ b/src/Utility/Dialog.php
@@ -38,7 +38,7 @@ class Dialog {
   }
 
   /**
-   * Returns a CloseDialogComand with the correct selector.
+   * Returns a CloseDialogCommand with the correct selector.
    *
    * @param \Drupal\layout_paragraphs\LayoutParagraphsLayout $layout
    *   The layout paragraphs layout object.
diff --git a/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php b/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
index bcaab6b..ed1090e 100644
--- a/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
+++ b/tests/modules/layout_paragraphs_empty_component_list_test/src/EventSubscriber/LayoutParagraphsAllowedTypesSubscriber.php
@@ -7,7 +7,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Drupal\layout_paragraphs\Event\LayoutParagraphsAllowedTypesEvent;
 
 /**
- * Class definition for LayoutParagraphsAllowedTypesSubcriber.
+ * Class definition for LayoutParagraphsAllowedTypesSubscriber.
  */
 class LayoutParagraphsAllowedTypesSubscriber implements EventSubscriberInterface {
 
diff --git a/tests/src/FunctionalJavascript/BuilderTest.php b/tests/src/FunctionalJavascript/BuilderTest.php
index 296708f..d6d9858 100644
--- a/tests/src/FunctionalJavascript/BuilderTest.php
+++ b/tests/src/FunctionalJavascript/BuilderTest.php
@@ -173,7 +173,7 @@ class BuilderTest extends BuilderTestBase {
     $this->addSectionComponent(2, '.lpb-layout > .lpb-btn--add.after');
 
     // Click the new item's drag button.
-    // This should create a <div> with the id 'lpb-navigatin-msg'.
+    // This should create a <div> with the id 'lpb-navigating-msg'.
     $drag_handle = $page->find('css', '.layout__region--content .lpb-drag');
     $first_region = $page->find('css', '.layout__region--first');
     $drag_handle->dragTo($first_region);
@@ -205,7 +205,7 @@ class BuilderTest extends BuilderTestBase {
     $this->addTextComponent('Third item', '.layout__region--third .lpb-btn--add');
 
     // Click the new item's drag button.
-    // This should create a <div> with the id 'lpb-navigatin-msg'.
+    // This should create a <div> with the id 'lpb-navigating-msg'.
     $button = $page->find('css', '.layout__region--third .lpb-drag');
     $button->click();
     $this->assertSession()->elementExists('css', '#lpb-navigating-msg');
@@ -228,7 +228,7 @@ class BuilderTest extends BuilderTestBase {
 
     // Add a fifth item above the third item, which has been moved to the first
     // region, and ensure the fifth item is correctly added to the first region,
-    // hiding the controls ui first so it doesn't overlapp the + button.
+    // hiding the controls ui first so it doesn't overlap the + button.
     // @see https://www.drupal.org/project/layout_paragraphs/issues/3281169
     $this->forceHidden('.layout__region--first .lpb-controls');
     $this->addTextComponent('Fifth item', '.layout__region--first .lpb-btn--add');
@@ -270,7 +270,7 @@ class BuilderTest extends BuilderTestBase {
     $this->addTextComponent('Third item', '.layout__region--third .lpb-btn--add');
 
     // Click the new item's drag button.
-    // This should create a <div> with the id 'lpb-navigatin-msg'.
+    // This should create a <div> with the id 'lpb-navigating-msg'.
     $button = $page->find('css', '.layout__region--third .lpb-drag');
     $button->click();
     $this->assertSession()->elementExists('css', '#lpb-navigating-msg');
diff --git a/tests/src/FunctionalJavascript/BuilderTestBase.php b/tests/src/FunctionalJavascript/BuilderTestBase.php
index ddc6ce8..68e2cc5 100644
--- a/tests/src/FunctionalJavascript/BuilderTestBase.php
+++ b/tests/src/FunctionalJavascript/BuilderTestBase.php
@@ -242,14 +242,14 @@ abstract class BuilderTestBase extends WebDriverTestBase {
   protected function assertOrderOfStrings(array $strings, $assert_message = 'Strings are not in correct order.') {
     $page = $this->getSession()->getPage();
     $page_text = $page->getHtml();
-    $highmark = -1;
+    $high_mark = -1;
     foreach ($strings as $string) {
       $this->assertSession()->pageTextContains($string);
       $pos = strpos($page_text, $string);
-      if ($pos <= $highmark) {
+      if ($pos <= $high_mark) {
         throw new ExpectationException($assert_message, $this->getSession()->getDriver());
       }
-      $highmark = $pos;
+      $high_mark = $pos;
     }
   }
 
@@ -307,7 +307,7 @@ abstract class BuilderTestBase extends WebDriverTestBase {
   }
 
   /**
-   * Save and close the fronend builder.
+   * Save and close the frontend builder.
    */
   protected function saveAndCloseFrontendBuilder() {
     $this->saveFrontendBuilder();
diff --git a/tests/src/FunctionalJavascript/CorrectRegionTest.php b/tests/src/FunctionalJavascript/CorrectRegionTest.php
index e86c525..05c91b4 100644
--- a/tests/src/FunctionalJavascript/CorrectRegionTest.php
+++ b/tests/src/FunctionalJavascript/CorrectRegionTest.php
@@ -45,7 +45,7 @@ class CorrectRegionTest extends BuilderTestBase {
     $this->addTextComponent('Third item', '.layout__region--third .lpb-btn--add');
 
     // Click the new item's drag button.
-    // This should create a <div> with the id 'lpb-navigatin-msg'.
+    // This should create a <div> with the id 'lpb-navigating-msg'.
     $button = $page->find('css', '.layout__region--third .lpb-drag');
     $button->click();
 
@@ -65,7 +65,7 @@ class CorrectRegionTest extends BuilderTestBase {
     // $this->assertSession()->assertWaitOnAjaxRequest();
     // Add a fourth item above the third item, which has been moved to the first
     // region. Ensure the fourth item is correctly added to the first region,
-    // hiding the controls ui first so it doesn't overlapp the + button.
+    // hiding the controls ui first so it doesn't overlap the + button.
     // @see https://www.drupal.org/project/layout_paragraphs/issues/3281169
     $this->forceHidden('.layout__region--first .lpb-controls');
     $this->addTextComponent('Fourth item', '.layout__region--first .lpb-btn--add');
diff --git a/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php b/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
index 8efd075..17b786a 100644
--- a/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
+++ b/tests/src/FunctionalJavascript/ParagraphsWidgetCompatibilityTest.php
@@ -94,7 +94,7 @@ class ParagraphsWidgetCompatibilityTest extends WebDriverTestBase {
     $this->submitForm([
       'title[0][value]' => 'Node title',
     ], 'Save');
-    $this->assertSession()->pageTextNotContains('The website encountered an unexpected error. Please try again later.');
+    $this->assertSession()->pageTextNotContains('The website encountered an unexpected error.');
 
   }
 
diff --git a/tests/src/FunctionalJavascript/TranslationTest.php b/tests/src/FunctionalJavascript/TranslationTest.php
index 6c3e1bb..1fb6b59 100644
--- a/tests/src/FunctionalJavascript/TranslationTest.php
+++ b/tests/src/FunctionalJavascript/TranslationTest.php
@@ -102,7 +102,7 @@ class TranslationTest extends BuilderTestBase {
   /**
    * Tests adding paragraphs in the correct language.
    */
-  public function testAddedInCorrectLanugage() {
+  public function testAddedInCorrectLanguage() {
     $this->testSwitchLanguage();
     $this->drupalGet('node/1/edit');
     $this->addTextComponent('Language should be "de".', '.layout__region--first .lpb-btn--add.after');
@@ -171,7 +171,7 @@ class TranslationTest extends BuilderTestBase {
   }
 
   /**
-   * Tests symmetric or assymetric translations.
+   * Tests symmetric or asymmetric translations.
    */
   protected function testContentTranslations($asymmetric = FALSE) {
 
@@ -237,7 +237,7 @@ class TranslationTest extends BuilderTestBase {
     }
     else {
       // If in symmetric mode, deleting component from the primary language
-      // deletes it everyhere.
+      // deletes it everywhere.
       $this->assertSession()->pageTextNotContains('third (de)');
     }
 
diff --git a/tests/src/FunctionalJavascript/ValidationConstraintTest.php b/tests/src/FunctionalJavascript/ValidationConstraintTest.php
index 7ca470f..ad5fd72 100644
--- a/tests/src/FunctionalJavascript/ValidationConstraintTest.php
+++ b/tests/src/FunctionalJavascript/ValidationConstraintTest.php
@@ -55,7 +55,7 @@ class ValidationConstraintTest extends BuilderTestBase {
     $this->assertSession()->assertWaitOnAjaxRequest();
     // Assert the fail message exists.
     $this->assertSession()->pageTextContains('Failed Layout Paragraphs test validation.');
-    // Asser the form is still present and hasn't been closed.
+    // Assert the form is still present and hasn't been closed.
     $this->assertSession()->elementExists('css', 'form.layout-paragraphs-component-form');
     $this->htmlOutput($this->getSession()->getPage()->getHtml());
 
-- 
GitLab


From dfd2f4bf02c8f75aada45f7919fbfbf6fd126764 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Tue, 28 Jan 2025 14:50:26 -0700
Subject: [PATCH 08/13] Add words to cspell config

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e23b3e6..243f9ab 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -51,7 +51,7 @@ include:
 variables:
   OPT_IN_TEST_PREVIOUS_MINOR: 1
   OPT_IN_TEST_NEXT_MINOR: 1
-  _CSPELL_WORDS: 'bevacqua, dragula, tooltiptext, Toupin, Italo, Mairo, itamair, autoresize, Fieldto'
+  _CSPELL_WORDS: 'bevacqua, dragula, tooltiptext, Toupin, Italo, Mairo, itamair, autoresize, Fieldto, cclip, cdefs, cpath, crect, csvg'
 # SKIP_ESLINT: '1'
 
 
-- 
GitLab


From 77f07aabf6fc8e35734b2e2e081112d9499da2fb Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Tue, 28 Jan 2025 17:26:41 -0700
Subject: [PATCH 09/13] Remove reference to drupal from .eslintrc.json for
 Gitlab CI

---
 .eslintrc.json | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/.eslintrc.json b/.eslintrc.json
index be8252d..edbdc8f 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,8 +1,5 @@
 {
-  "extends": [
-    "drupal"
-  ],
   "globals": {
     "dragula": true
   }
-}
\ No newline at end of file
+}
-- 
GitLab


From 964549d6a92c4b4aef3852357df1589815b684a6 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Tue, 28 Jan 2025 22:03:59 -0700
Subject: [PATCH 10/13] Fixing eslint issues

---
 js/builder-form.js                            |  13 +--
 js/builder.js                                 | 106 ++++++++++--------
 js/component-form.js                          |   8 +-
 layout_paragraphs.services.yml                |   2 +-
 ...layout_paragraphs_permissions.services.yml |   2 +-
 5 files changed, 73 insertions(+), 58 deletions(-)

diff --git a/js/builder-form.js b/js/builder-form.js
index 916cf7e..b87c805 100644
--- a/js/builder-form.js
+++ b/js/builder-form.js
@@ -17,13 +17,12 @@
         'lpb-component:move.lpb',
         'lpb-component:drop.lpb',
       ].join(' ');
-      $(once('lpb-builder-form', '[data-lpb-id]', context))
-        .on(events, (e) => {
-          $(e.currentTarget)
-            .closest('[data-lpb-form-id]')
-            .find('[data-drupal-selector="edit-close"]')
-            .val(Drupal.t('Cancel'));
-        });
+      $(once('lpb-builder-form', '[data-lpb-id]', context)).on(events, (e) => {
+        e.currentTarget
+          .closest('[data-lpb-form-id]')
+          .querySelector('[data-drupal-selector="edit-close"]').value =
+          Drupal.t('Cancel');
+      });
     },
   };
 })(jQuery, Drupal, once);
diff --git a/js/builder.js b/js/builder.js
index 56b1b13..8df15d6 100644
--- a/js/builder.js
+++ b/js/builder.js
@@ -39,19 +39,20 @@
       return;
     }
     $dialogs.each((i, dialog) => {
-      const bounding = dialog.getBoundingClientRect();
-      const viewPortHeight =
+      let bounding = dialog.getBoundingClientRect();
+      let viewPortHeight =
         window.innerHeight || document.documentElement.clientHeight;
       if (bounding.bottom > viewPortHeight) {
         const $dialog = $('.ui-dialog-content', dialog);
         const height = viewPortHeight - 200;
         $dialog.dialog('option', 'height', height);
-        $dialog.css('overscroll-behavior', 'contain');
+        $dialog[0].style.overscrollBehavior = 'contain';
 
         if ($dialog.data('lpOriginalHeight') !== height) {
           $dialog.data('lpOriginalHeight', height);
-          const bounding = dialog.getBoundingClientRect();
-          const viewPortHeight = window.innerHeight || document.documentElement.clientHeight;
+          bounding = dialog.getBoundingClientRect();
+          viewPortHeight =
+            window.innerHeight || document.documentElement.clientHeight;
           if (bounding.bottom > viewPortHeight) {
             const pos = $dialog.dialog('option', 'position');
             $dialog.dialog('option', 'position', pos);
@@ -121,9 +122,7 @@
    */
   function movesErrors(settings, el, source, handle) {
     return Drupal._lpbMoveErrors.moves
-      .map((validator) =>
-        validator.apply(null, [settings, el, source, handle]),
-      )
+      .map((validator) => validator.apply(null, [settings, el, source, handle]))
       .filter((errors) => errors !== false && errors !== undefined);
   }
 
@@ -132,8 +131,12 @@
    * @param {jQuery} $element The builder element.
    */
   function updateMoveButtons($element) {
-    const lpbBuilderElements = Array.from($element[0].querySelectorAll('.js-lpb-component-list, .js-lpb-region'));
-    const lpbBuilderComponent = lpbBuilderElements.filter(el => el.querySelector('.js-lpb-component'));
+    const lpbBuilderElements = Array.from(
+      $element[0].querySelectorAll('.js-lpb-component-list, .js-lpb-region'),
+    );
+    const lpbBuilderComponent = lpbBuilderElements.filter((el) =>
+      el.querySelector('.js-lpb-component'),
+    );
 
     $element[0].querySelectorAll('.lpb-up, .lpb-down').forEach((el) => {
       // Set the tabindex of the up and down arrows to 0.
@@ -141,14 +144,18 @@
     });
 
     lpbBuilderComponent.forEach((el) => {
-      const components = Array.from(el.children).filter(n => n.classList.contains('js-lpb-component'));
+      const components = Array.from(el.children).filter((n) =>
+        n.classList.contains('js-lpb-component'),
+      );
 
       if (components.length > 0) {
         // Set the tabindex of the first component's up arrow to -1.
         components[0].querySelector('.lpb-up')?.setAttribute('tabindex', '-1');
 
         // Set the tabindex of the last component's down arrow to -1.
-        components[components.length - 1].querySelector('.lpb-down')?.setAttribute('tabindex', '-1');
+        components[components.length - 1]
+          .querySelector('.lpb-down')
+          ?.setAttribute('tabindex', '-1');
       }
     });
   }
@@ -161,9 +168,9 @@
     $element.find('.js-lpb-region').each((i, e) => {
       const $e = $(e);
       if ($e.find('.js-lpb-component').length === 0) {
-        $e.find('.lpb-btn--add.center').css('display', 'block');
+        $e.find('.lpb-btn--add.center')[0].style.display = 'block';
       } else {
-        $e.find('.lpb-btn--add.center').css('display', 'none');
+        $e.find('.lpb-btn--add.center')[0].style.display = 'none';
       }
     });
   }
@@ -199,16 +206,19 @@
     }
 
     // Determine if the move should be animated horizontally or vertically.
-    const animateProp = $sibling[0].getBoundingClientRect().top == $moveItem[0].getBoundingClientRect().top
-      ? 'translateX'
-      : 'translateY';
+    const animateProp =
+      $sibling[0].getBoundingClientRect().top ===
+      $moveItem[0].getBoundingClientRect().top
+        ? 'translateX'
+        : 'translateY';
     // Determine the dimension property to use for the animation.
-    const dimensionProp = animateProp === 'translateX' ? 'offsetWidth' : 'offsetHeight';
+    const dimensionProp =
+      animateProp === 'translateX' ? 'offsetWidth' : 'offsetHeight';
     // Determine the distance to move the sibling and the item.
     const siblingDest = $moveItem[0][dimensionProp] * direction * -1;
     const itemDest = $sibling[0][dimensionProp] * direction;
     const distance = Math.abs(Math.max(siblingDest, itemDest));
-    const duration  = distance * .25;
+    const duration = distance * 0.25;
     const siblingKeyframes = [
       { transform: `${animateProp}(0)` },
       { transform: `${animateProp}(${siblingDest}px)` },
@@ -219,12 +229,12 @@
     ];
     const timing = {
       duration,
-      iterations: 1
-    }
+      iterations: 1,
+    };
     const anim1 = $moveItem[0].animate(itemKeyframes, timing);
     anim1.onfinish = () => {
-      $moveItem.css({ transform: 'none' });
-      $sibling.css({ transform: 'none' });
+      $moveItem[0].style.transform = 'none';
+      $sibling[0].style.transform = 'none';
       $sibling[method]($moveItem);
       $moveItem
         .closest(`[${idAttr}]`)
@@ -414,19 +424,20 @@
   }
 
   function initDragAndDrop($element, settings) {
-    const containers = once('is-dragula-enabled', '.js-lpb-component-list, .js-lpb-region', $element[0]);
-    const drake = dragula(
-      containers,
-      {
-        accepts: (el, target, source, sibling) =>
-          acceptsErrors(settings, el, target, source, sibling).length === 0,
-        moves: (el, source, handle) =>
-          movesErrors(settings, el, source, handle).length === 0,
-      },
+    const containers = once(
+      'is-dragula-enabled',
+      '.js-lpb-component-list, .js-lpb-region',
+      $element[0],
     );
+    const drake = dragula(containers, {
+      accepts: (el, target, source, sibling) =>
+        acceptsErrors(settings, el, target, source, sibling).length === 0,
+      moves: (el, source, handle) =>
+        movesErrors(settings, el, source, handle).length === 0,
+    });
     drake.on('drop', (el) => {
       const $el = $(el);
-      if ($el.prev().is('a')) {
+      if ($el.prev()[0].matches('a')) {
         $el.insertBefore($el.prev());
       }
       $element.trigger('lpb-component:drop', [$el.attr('data-uuid')]);
@@ -457,13 +468,13 @@
 
   // An object with arrays for "accepts" and "moves" dragula callback functions.
   Drupal._lpbMoveErrors = {
-    'accepts': [],
-    'moves': [],
+    accepts: [],
+    moves: [],
   };
   /**
    * Registers a move validation function.
    * @param {Function} f The validator function.
-   * @param {String} t The dragula callback to register the validator for.
+   * @param {String} c The dragula callback to register the validator for.
    */
   Drupal.registerLpbMoveError = (f, c = 'accepts') => {
     Drupal._lpbMoveErrors[c].push(f);
@@ -521,21 +532,24 @@
     }
 
     const buttons = [];
-    const $buttons = $lpDialog.find('.layout-paragraphs-component-form > .form-actions input[type=submit], .layout-paragraphs-component-form > .form-actions a.button');
+    const $buttons = $lpDialog.find(
+      '.layout-paragraphs-component-form > .form-actions input[type=submit], .layout-paragraphs-component-form > .form-actions a.button',
+    );
 
     if ($buttons.length === 0) {
       return;
     }
 
     $buttons.each((_i, el) => {
-      const $originalButton = $(el).css({ display: 'none' });
+      const $originalButton = $(el);
+      $originalButton[0].style.display = 'none';
       buttons.push({
         text: $originalButton.html() || $originalButton.attr('value'),
         class: $originalButton.attr('class'),
         click(e) {
           // If the original button is an anchor tag, triggering the "click"
           // event will not simulate a click. Use the click method instead.
-          if ($originalButton.is('a')) {
+          if ($originalButton[0].matches('a')) {
             $originalButton[0].click();
           } else {
             $originalButton
@@ -561,10 +575,13 @@
 
       // Listen to relevant events and update UI.
       once('lpb-events', '[data-lpb-id]').forEach((el) => {
-        $(el).on('lpb-builder:init.lpb lpb-component:insert.lpb lpb-component:update.lpb lpb-component:move.lpb lpb-component:drop.lpb lpb-component:delete.lpb', (e) => {
-          const $element = $(e.currentTarget);
-          updateUi($element);
-        });
+        $(el).on(
+          'lpb-builder:init.lpb lpb-component:insert.lpb lpb-component:update.lpb lpb-component:move.lpb lpb-component:drop.lpb lpb-component:delete.lpb',
+          (e) => {
+            const $element = $(e.currentTarget);
+            updateUi($element);
+          },
+        );
       });
 
       // Initialize the editor drag and drop ui.
@@ -616,7 +633,7 @@
       clearInterval(lpDialogInterval);
       lpDialogInterval = setInterval(
         repositionDialog.bind(null, lpDialogInterval),
-        500
+        500,
       );
     }
   };
@@ -625,5 +642,4 @@
   } else {
     window.addEventListener('dialog:aftercreate', handleAfterDialogCreate);
   }
-
 })(jQuery, Drupal, Drupal.debounce, dragula, once);
diff --git a/js/component-form.js b/js/component-form.js
index a1a2dac..b825b46 100644
--- a/js/component-form.js
+++ b/js/component-form.js
@@ -1,6 +1,6 @@
-(function ($, Drupal) {
+(($, Drupal) => {
   Drupal.behaviors.layoutParagraphsComponentForm = {
-    attach: function attach(context) {
+    attach: function attach() {
       // The layout selection element uses AJAX to load the layout config form.
       // We need to disable the save button while waiting for the AJAX request,
       // to prevent race UI condition.
@@ -11,6 +11,6 @@
       // Re-enable the component form save button when the behavior reattaches,
       // which will happen once the AJAX request completes.
       $('.lpb-btn--save').prop('disabled', false);
-    }
-  }
+    },
+  };
 })(jQuery, Drupal);
diff --git a/layout_paragraphs.services.yml b/layout_paragraphs.services.yml
index 19a626d..3a4fe41 100644
--- a/layout_paragraphs.services.yml
+++ b/layout_paragraphs.services.yml
@@ -23,6 +23,6 @@ services:
   layout_paragraphs.builder_access:
     class: Drupal\layout_paragraphs\Access\LayoutParagraphsBuilderAccess
     arguments:
-     - '@entity_type.manager'
+      - '@entity_type.manager'
     tags:
       - { name: access_check, applies_to: _layout_paragraphs_builder_access }
diff --git a/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.services.yml b/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.services.yml
index 8d63af8..e6f05a0 100644
--- a/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.services.yml
+++ b/modules/layout_paragraphs_permissions/layout_paragraphs_permissions.services.yml
@@ -2,6 +2,6 @@ services:
   layout_paragraphs.builder_access:
     class: Drupal\layout_paragraphs_permissions\Access\LayoutParagraphsPermissionsBuilderAccess
     arguments:
-     - '@entity_type.manager'
+      - '@entity_type.manager'
     tags:
       - { name: access_check, applies_to: _layout_paragraphs_builder_access }
-- 
GitLab


From 1b01e53eba93d10e29d82c028a2aeba11a988030 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Wed, 29 Jan 2025 17:56:27 -0700
Subject: [PATCH 11/13] Fix JS errors after addressing eslint validation
 problems

---
 js/builder.js | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/js/builder.js b/js/builder.js
index 8df15d6..440e9fe 100644
--- a/js/builder.js
+++ b/js/builder.js
@@ -162,17 +162,19 @@
 
   /**
    * Hides the add content button in regions that contain components.
-   * @param {jQuery} $element The builder element.
+   * @param {HTMLElement} element The builder element.
    */
-  function hideEmptyRegionButtons($element) {
-    $element.find('.js-lpb-region').each((i, e) => {
-      const $e = $(e);
-      if ($e.find('.js-lpb-component').length === 0) {
-        $e.find('.lpb-btn--add.center')[0].style.display = 'block';
-      } else {
-        $e.find('.lpb-btn--add.center')[0].style.display = 'none';
-      }
-    });
+  function hideEmptyRegionButtons(element) {
+    element
+      .querySelectorAll('.lpb-btn--add.center')
+      .forEach((buttonElement) => {
+        const regionElement = buttonElement.closest('.js-lpb-region');
+        if (regionElement?.querySelector('.js-lpb-component')) {
+          buttonElement.style.display = 'none';
+        } else {
+          buttonElement.style.display = 'block';
+        }
+      });
   }
 
   /**
@@ -182,7 +184,7 @@
   function updateUi($element) {
     reorderComponents($element);
     updateMoveButtons($element);
-    hideEmptyRegionButtons($element);
+    hideEmptyRegionButtons($element[0]);
   }
 
   /**
@@ -437,7 +439,7 @@
     });
     drake.on('drop', (el) => {
       const $el = $(el);
-      if ($el.prev()[0].matches('a')) {
+      if ($el.prev()[0]?.matches('a')) {
         $el.insertBefore($el.prev());
       }
       $element.trigger('lpb-component:drop', [$el.attr('data-uuid')]);
-- 
GitLab


From 2d580bd0ef540c7f3f45df876fbca6c605e3a834 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Wed, 29 Jan 2025 18:10:57 -0700
Subject: [PATCH 12/13] Fix stylelint issues

---
 css/builder-form.css   |   2 +-
 css/builder.css        | 372 +++++++----------------------------------
 css/component-list.css |   6 +-
 css/layout-select.css  |   2 +-
 4 files changed, 63 insertions(+), 319 deletions(-)

diff --git a/css/builder-form.css b/css/builder-form.css
index 3536d9a..c859ef3 100644
--- a/css/builder-form.css
+++ b/css/builder-form.css
@@ -1,5 +1,5 @@
 .lpb-form__actions {
-  background: rgba(0,0,0,.05);
   margin-top: 0;
   padding: 20px;
+  background: rgba(0, 0, 0, 0.05);
 }
diff --git a/css/builder.css b/css/builder.css
index e01d327..7aa7b33 100644
--- a/css/builder.css
+++ b/css/builder.css
@@ -1,423 +1,167 @@
 .lp-builder {
-  min-height: 30px;
   position: relative;
+  min-height: 30px;
 }
+
 .js-lpb-region {
+  position: relative;
+  box-sizing: border-box;
   min-height: 40px;
   cursor: default;
-  box-sizing: border-box;
-  position: relative;
 }
+
 .lpb-empty-container__wrapper {
   position: relative;
 }
+
 .lpb-empty-container {
-  text-align: center;
   padding-bottom: 30px;
+  text-align: center;
 }
+
 .lpb-empty-toggle {
   min-height: 20px;
 }
+
 .lpb-empty-message {
-  text-align: center;
   padding-bottom: 40px;
+  text-align: center;
 }
+
 .lpb-empty-container__wrapper .lpb-section-menu__wrapper {
   bottom: 20px;
 }
+
 .is-dragging .js-lpb-region,
 .is-navigating .js-lpb-region {
   outline: 1px dotted blue;
 }
+
 .is-dragging .t-reversed .js-lpb-region {
   outline: 1px dotted white;
 }
+
 .js-lpb-component {
+  position: relative;
+  cursor: grab;
+  transition: all 0.15s linear;
   outline: 1px solid blue;
   outline-color: transparent;
-  transition: all .15s linear;
-  position: relative;
 }
+
 .lp-builder:not(.is-navigating) .js-lpb-component:hover,
 .lp-builder:not(.is-navigating) .js-lpb-component:focus-within {
   outline: 1px solid blue;
 }
+
 .js-lpb-component.is-navigating {
   outline: 3px solid blue;
 }
-.js-lpb-component {
-  cursor: grab;
-}
+
 .js-lpb-component:hover .js-lpb-region,
 .js-lpb-component:focus-within .js-lpb-region {
   outline: 1px dotted rgba(0, 0, 255, 0.5);
 }
+
 .lp-builder:not(.is-navigating) .js-lpb-component:hover .js-lpb-region:hover,
 .lp-builder:not(.is-navigating) .js-lpb-component:focus-within .js-lpb-region:focus-within {
   outline: 1px solid rgba(0, 0, 255, 0.5);
 }
+
 .lpb-layout {
   padding: 20px;
 }
+
 .lpb-layout .lpb-layout-label {
   position: absolute;
   right: 0;
-  border: 1px dotted #ccc;
   padding: 5px 10px;
+  border: 1px dotted #ccc;
   font-size: small;
 }
+
 .js-lpb-btn--add {
   position: absolute;
 }
+
 .lpb-controls__wrapper {
   position: absolute;
 }
+
 .lpb-controls {
-  cursor: default;
-  padding: 5px;
-  display: flex;
-  z-index: 80;
   position: absolute;
-  left: 0;
+  z-index: 80;
   top: 0;
+  left: 0;
+  display: flex;
+  padding: 5px;
+  cursor: default;
   opacity: 0;
   border-radius: 0 0 6px 0;
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.25), 0 1px 3px rgba(0, 0, 0, 0.25);
   background-color: #fff;
+  box-shadow:
+    0 1px 1px rgba(0, 0, 0, 0.25),
+    0 1px 3px rgba(0, 0, 0, 0.25);
 }
+
 .lpb-controls:hover,
 .lpb-controls:focus-within {
   z-index: 90;
 }
+
 .lpb-controls.is-layout {
-  background-color: #00659b;
-  border-radius: 6px 6px 0 0;
-  box-shadow: none;
-  color: #fff;
   top: -40px;
-  left: auto;
   right: -1px;
+  left: auto;
+  color: #fff;
+  border-radius: 6px 6px 0 0;
+  background-color: #00659b;
+  box-shadow: none;
 }
-.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-controls,
-.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-controls {
-  opacity: 1;
-}
+
 .lpb-controls a {
   font-size: 0;
 }
+
 .lpb-controls-label {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  line-height: 30px;
   padding: 0 5px 0 10px;
-}
-.lpb-drag,
-.lpb-up,
-.lpb-down,
-.lpb-edit,
-.lpb-duplicate,
-.lpb-delete {
-  cursor: pointer;
-  height: 30px;
-  width: 30px;
-  border-radius: 3px;
-  margin: 0;
-  padding: 0;
-  opacity: .5;
-}
-.is-layout .lpb-drag,
-.is-layout .lpb-up,
-.is-layout .lpb-down,
-.is-layout .lpb-edit,
-.is-layout .lpb-duplicate,
-.is-layout .lpb-delete {
-  opacity: 1;
-}
-.lpb-drag {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.5 11C13.3284 11 14 10.3284 14 9.5C14 8.67157 13.3284 8 12.5 8C11.6716 8 11 8.67157 11 9.5C11 10.3284 11.6716 11 12.5 11Z' fill='%23000000'/%3E%3Cpath d='M12.5 16C13.3284 16 14 15.3284 14 14.5C14 13.6716 13.3284 13 12.5 13C11.6716 13 11 13.6716 11 14.5C11 15.3284 11.6716 16 12.5 16Z' fill='%23000000'/%3E%3Cpath d='M14 19.5C14 20.3284 13.3284 21 12.5 21C11.6716 21 11 20.3284 11 19.5C11 18.6716 11.6716 18 12.5 18C13.3284 18 14 18.6716 14 19.5Z' fill='%23000000'/%3E%3Cpath d='M17.5 11C18.3284 11 19 10.3284 19 9.5C19 8.67157 18.3284 8 17.5 8C16.6716 8 16 8.67157 16 9.5C16 10.3284 16.6716 11 17.5 11Z' fill='%23000000'/%3E%3Cpath d='M19 14.5C19 15.3284 18.3284 16 17.5 16C16.6716 16 16 15.3284 16 14.5C16 13.6716 16.6716 13 17.5 13C18.3284 13 19 13.6716 19 14.5Z' fill='%23000000'/%3E%3Cpath d='M17.5 21C18.3284 21 19 20.3284 19 19.5C19 18.6716 18.3284 18 17.5 18C16.6716 18 16 18.6716 16 19.5C16 20.3284 16.6716 21 17.5 21Z' fill='%23000000'/%3E%3C/svg%3E%0A");
-  background-size: cover;
-  cursor: grab;
-}
-.is-layout .lpb-drag {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.5 11C13.3284 11 14 10.3284 14 9.5C14 8.67157 13.3284 8 12.5 8C11.6716 8 11 8.67157 11 9.5C11 10.3284 11.6716 11 12.5 11Z' fill='white'/%3E%3Cpath d='M12.5 16C13.3284 16 14 15.3284 14 14.5C14 13.6716 13.3284 13 12.5 13C11.6716 13 11 13.6716 11 14.5C11 15.3284 11.6716 16 12.5 16Z' fill='white'/%3E%3Cpath d='M14 19.5C14 20.3284 13.3284 21 12.5 21C11.6716 21 11 20.3284 11 19.5C11 18.6716 11.6716 18 12.5 18C13.3284 18 14 18.6716 14 19.5Z' fill='white'/%3E%3Cpath d='M17.5 11C18.3284 11 19 10.3284 19 9.5C19 8.67157 18.3284 8 17.5 8C16.6716 8 16 8.67157 16 9.5C16 10.3284 16.6716 11 17.5 11Z' fill='white'/%3E%3Cpath d='M19 14.5C19 15.3284 18.3284 16 17.5 16C16.6716 16 16 15.3284 16 14.5C16 13.6716 16.6716 13 17.5 13C18.3284 13 19 13.6716 19 14.5Z' fill='white'/%3E%3Cpath d='M17.5 21C18.3284 21 19 20.3284 19 19.5C19 18.6716 18.3284 18 17.5 18C16.6716 18 16 18.6716 16 19.5C16 20.3284 16.6716 21 17.5 21Z' fill='white'/%3E%3C/svg%3E%0A");
-}
-.lpb-up:hover,
-.lpb-down:hover,
-.lpb-edit:hover,
-.lpb-duplicate:hover,
-.lpb-delete:hover {
-  opacity: 1;
-  background-color: rgba(0, 0, 0, .1);
-}
-.is-layout .lpb-up:hover,
-.is-layout .lpb-down:hover,
-.is-layout .lpb-edit:hover,
-.is-layout .lpb-duplicate:hover,
-.is-layout .lpb-delete:hover {
-  background-color: rgba(0, 0, 0, .25);
-}
-.lpb-drag:focus,
-.lpb-up:focus,
-.lpb-down:focus,
-.lpb-edit:focus,
-.lpb-duplicate:focus,
-.lpb-delete:focus {
-  outline: 2px solid blue;
-}
-.is-layout .lpb-drag:focus,
-.is-layout .lpb-up:focus,
-.is-layout .lpb-down:focus,
-.is-layout .lpb-edit:focus,
-.is-layout .lpb-duplicate:focus,
-.is-layout .lpb-delete:focus {
-  outline-color: white;
-}
-.lpb-up {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 18L15 12L21 18H9Z' fill='%23000000'/%3E%3C/svg%3E%0A");
-  background-size: cover;
-}
-.is-layout .lpb-up {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 18L15 12L21 18H9Z' fill='white'/%3E%3C/svg%3E%0A");
-}
-.lpb-down {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21 12L15 18L9 12L21 12Z' fill='%23000000'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='12' height='6' fill='white' transform='translate(21 18) rotate(-180)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
-  background-size: cover;
-}
-.is-layout .lpb-down {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21 12L15 18L9 12L21 12Z' fill='white'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='12' height='6' fill='white' transform='translate(21 18) rotate(-180)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
-}
-.lpb-down[tabindex="-1"]:hover,
-.lpb-up[tabindex="-1"]:hover {
-  background-color: transparent;
-  box-shadow: none;
-}
-.lpb-down[tabindex="-1"],
-.lpb-up[tabindex="-1"] {
-  opacity: .3;
-  cursor: default;
-}
-.lpb-edit {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='%23000000'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='%23000000'/%3E%3C/svg%3E%0A");
-  background-size: cover;
-}
-.is-layout .lpb-edit {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='white'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='white'/%3E%3C/svg%3E%0A");
-}
-.lpb-duplicate {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.7,8C21.4,8,22,8.6,22,9.3v7.9c0,0.7-0.6,1.3-1.3,1.3h-7.9c-0.7,0-1.3-0.6-1.3-1.3V9.3c0-0.7,0.6-1.3,1.3-1.3H20.7 M12.8,19.4c-1.2,0-2.2-1-2.2-2.2v-5.7H9.3c-0.7,0-1.3,0.6-1.3,1.3v7.9C8,21.4,8.6,22,9.3,22h7.9c0.7,0,1.3-0.6,1.3-1.3v-1.3H12.8z' fill='black' /%3E%3C/svg%3E%0A");
-  background-size: cover;
-}
-.is-layout .lpb-duplicate {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.7,8C21.4,8,22,8.6,22,9.3v7.9c0,0.7-0.6,1.3-1.3,1.3h-7.9c-0.7,0-1.3-0.6-1.3-1.3V9.3c0-0.7,0.6-1.3,1.3-1.3H20.7 M12.8,19.4c-1.2,0-2.2-1-2.2-2.2v-5.7H9.3c-0.7,0-1.3,0.6-1.3,1.3v7.9C8,21.4,8.6,22,9.3,22h7.9c0.7,0,1.3-0.6,1.3-1.3v-1.3H12.8z' fill='white' /%3E%3C/svg%3E%0A");
-}
-.lpb-delete {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14 8H16C16.5523 8 17 8.44772 17 9H21V11H9V9H13C13 8.44772 13.4477 8 14 8ZM10 12H20L19.09 21.0995C19.0389 21.6107 18.6088 22 18.095 22H11.905C11.3912 22 10.9611 21.6107 10.91 21.0995L10 12Z' fill='%23000000'/%3E%3C/svg%3E%0A");
-  background-size: cover;
-}
-.is-layout .lpb-delete {
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14 8H16C16.5523 8 17 8.44772 17 9H21V11H9V9H13C13 8.44772 13.4477 8 14 8ZM10 12H20L19.09 21.0995C19.0389 21.6107 18.6088 22 18.095 22H11.905C11.3912 22 10.9611 21.6107 10.91 21.0995L10 12Z' fill='white'/%3E%3C/svg%3E%0A");
-}
-.lpb-btn {
-  position: absolute;
-  display: inline-block;
-  background: #fff;
-  border-radius: 10px;
-  box-shadow: 0 2px 15px rgba(0, 0, 0, .15);
-  z-index: 80;
-  left: 50%;
-  transform: translateX(-50%);
-  padding: 6px 10px;
-  transition: all .15s linear;
-}
-.lpb-btn.before {
-  top: -17px;
-}
-.lpb-btn.after {
-  bottom: -15px;
-}
-.lpb-btn.center {
-  top: 50%;
-  transform: translate(-50%, -50%);
-}
-.js-lpb-component > .lpb-btn {
-  opacity: 0;
-}
-.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-btn,
-.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-btn {
-  opacity: 1;
-}
-.lpb-btn--add {
-  width: 24px;
-  height: 24px;
-  left: 50%;
-  z-index: 80;
-  position: absolute;
-  border: 3px solid white;
-  cursor: pointer;
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.25), 0 1px 3px rgba(0, 0, 0, 0.25);
-  border-radius: 6px;
-  background-color: #ffffff;
-  background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath opacity='.5' fill-rule='evenodd' clip-rule='evenodd' d='M13 6V11H18V13H13V18H11V12.999L6 13V11L11 10.999V6H13Z' fill='%23130F13'/%3E%3C/svg%3E%0A");
-  background-size: cover;
-  margin: auto;
-  transform: translateX(-50%);
-  transition: all .15s linear;
-}
-.lpb-btn--add:hover {
-  background-color: #e1e0e1;
-  background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13 6V11H18V13H13V18H11V12.999L6 13V11L11 10.999V6H13Z' fill='%23130F13'/%3E%3C/svg%3E%0A");
-  opacity: 1;
-}
-.lpb-btn--add:hover,
-.lpb-btn:hover,
-.lpb-btn--add:focus-within,
-.lpb-btn:focus-within {
-  z-index: 90;
-}
-.js-lpb-component .lpb-btn--add,
-.js-lpb-region .lpb-btn--add {
-  opacity: 0;
-}
-.lpb-btn--add:focus {
-  outline: 2px solid blue;
-}
-.lpb-btn--add.center {
-  top: 50%;
-  transform: translate(-50%, -50%);
-}
-.lpb-btn--add.before {
-  top: -15px;
-  transform: translateX(-50%);
-}
-.lpb-btn--add.after {
-  bottom: -16px;
-}
-.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-btn--add,
-.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-btn--add {
-  visibility: visible;
-  opacity: 1;
-}
-.lp-builder:not(.is-navigating) .js-lpb-region:hover > .lpb-btn--add,
-.lp-builder:not(.is-navigating) .js-lpb-region:focus-within > .lpb-btn--add {
-  visibility: visible;
-  opacity: 1;
-}
-.js-lpb-component + .lpb-btn--add {
-  display: none;
-}
-.gu-mirror {
-  background: #fff;
-  cursor: grabbing;
-}
-
-form.layout-paragraphs-builder-form {
-  margin-left: -20px;
-  margin-right: -20px;
-  outline: 1px solid rgba(0,0,0,.15);
-}
-
-form.layout-paragraphs-builder-form .js-lpb-component-list {
-  padding: 20px;
-}
-
-.lpb-enable {
-  display: flex;
-  justify-content: center;
-  left: 0;
-  opacity: 0;
-  position: absolute;
-  right: 0;
-  top: 0;
-  transform: translateY(-50%);
-}
-
-.lpb-enable__button {
-  display: flex;
-}
-
-a.lpb-enable-button {
-  align-items: center;
-  background-color: #00659b;
-  border: none;
-  border-radius: 3px;
-  color: white;
-  display: flex;
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  padding: 3px 12px 3px 0;
-}
-
-a.lpb-enable-button:hover,
-a.lpb-enable-button:focus {
-  padding: 3px 12px 3px 0;
-  border-bottom-style: none;
-  color: white;
-  outline: none;
-}
-a.lpb-enable-button::before {
-  content: "";
-  display: block;
-  height: 30px;
-  width: 30px;
-  border-radius: 3px;
-  margin: 0;
-  padding: 0;
-  opacity: .5;
-  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='white'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='white'/%3E%3C/svg%3E%0A");
-  background-position: 50% 50%;
-  background-repeat: no-repeat;
-}
-.lpb-formatter {
-  position: relative;
-}
-.lpb-formatter:hover,
-.lpb-formatter:focus-within {
-  outline: 1px solid blue;
-}
-
-.lpb-formatter:hover .lpb-enable,
-.lpb-formatter:focus-within .lpb-enable {
-  opacity: 1;
+  line-height: 30px;
 }
 
 .lpb-tooltiptext {
-  opacity: 0;
-  pointer-events: none;
-  transition: all .15s linear;
-  width: auto;
-  background-color: black;
-  color: #fff;
-  text-align: center;
-  padding: 10px;
   position: absolute;
   z-index: 90;
   bottom: 100%;
   left: -7px;
+  width: auto;
   margin-bottom: -2px;
+  padding: 10px;
+  transition: all 0.15s linear;
+  text-align: center;
   white-space: nowrap;
+  pointer-events: none;
+  opacity: 0;
+  color: #fff;
+  background-color: black;
 }
+
 .lpb-tooltiptext::after {
-  content: " ";
   position: absolute;
-  top: 100%; /* At the bottom of the tooltip */
+  top: 100%;
   left: 20px;
+  content: " ";
   border-width: 7px;
   border-style: solid;
   border-color: black transparent transparent transparent;
 }
+
 .lp-builder:not(.is-dragging) .lpb-tooltip--hover:hover + .lpb-tooltiptext {
   transition-delay: 1s;
 }
+
 .lp-builder:not(.is-dragging) .lpb-tooltip--focus:focus + .lpb-tooltiptext,
 .lp-builder:not(.is-dragging) .lpb-tooltip--hover:hover + .lpb-tooltiptext,
 .lpb-tooltiptext--visible {
   opacity: 1;
 }
-.js-lpb-ui-message {
-  background-color: #000;
-  color: #fff;
-  text-align: center;
-  position: static;
-}
-
-.ck.ck-balloon-panel.ck-balloon-panel_visible {
-  z-index: 1500;
-}
diff --git a/css/component-list.css b/css/component-list.css
index 53084d6..81efc9b 100644
--- a/css/component-list.css
+++ b/css/component-list.css
@@ -9,12 +9,12 @@
 }
 
 .lpb-component-list__item a {
-  align-items: center;
   display: flex;
-  margin-top: 10px;
+  align-items: center;
   width: 100%;
+  margin-top: 10px;
 }
 .lpb-component-list__item img {
-  margin-right: 10px;
   max-width: 24px;
+  margin-right: 10px;
 }
diff --git a/css/layout-select.css b/css/layout-select.css
index d84ddeb..bfbd164 100644
--- a/css/layout-select.css
+++ b/css/layout-select.css
@@ -13,8 +13,8 @@
   outline: 1px solid #ccc;
 }
 .layout-select__item input:checked + label.option {
+  transition: 0.1s all;
   outline: 2px solid blue;
-  transition: .1s all;
   font-weight: bold;
 }
 .layout-select__item-icon {
-- 
GitLab


From 130c633675e09780c7b7c5df3bb1d56bba2a4de2 Mon Sep 17 00:00:00 2001
From: Justin Toupin <justin@atendesigngroup.com>
Date: Wed, 29 Jan 2025 18:23:52 -0700
Subject: [PATCH 13/13] Fix stylelint problems correctly.

---
 css/builder.css | 318 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 290 insertions(+), 28 deletions(-)

diff --git a/css/builder.css b/css/builder.css
index 7aa7b33..8153ed3 100644
--- a/css/builder.css
+++ b/css/builder.css
@@ -2,76 +2,65 @@
   position: relative;
   min-height: 30px;
 }
-
 .js-lpb-region {
   position: relative;
   box-sizing: border-box;
   min-height: 40px;
   cursor: default;
 }
-
 .lpb-empty-container__wrapper {
   position: relative;
 }
-
 .lpb-empty-container {
   padding-bottom: 30px;
   text-align: center;
 }
-
 .lpb-empty-toggle {
   min-height: 20px;
 }
-
 .lpb-empty-message {
   padding-bottom: 40px;
   text-align: center;
 }
-
 .lpb-empty-container__wrapper .lpb-section-menu__wrapper {
   bottom: 20px;
 }
-
 .is-dragging .js-lpb-region,
 .is-navigating .js-lpb-region {
   outline: 1px dotted blue;
 }
-
 .is-dragging .t-reversed .js-lpb-region {
   outline: 1px dotted white;
 }
-
 .js-lpb-component {
   position: relative;
-  cursor: grab;
   transition: all 0.15s linear;
   outline: 1px solid blue;
   outline-color: transparent;
 }
-
 .lp-builder:not(.is-navigating) .js-lpb-component:hover,
 .lp-builder:not(.is-navigating) .js-lpb-component:focus-within {
   outline: 1px solid blue;
 }
-
 .js-lpb-component.is-navigating {
   outline: 3px solid blue;
 }
-
+.js-lpb-component {
+  cursor: grab;
+}
 .js-lpb-component:hover .js-lpb-region,
 .js-lpb-component:focus-within .js-lpb-region {
   outline: 1px dotted rgba(0, 0, 255, 0.5);
 }
-
 .lp-builder:not(.is-navigating) .js-lpb-component:hover .js-lpb-region:hover,
-.lp-builder:not(.is-navigating) .js-lpb-component:focus-within .js-lpb-region:focus-within {
+.lp-builder:not(.is-navigating)
+  .js-lpb-component:focus-within
+  .js-lpb-region:focus-within {
   outline: 1px solid rgba(0, 0, 255, 0.5);
 }
-
 .lpb-layout {
   padding: 20px;
 }
-
 .lpb-layout .lpb-layout-label {
   position: absolute;
   right: 0;
@@ -79,15 +68,12 @@
   border: 1px dotted #ccc;
   font-size: small;
 }
-
 .js-lpb-btn--add {
   position: absolute;
 }
-
 .lpb-controls__wrapper {
   position: absolute;
 }
-
 .lpb-controls {
   position: absolute;
   z-index: 80;
@@ -103,12 +89,10 @@
     0 1px 1px rgba(0, 0, 0, 0.25),
     0 1px 3px rgba(0, 0, 0, 0.25);
 }
-
 .lpb-controls:hover,
 .lpb-controls:focus-within {
   z-index: 90;
 }
-
 .lpb-controls.is-layout {
   top: -40px;
   right: -1px;
@@ -118,16 +102,287 @@
   background-color: #00659b;
   box-shadow: none;
 }
-
+.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-controls,
+.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-controls {
+  opacity: 1;
+}
 .lpb-controls a {
   font-size: 0;
 }
-
 .lpb-controls-label {
   padding: 0 5px 0 10px;
   font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
   line-height: 30px;
 }
+.lpb-drag,
+.lpb-up,
+.lpb-down,
+.lpb-edit,
+.lpb-duplicate,
+.lpb-delete {
+  width: 30px;
+  height: 30px;
+  margin: 0;
+  padding: 0;
+  cursor: pointer;
+  opacity: 0.5;
+  border-radius: 3px;
+}
+.is-layout .lpb-drag,
+.is-layout .lpb-up,
+.is-layout .lpb-down,
+.is-layout .lpb-edit,
+.is-layout .lpb-duplicate,
+.is-layout .lpb-delete {
+  opacity: 1;
+}
+.lpb-drag {
+  cursor: grab;
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.5 11C13.3284 11 14 10.3284 14 9.5C14 8.67157 13.3284 8 12.5 8C11.6716 8 11 8.67157 11 9.5C11 10.3284 11.6716 11 12.5 11Z' fill='%23000000'/%3E%3Cpath d='M12.5 16C13.3284 16 14 15.3284 14 14.5C14 13.6716 13.3284 13 12.5 13C11.6716 13 11 13.6716 11 14.5C11 15.3284 11.6716 16 12.5 16Z' fill='%23000000'/%3E%3Cpath d='M14 19.5C14 20.3284 13.3284 21 12.5 21C11.6716 21 11 20.3284 11 19.5C11 18.6716 11.6716 18 12.5 18C13.3284 18 14 18.6716 14 19.5Z' fill='%23000000'/%3E%3Cpath d='M17.5 11C18.3284 11 19 10.3284 19 9.5C19 8.67157 18.3284 8 17.5 8C16.6716 8 16 8.67157 16 9.5C16 10.3284 16.6716 11 17.5 11Z' fill='%23000000'/%3E%3Cpath d='M19 14.5C19 15.3284 18.3284 16 17.5 16C16.6716 16 16 15.3284 16 14.5C16 13.6716 16.6716 13 17.5 13C18.3284 13 19 13.6716 19 14.5Z' fill='%23000000'/%3E%3Cpath d='M17.5 21C18.3284 21 19 20.3284 19 19.5C19 18.6716 18.3284 18 17.5 18C16.6716 18 16 18.6716 16 19.5C16 20.3284 16.6716 21 17.5 21Z' fill='%23000000'/%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-drag {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.5 11C13.3284 11 14 10.3284 14 9.5C14 8.67157 13.3284 8 12.5 8C11.6716 8 11 8.67157 11 9.5C11 10.3284 11.6716 11 12.5 11Z' fill='white'/%3E%3Cpath d='M12.5 16C13.3284 16 14 15.3284 14 14.5C14 13.6716 13.3284 13 12.5 13C11.6716 13 11 13.6716 11 14.5C11 15.3284 11.6716 16 12.5 16Z' fill='white'/%3E%3Cpath d='M14 19.5C14 20.3284 13.3284 21 12.5 21C11.6716 21 11 20.3284 11 19.5C11 18.6716 11.6716 18 12.5 18C13.3284 18 14 18.6716 14 19.5Z' fill='white'/%3E%3Cpath d='M17.5 11C18.3284 11 19 10.3284 19 9.5C19 8.67157 18.3284 8 17.5 8C16.6716 8 16 8.67157 16 9.5C16 10.3284 16.6716 11 17.5 11Z' fill='white'/%3E%3Cpath d='M19 14.5C19 15.3284 18.3284 16 17.5 16C16.6716 16 16 15.3284 16 14.5C16 13.6716 16.6716 13 17.5 13C18.3284 13 19 13.6716 19 14.5Z' fill='white'/%3E%3Cpath d='M17.5 21C18.3284 21 19 20.3284 19 19.5C19 18.6716 18.3284 18 17.5 18C16.6716 18 16 18.6716 16 19.5C16 20.3284 16.6716 21 17.5 21Z' fill='white'/%3E%3C/svg%3E%0A");
+}
+.lpb-up:hover,
+.lpb-down:hover,
+.lpb-edit:hover,
+.lpb-duplicate:hover,
+.lpb-delete:hover {
+  opacity: 1;
+  background-color: rgba(0, 0, 0, 0.1);
+}
+.is-layout .lpb-up:hover,
+.is-layout .lpb-down:hover,
+.is-layout .lpb-edit:hover,
+.is-layout .lpb-duplicate:hover,
+.is-layout .lpb-delete:hover {
+  background-color: rgba(0, 0, 0, 0.25);
+}
+.lpb-drag:focus,
+.lpb-up:focus,
+.lpb-down:focus,
+.lpb-edit:focus,
+.lpb-duplicate:focus,
+.lpb-delete:focus {
+  outline: 2px solid blue;
+}
+.is-layout .lpb-drag:focus,
+.is-layout .lpb-up:focus,
+.is-layout .lpb-down:focus,
+.is-layout .lpb-edit:focus,
+.is-layout .lpb-duplicate:focus,
+.is-layout .lpb-delete:focus {
+  outline-color: white;
+}
+.lpb-up {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 18L15 12L21 18H9Z' fill='%23000000'/%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-up {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9 18L15 12L21 18H9Z' fill='white'/%3E%3C/svg%3E%0A");
+}
+.lpb-down {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21 12L15 18L9 12L21 12Z' fill='%23000000'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='12' height='6' fill='white' transform='translate(21 18) rotate(-180)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-down {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0)'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M21 12L15 18L9 12L21 12Z' fill='white'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0'%3E%3Crect width='12' height='6' fill='white' transform='translate(21 18) rotate(-180)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
+}
+.lpb-down[tabindex="-1"]:hover,
+.lpb-up[tabindex="-1"]:hover {
+  background-color: transparent;
+  box-shadow: none;
+}
+.lpb-down[tabindex="-1"],
+.lpb-up[tabindex="-1"] {
+  cursor: default;
+  opacity: 0.3;
+}
+.lpb-edit {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='%23000000'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='%23000000'/%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-edit {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='white'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='white'/%3E%3C/svg%3E%0A");
+}
+.lpb-duplicate {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.7,8C21.4,8,22,8.6,22,9.3v7.9c0,0.7-0.6,1.3-1.3,1.3h-7.9c-0.7,0-1.3-0.6-1.3-1.3V9.3c0-0.7,0.6-1.3,1.3-1.3H20.7 M12.8,19.4c-1.2,0-2.2-1-2.2-2.2v-5.7H9.3c-0.7,0-1.3,0.6-1.3,1.3v7.9C8,21.4,8.6,22,9.3,22h7.9c0.7,0,1.3-0.6,1.3-1.3v-1.3H12.8z' fill='black' /%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-duplicate {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20.7,8C21.4,8,22,8.6,22,9.3v7.9c0,0.7-0.6,1.3-1.3,1.3h-7.9c-0.7,0-1.3-0.6-1.3-1.3V9.3c0-0.7,0.6-1.3,1.3-1.3H20.7 M12.8,19.4c-1.2,0-2.2-1-2.2-2.2v-5.7H9.3c-0.7,0-1.3,0.6-1.3,1.3v7.9C8,21.4,8.6,22,9.3,22h7.9c0.7,0,1.3-0.6,1.3-1.3v-1.3H12.8z' fill='white' /%3E%3C/svg%3E%0A");
+}
+.lpb-delete {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14 8H16C16.5523 8 17 8.44772 17 9H21V11H9V9H13C13 8.44772 13.4477 8 14 8ZM10 12H20L19.09 21.0995C19.0389 21.6107 18.6088 22 18.095 22H11.905C11.3912 22 10.9611 21.6107 10.91 21.0995L10 12Z' fill='%23000000'/%3E%3C/svg%3E%0A");
+  background-size: cover;
+}
+.is-layout .lpb-delete {
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14 8H16C16.5523 8 17 8.44772 17 9H21V11H9V9H13C13 8.44772 13.4477 8 14 8ZM10 12H20L19.09 21.0995C19.0389 21.6107 18.6088 22 18.095 22H11.905C11.3912 22 10.9611 21.6107 10.91 21.0995L10 12Z' fill='white'/%3E%3C/svg%3E%0A");
+}
+.lpb-btn {
+  position: absolute;
+  z-index: 80;
+  left: 50%;
+  display: inline-block;
+  padding: 6px 10px;
+  transition: all 0.15s linear;
+  transform: translateX(-50%);
+  border-radius: 10px;
+  background: #fff;
+  box-shadow: 0 2px 15px rgba(0, 0, 0, 0.15);
+}
+.lpb-btn.before {
+  top: -17px;
+}
+.lpb-btn.after {
+  bottom: -15px;
+}
+.lpb-btn.center {
+  top: 50%;
+  transform: translate(-50%, -50%);
+}
+.js-lpb-component > .lpb-btn {
+  opacity: 0;
+}
+.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-btn,
+.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-btn {
+  opacity: 1;
+}
+.lpb-btn--add {
+  position: absolute;
+  z-index: 80;
+  left: 50%;
+  width: 24px;
+  height: 24px;
+  margin: auto;
+  cursor: pointer;
+  transition: all 0.15s linear;
+  transform: translateX(-50%);
+  border: 3px solid white;
+  border-radius: 6px;
+  background-color: #fff;
+  background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath opacity='.5' fill-rule='evenodd' clip-rule='evenodd' d='M13 6V11H18V13H13V18H11V12.999L6 13V11L11 10.999V6H13Z' fill='%23130F13'/%3E%3C/svg%3E%0A");
+  background-size: cover;
+  box-shadow:
+    0 1px 1px rgba(0, 0, 0, 0.25),
+    0 1px 3px rgba(0, 0, 0, 0.25);
+}
+.lpb-btn--add:hover {
+  opacity: 1;
+  background-color: #e1e0e1;
+  background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M13 6V11H18V13H13V18H11V12.999L6 13V11L11 10.999V6H13Z' fill='%23130F13'/%3E%3C/svg%3E%0A");
+}
+.lpb-btn--add:hover,
+.lpb-btn:hover,
+.lpb-btn--add:focus-within,
+.lpb-btn:focus-within {
+  z-index: 90;
+}
+.js-lpb-component .lpb-btn--add,
+.js-lpb-region .lpb-btn--add {
+  opacity: 0;
+}
+.lpb-btn--add:focus {
+  outline: 2px solid blue;
+}
+.lpb-btn--add.center {
+  top: 50%;
+  transform: translate(-50%, -50%);
+}
+.lpb-btn--add.before {
+  top: -15px;
+  transform: translateX(-50%);
+}
+.lpb-btn--add.after {
+  bottom: -16px;
+}
+.lp-builder:not(.is-navigating) .js-lpb-component:hover > .lpb-btn--add,
+.lp-builder:not(.is-navigating) .js-lpb-component:focus-within > .lpb-btn--add {
+  visibility: visible;
+  opacity: 1;
+}
+.lp-builder:not(.is-navigating) .js-lpb-region:hover > .lpb-btn--add,
+.lp-builder:not(.is-navigating) .js-lpb-region:focus-within > .lpb-btn--add {
+  visibility: visible;
+  opacity: 1;
+}
+.js-lpb-component + .lpb-btn--add {
+  display: none;
+}
+.gu-mirror {
+  cursor: grabbing;
+  background: #fff;
+}
+
+form.layout-paragraphs-builder-form {
+  margin-right: -20px;
+  margin-left: -20px;
+  outline: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+form.layout-paragraphs-builder-form .js-lpb-component-list {
+  padding: 20px;
+}
+
+.lpb-enable {
+  position: absolute;
+  top: 0;
+  right: 0;
+  left: 0;
+  display: flex;
+  justify-content: center;
+  transform: translateY(-50%);
+  opacity: 0;
+}
+
+.lpb-enable__button {
+  display: flex;
+}
+
+a.lpb-enable-button {
+  display: flex;
+  align-items: center;
+  padding: 3px 12px 3px 0;
+  color: white;
+  border: none;
+  border-radius: 3px;
+  background-color: #00659b;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+a.lpb-enable-button:hover,
+a.lpb-enable-button:focus {
+  padding: 3px 12px 3px 0;
+  color: white;
+  border-bottom-style: none;
+  outline: none;
+}
+a.lpb-enable-button::before {
+  display: block;
+  width: 30px;
+  height: 30px;
+  margin: 0;
+  padding: 0;
+  content: "";
+  opacity: 0.5;
+  border-radius: 3px;
+  background-image: url("data:image/svg+xml,%3Csvg width='30' height='30' viewBox='0 0 30 30' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M18.284 8.63082L19.6136 7.30121C20.0152 6.8996 20.6664 6.8996 21.068 7.30121L22.6988 8.93203C23.1004 9.33365 23.1004 9.98479 22.6988 10.3864L21.3692 11.716L18.284 8.63082Z' fill='white'/%3E%3Cpath d='M17.2556 9.65922L9.0284 17.8864L8 22L12.1136 20.9716L20.3408 12.7444L17.2556 9.65922Z' fill='white'/%3E%3C/svg%3E%0A");
+  background-repeat: no-repeat;
+  background-position: 50% 50%;
+}
+.lpb-formatter {
+  position: relative;
+}
+.lpb-formatter:hover,
+.lpb-formatter:focus-within {
+  outline: 1px solid blue;
+}
+
+.lpb-formatter:hover .lpb-enable,
+.lpb-formatter:focus-within .lpb-enable {
+  opacity: 1;
+}
 
 .lpb-tooltiptext {
   position: absolute;
@@ -145,23 +400,30 @@
   color: #fff;
   background-color: black;
 }
-
 .lpb-tooltiptext::after {
   position: absolute;
-  top: 100%;
+  top: 100%; /* At the bottom of the tooltip */
   left: 20px;
   content: " ";
   border-width: 7px;
   border-style: solid;
   border-color: black transparent transparent transparent;
 }
-
 .lp-builder:not(.is-dragging) .lpb-tooltip--hover:hover + .lpb-tooltiptext {
   transition-delay: 1s;
 }
-
 .lp-builder:not(.is-dragging) .lpb-tooltip--focus:focus + .lpb-tooltiptext,
 .lp-builder:not(.is-dragging) .lpb-tooltip--hover:hover + .lpb-tooltiptext,
 .lpb-tooltiptext--visible {
   opacity: 1;
 }
+.js-lpb-ui-message {
+  position: static;
+  text-align: center;
+  color: #fff;
+  background-color: #000;
+}
+
+.ck.ck-balloon-panel.ck-balloon-panel_visible {
+  z-index: 1500;
+}
-- 
GitLab