diff --git a/composer.json b/composer.json
index 6ea6ca7..52a86a5 100644
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,7 @@
"cweagans/composer-patches": "^1.7",
"drupal/admin_toolbar": "^3.4",
"drupal/bootstrap5": "^4.0",
+ "drupal/color_field": "^3.0",
"drupal/config_split": "^2.0",
"drupal/core-composer-scaffold": "^10.3",
"drupal/core-project-message": "^10.3",
@@ -29,6 +30,7 @@
"drupal/gin_login": "^2.1",
"drupal/google_tag": "^2.0",
"drupal/jsonapi_permission_access": "1.0.1",
+ "drupal/layout_builder_admin_theme": "^2.0",
"drupal/layout_builder_styles": "^2.0",
"drupal/mailsystem": "^4.5",
"drupal/migrate_plus": "^6.0",
diff --git a/composer.lock b/composer.lock
index 41a80ef..e5adf06 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b4ad2bd086bae7631f8cd18f2b6582df",
+ "content-hash": "f945ec3f41de2e340cab7c38ab502247",
"packages": [
{
"name": "asm89/stack-cors",
@@ -1603,6 +1603,70 @@
"issues": "https://www.drupal.org/project/issues/bootstrap5"
}
},
+ {
+ "name": "drupal/color_field",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://git.drupalcode.org/project/color_field.git",
+ "reference": "3.0.1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://ftp.drupal.org/files/projects/color_field-3.0.1.zip",
+ "reference": "3.0.1",
+ "shasum": "fd2f75db74063f817d81a537221fa1c8398e4d8f"
+ },
+ "require": {
+ "drupal/core": "^9 || ^10 || ^11"
+ },
+ "require-dev": {
+ "drupal/core-recommended": "^9 || ^10",
+ "drupal/feeds": "^3.0@beta",
+ "drupal/token": "~1.3"
+ },
+ "suggest": {
+ "bower-asset/jquery-simple-color": "^v1.2.2: Provides JavaScript library necessary for the Color Grid widget",
+ "bower-asset/spectrum": "^1.8: Provides JavaScript library necessary for Spectrum widget."
+ },
+ "type": "drupal-module",
+ "extra": {
+ "drupal": {
+ "version": "3.0.1",
+ "datestamp": "1717506868",
+ "security-coverage": {
+ "status": "covered",
+ "message": "Covered by Drupal's security advisory policy"
+ }
+ }
+ },
+ "notification-url": "https://packages.drupal.org/8/downloads",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "targoo",
+ "homepage": "https://www.drupal.org/user/431910",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Nick Wilde",
+ "homepage": "https://www.drupal.org/user/nickwilde",
+ "role": "Maintainer"
+ },
+ {
+ "name": "targoo",
+ "homepage": "https://www.drupal.org/user/431910"
+ }
+ ],
+ "description": "Provides a color field type to store the color value and opacity",
+ "homepage": "https://www.drupal.org/project/color_field",
+ "support": {
+ "source": "https://git.drupalcode.org/project/color_field",
+ "issues": "https://www.drupal.org/project/issues/color_field?version=8.x"
+ }
+ },
{
"name": "drupal/config_split",
"version": "2.0.1",
@@ -2656,6 +2720,54 @@
"source": "https://git.drupalcode.org/project/jsonapi_permission_access"
}
},
+ {
+ "name": "drupal/layout_builder_admin_theme",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://git.drupalcode.org/project/layout_builder_admin_theme.git",
+ "reference": "2.0.2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://ftp.drupal.org/files/projects/layout_builder_admin_theme-2.0.2.zip",
+ "reference": "2.0.2",
+ "shasum": "331d2a3d7f8b5130268ae089d03bcae59c1b7544"
+ },
+ "require": {
+ "drupal/core": "^9 || ^10 || ^11"
+ },
+ "type": "drupal-module",
+ "extra": {
+ "drupal": {
+ "version": "2.0.2",
+ "datestamp": "1723183931",
+ "security-coverage": {
+ "status": "covered",
+ "message": "Covered by Drupal's security advisory policy"
+ }
+ }
+ },
+ "notification-url": "https://packages.drupal.org/8/downloads",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "ivnish",
+ "homepage": "https://www.drupal.org/user/3547706"
+ },
+ {
+ "name": "robert.duplock",
+ "homepage": "https://www.drupal.org/user/3645985"
+ }
+ ],
+ "description": "Makes your Drupal site use the admin theme when using \"Layout builder\".",
+ "homepage": "https://www.drupal.org/project/layout_builder_admin_theme",
+ "support": {
+ "source": "https://git.drupalcode.org/project/layout_builder_admin_theme"
+ }
+ },
{
"name": "drupal/layout_builder_styles",
"version": "2.0.0",
diff --git a/config/default/block_content.type.ping_pong.yml b/config/default/block_content.type.ping_pong.yml
new file mode 100644
index 0000000..19e4ba3
--- /dev/null
+++ b/config/default/block_content.type.ping_pong.yml
@@ -0,0 +1,10 @@
+uuid: 62221ff8-bff9-4615-b8b1-b5387c5c5fb8
+langcode: en
+status: true
+dependencies: { }
+_core:
+ default_config_hash: v_2vrosNagS8cspYwOOTN8d-vS9d2lGbzc0pbifm1go
+id: ping_pong
+label: 'Ping Pong'
+revision: false
+description: 'A ping pong component.'
diff --git a/config/default/core.entity_form_display.block_content.ping_pong.default.yml b/config/default/core.entity_form_display.block_content.ping_pong.default.yml
new file mode 100644
index 0000000..32d8532
--- /dev/null
+++ b/config/default/core.entity_form_display.block_content.ping_pong.default.yml
@@ -0,0 +1,68 @@
+uuid: cec1a040-81f5-465e-93b0-7f8c1b329a3b
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.field.block_content.ping_pong.field_ping_pong_background_color
+ - field.field.block_content.ping_pong.field_ping_pong_body
+ - field.field.block_content.ping_pong.field_ping_pong_cta
+ - field.field.block_content.ping_pong.field_ping_pong_layout
+ - field.field.block_content.ping_pong.field_ping_pong_media_alignment
+ - field.field.block_content.ping_pong.field_ping_pong_media_items
+ module:
+ - color_field
+ - link
+ - media_library
+ - text
+_core:
+ default_config_hash: gtqwbxZq9ow8kKCtm8NHPHnhmke26lB-c6DFht_GpEU
+id: block_content.ping_pong.default
+targetEntityType: block_content
+bundle: ping_pong
+mode: default
+content:
+ field_ping_pong_background_color:
+ type: color_field_widget_box
+ weight: 1
+ region: content
+ settings:
+ default_colors: '#ac725e,#d06b64,#f83a22,#fa573c,#ff7537,#ffad46,#42d692,#16a765,#7bd148,#b3dc6c,#fbe983'
+ third_party_settings: { }
+ field_ping_pong_body:
+ type: text_textarea
+ weight: 5
+ region: content
+ settings:
+ rows: 5
+ placeholder: ''
+ third_party_settings: { }
+ field_ping_pong_cta:
+ type: link_default
+ weight: 26
+ region: content
+ settings:
+ placeholder_url: ''
+ placeholder_title: ''
+ third_party_settings: { }
+ field_ping_pong_layout:
+ type: options_select
+ weight: 2
+ region: content
+ settings: { }
+ third_party_settings: { }
+ field_ping_pong_media_alignment:
+ type: options_select
+ weight: 3
+ region: content
+ settings: { }
+ third_party_settings: { }
+ field_ping_pong_media_items:
+ type: media_library_widget
+ weight: 4
+ region: content
+ settings:
+ media_types: { }
+ third_party_settings: { }
+hidden:
+ info: true
diff --git a/config/default/core.entity_view_display.block_content.ping_pong.default.yml b/config/default/core.entity_view_display.block_content.ping_pong.default.yml
new file mode 100644
index 0000000..0343017
--- /dev/null
+++ b/config/default/core.entity_view_display.block_content.ping_pong.default.yml
@@ -0,0 +1,77 @@
+uuid: ed5314c0-a437-46a6-8f0a-8a09370c01b2
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.field.block_content.ping_pong.field_ping_pong_background_color
+ - field.field.block_content.ping_pong.field_ping_pong_body
+ - field.field.block_content.ping_pong.field_ping_pong_cta
+ - field.field.block_content.ping_pong.field_ping_pong_layout
+ - field.field.block_content.ping_pong.field_ping_pong_media_alignment
+ - field.field.block_content.ping_pong.field_ping_pong_media_items
+ module:
+ - color_field
+ - link
+ - options
+ - text
+_core:
+ default_config_hash: qTNnUYshVkxTA-MivgwS3w34Vfb_zBdcltV-4FP5yuM
+id: block_content.ping_pong.default
+targetEntityType: block_content
+bundle: ping_pong
+mode: default
+content:
+ field_ping_pong_background_color:
+ type: color_field_formatter_text
+ label: hidden
+ settings:
+ format: hex
+ opacity: true
+ third_party_settings: { }
+ weight: 5
+ region: content
+ field_ping_pong_body:
+ type: text_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 6
+ region: content
+ field_ping_pong_cta:
+ type: link
+ label: hidden
+ settings:
+ trim_length: 80
+ url_only: false
+ url_plain: false
+ rel: ''
+ target: ''
+ third_party_settings: { }
+ weight: 11
+ region: content
+ field_ping_pong_layout:
+ type: list_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 8
+ region: content
+ field_ping_pong_media_alignment:
+ type: list_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 9
+ region: content
+ field_ping_pong_media_items:
+ type: entity_reference_entity_view
+ label: hidden
+ settings:
+ view_mode: ping_pong
+ link: false
+ third_party_settings: { }
+ weight: 10
+ region: content
+hidden:
+ search_api_excerpt: true
diff --git a/config/default/core.entity_view_display.media.image.ping_pong.yml b/config/default/core.entity_view_display.media.image.ping_pong.yml
new file mode 100644
index 0000000..3dc0269
--- /dev/null
+++ b/config/default/core.entity_view_display.media.image.ping_pong.yml
@@ -0,0 +1,40 @@
+uuid: ad80e641-9853-4131-9802-0394aa966e30
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.media.ping_pong
+ - field.field.media.image.field_media_image
+ - image.style.large
+ - media.type.image
+ module:
+ - image
+ - layout_builder
+third_party_settings:
+ layout_builder:
+ enabled: false
+ allow_custom: false
+_core:
+ default_config_hash: UKOGAdmEK7rEHkH0kBFPubtXhcaXX1YIbPEyGWBUamQ
+id: media.image.ping_pong
+targetEntityType: media
+bundle: image
+mode: ping_pong
+content:
+ field_media_image:
+ type: image
+ label: visually_hidden
+ settings:
+ image_link: ''
+ image_style: large
+ image_loading:
+ attribute: lazy
+ third_party_settings: { }
+ weight: 1
+ region: content
+hidden:
+ created: true
+ name: true
+ search_api_excerpt: true
+ thumbnail: true
+ uid: true
diff --git a/config/default/core.entity_view_display.media.video.ping_pong.yml b/config/default/core.entity_view_display.media.video.ping_pong.yml
new file mode 100644
index 0000000..933a4e7
--- /dev/null
+++ b/config/default/core.entity_view_display.media.video.ping_pong.yml
@@ -0,0 +1,42 @@
+uuid: fd852e6e-b857-45f5-9ff9-125ab5611d51
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.media.ping_pong
+ - field.field.media.video.field_media_video_file
+ - media.type.video
+ module:
+ - file
+ - layout_builder
+third_party_settings:
+ layout_builder:
+ enabled: false
+ allow_custom: false
+_core:
+ default_config_hash: '-9v9f614kw0DYPI7FNkmMQ3udIrSSWYETpCgSfbcSOo'
+id: media.video.ping_pong
+targetEntityType: media
+bundle: video
+mode: ping_pong
+content:
+ field_media_video_file:
+ type: file_video
+ label: visually_hidden
+ settings:
+ controls: true
+ autoplay: false
+ loop: false
+ multiple_file_display_type: tags
+ muted: false
+ width: 640
+ height: 480
+ third_party_settings: { }
+ weight: 0
+ region: content
+hidden:
+ created: true
+ name: true
+ search_api_excerpt: true
+ thumbnail: true
+ uid: true
diff --git a/config/default/core.entity_view_mode.media.ping_pong.yml b/config/default/core.entity_view_mode.media.ping_pong.yml
new file mode 100644
index 0000000..99f3370
--- /dev/null
+++ b/config/default/core.entity_view_mode.media.ping_pong.yml
@@ -0,0 +1,13 @@
+uuid: 3907b7a9-1d74-4907-bcd5-ec4cc1071ed2
+langcode: en
+status: true
+dependencies:
+ module:
+ - media
+_core:
+ default_config_hash: X_LwtmVNteGDqRvzdmyTFKkmu7Xx6qaCl-6bLrVLNbA
+id: media.ping_pong
+label: 'Ping Pong'
+description: ''
+targetEntityType: media
+cache: true
diff --git a/config/default/core.extension.yml b/config/default/core.extension.yml
index b45ae54..715089f 100644
--- a/config/default/core.extension.yml
+++ b/config/default/core.extension.yml
@@ -7,12 +7,14 @@ module:
block_content: 0
breakpoint: 0
ckeditor5: 0
+ color_field: 0
config: 0
config_split: 0
contact: 0
contextual: 0
datetime: 0
dblog: 0
+ dc_components: 0
editor: 0
field: 0
field_group: 0
@@ -26,6 +28,7 @@ module:
history: 0
image: 0
layout_builder: 0
+ layout_builder_admin_theme: 0
layout_discovery: 0
link: 0
mailsystem: 0
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_background_color.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_background_color.yml
new file mode 100644
index 0000000..5b573aa
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_background_color.yml
@@ -0,0 +1,24 @@
+uuid: 31cd8a2a-3bdf-43cd-9a64-43282c7e94be
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_background_color
+ module:
+ - color_field
+_core:
+ default_config_hash: ezyxzl4xM1bQQS3_IcAFFRnju-o64WxI1mdyryUuEHs
+id: block_content.ping_pong.field_ping_pong_background_color
+field_name: field_ping_pong_background_color
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Background Color'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ opacity: 0
+field_type: color_field_type
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_body.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_body.yml
new file mode 100644
index 0000000..9726261
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_body.yml
@@ -0,0 +1,24 @@
+uuid: 943e8d34-238f-4de9-9196-87ed7785bf74
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_body
+ module:
+ - text
+_core:
+ default_config_hash: zPYZcca0J8LOhhlU6GssSI3-driGRHehexRE-UPiXto
+id: block_content.ping_pong.field_ping_pong_body
+field_name: field_ping_pong_body
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Body'
+description: 'The body text of the ping pong.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ allowed_formats: { }
+field_type: text_long
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_cta.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_cta.yml
new file mode 100644
index 0000000..7dff190
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_cta.yml
@@ -0,0 +1,25 @@
+uuid: 03279c7a-a355-4a6e-b9ad-b6c051d97963
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_cta
+ module:
+ - link
+_core:
+ default_config_hash: Zy5QbfM6fjLOfXhhNOrabOUFd1V7SmiYmqQpWl22zXM
+id: block_content.ping_pong.field_ping_pong_cta
+field_name: field_ping_pong_cta
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong CTA'
+description: 'CTA Link for the ping pong item.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ title: 1
+ link_type: 17
+field_type: link
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_layout.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_layout.yml
new file mode 100644
index 0000000..3c79d33
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_layout.yml
@@ -0,0 +1,23 @@
+uuid: 71d04346-f3b6-4b11-ac4f-98cd5ad14b35
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_layout
+ module:
+ - options
+_core:
+ default_config_hash: Mu1pQL-7h7tnURr0-HGAwF42_JOngkOL73ENvUKNgWg
+id: block_content.ping_pong.field_ping_pong_layout
+field_name: field_ping_pong_layout
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Layout'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: list_string
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml
new file mode 100644
index 0000000..12bf1df
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml
@@ -0,0 +1,23 @@
+uuid: 00c6c95a-5f80-45c8-ab83-deecd252ce32
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_media_alignment
+ module:
+ - options
+_core:
+ default_config_hash: MIm1pQBMqr4VdFFBJxle8GgnFee2Vrmx-0vhJJL2VJs
+id: block_content.ping_pong.field_ping_pong_media_alignment
+field_name: field_ping_pong_media_alignment
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Media Alignment'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: list_string
diff --git a/config/default/field.field.block_content.ping_pong.field_ping_pong_media_items.yml b/config/default/field.field.block_content.ping_pong.field_ping_pong_media_items.yml
new file mode 100644
index 0000000..bbabbe0
--- /dev/null
+++ b/config/default/field.field.block_content.ping_pong.field_ping_pong_media_items.yml
@@ -0,0 +1,33 @@
+uuid: 207b28f1-37af-4c91-9cb1-d75d76ab2277
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_media_items
+ - media.type.image
+ - media.type.video
+_core:
+ default_config_hash: KuTVYswdXH2jP5L9LZoK4oNOGA33Wc7TJPIWy3zJsl4
+id: block_content.ping_pong.field_ping_pong_media_items
+field_name: field_ping_pong_media_items
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Media Items'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ handler: 'default:media'
+ handler_settings:
+ target_bundles:
+ image: image
+ video: video
+ sort:
+ field: _none
+ direction: ASC
+ auto_create: false
+ auto_create_bundle: image
+field_type: entity_reference
diff --git a/config/default/field.storage.block_content.field_ping_pong_background_color.yml b/config/default/field.storage.block_content.field_ping_pong_background_color.yml
new file mode 100644
index 0000000..acea494
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_background_color.yml
@@ -0,0 +1,22 @@
+uuid: 2c91aadc-de94-4014-80b0-0165cb294d7e
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - color_field
+_core:
+ default_config_hash: MSvWPCCT4eCIZnbaC6hljsCAcPpF3Li2apqdmtEBPK0
+id: block_content.field_ping_pong_background_color
+field_name: field_ping_pong_background_color
+entity_type: block_content
+type: color_field_type
+settings:
+ format: '#HEXHEX'
+module: color_field
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/field.storage.block_content.field_ping_pong_body.yml b/config/default/field.storage.block_content.field_ping_pong_body.yml
new file mode 100644
index 0000000..b0803d3
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_body.yml
@@ -0,0 +1,21 @@
+uuid: 251a77bd-a105-4525-b528-0d1acdb5dea0
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - text
+_core:
+ default_config_hash: XNZ-wdt5ua4Zyx_XcALhjx1L1D9V376alPCdRmRr5qQ
+id: block_content.field_ping_pong_body
+field_name: field_ping_pong_body
+entity_type: block_content
+type: text_long
+settings: { }
+module: text
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/field.storage.block_content.field_ping_pong_cta.yml b/config/default/field.storage.block_content.field_ping_pong_cta.yml
new file mode 100644
index 0000000..62e0ccf
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_cta.yml
@@ -0,0 +1,21 @@
+uuid: 5f9b0f7a-f3ed-4b92-9558-d02846914aff
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - link
+_core:
+ default_config_hash: _arcoZMgCtlP6bGc6BhPadaSLqR-aMGBNq4LCT0gq7U
+id: block_content.field_ping_pong_cta
+field_name: field_ping_pong_cta
+entity_type: block_content
+type: link
+settings: { }
+module: link
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/field.storage.block_content.field_ping_pong_layout.yml b/config/default/field.storage.block_content.field_ping_pong_layout.yml
new file mode 100644
index 0000000..b6c04dd
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_layout.yml
@@ -0,0 +1,38 @@
+uuid: cb0cf63f-b12d-42a4-9ad8-151a6b45e5c4
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - options
+_core:
+ default_config_hash: qSeZZd3J0QDQqjrG9GLWA9lyQ8-TdiDRcApvG7piG4M
+id: block_content.field_ping_pong_layout
+field_name: field_ping_pong_layout
+entity_type: block_content
+type: list_string
+settings:
+ allowed_values:
+ -
+ value: '50_50'
+ label: 50-50
+ -
+ value: '67_33'
+ label: 67-33
+ -
+ value: '33_67'
+ label: 33-67
+ -
+ value: '25_75'
+ label: 25-75
+ -
+ value: '75_25'
+ label: 75-25
+ allowed_values_function: ''
+module: options
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/field.storage.block_content.field_ping_pong_media_alignment.yml b/config/default/field.storage.block_content.field_ping_pong_media_alignment.yml
new file mode 100644
index 0000000..0fc6bf3
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_media_alignment.yml
@@ -0,0 +1,29 @@
+uuid: 5aad3453-4210-45e5-a891-949efed0792c
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - options
+_core:
+ default_config_hash: a0JdFR0zzMd8kg8LMeiqMCNLmRKyKh12ZsmPQUVhYLE
+id: block_content.field_ping_pong_media_alignment
+field_name: field_ping_pong_media_alignment
+entity_type: block_content
+type: list_string
+settings:
+ allowed_values:
+ -
+ value: left
+ label: Left
+ -
+ value: right
+ label: Right
+ allowed_values_function: ''
+module: options
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/field.storage.block_content.field_ping_pong_media_items.yml b/config/default/field.storage.block_content.field_ping_pong_media_items.yml
new file mode 100644
index 0000000..d908c21
--- /dev/null
+++ b/config/default/field.storage.block_content.field_ping_pong_media_items.yml
@@ -0,0 +1,22 @@
+uuid: ced369f0-c81f-44c2-9715-c80f73ba58ae
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - media
+_core:
+ default_config_hash: Jwsq7a6-H6IvdO7Gnpw9Tm1tBb2O0a9O7DOcWne62KM
+id: block_content.field_ping_pong_media_items
+field_name: field_ping_pong_media_items
+entity_type: block_content
+type: entity_reference
+settings:
+ target_type: media
+module: core
+locked: false
+cardinality: -1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/config/default/layout_builder_admin_theme.config.yml b/config/default/layout_builder_admin_theme.config.yml
new file mode 100644
index 0000000..9bed4ab
--- /dev/null
+++ b/config/default/layout_builder_admin_theme.config.yml
@@ -0,0 +1,3 @@
+_core:
+ default_config_hash: G28OpfOStb3binh5JnrnKOrYQfViQi14-GWN8Zp3o20
+lbat_enable_admin_theme: true
diff --git a/web/modules/custom/dc_components/components/ping-pong/ping-pong.component.yml b/web/modules/custom/dc_components/components/ping-pong/ping-pong.component.yml
new file mode 100644
index 0000000..2054a25
--- /dev/null
+++ b/web/modules/custom/dc_components/components/ping-pong/ping-pong.component.yml
@@ -0,0 +1,35 @@
+name: Ping Pong
+props:
+ type: object
+ properties:
+ mediaAlign:
+ type: string
+ title: Media Alignment
+ description: 'Which side to put media on.'
+ layout:
+ type: string
+ title: Layout
+ description: 'The layout widths'
+ enum: ['50-50', '33-66', '66-33', '25-75', '75-25']
+ bgColor:
+ type: string
+ title: Color
+ description: 'The background color.'
+slots:
+ headline:
+ title: Headline
+ description: This is the headline for the text block.
+ body:
+ title: Body
+ description: This is the body for the text block.
+ cta:
+ title: CTA
+ description: The CTA link.
+ media:
+ title: Media
+ description: The media item(s).
+
+libraryOverrides:
+ dependencies:
+ - core/drupal
+ - core/once
diff --git a/web/modules/custom/dc_components/components/ping-pong/ping-pong.css b/web/modules/custom/dc_components/components/ping-pong/ping-pong.css
new file mode 100644
index 0000000..6ad0dd6
--- /dev/null
+++ b/web/modules/custom/dc_components/components/ping-pong/ping-pong.css
@@ -0,0 +1,95 @@
+.ping-pong-wrapper {
+ max-height: 600px;
+ display: flex;
+ width: 100%;
+}
+
+.ping-pong {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.ping-pong__info {
+ justify-content: center;
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: row;
+}
+
+.ping-pong__info-inner {
+ width: 65%;
+ margin: auto;
+}
+
+@media screen and (max-width: 767px) {
+ .ping-pong__info-inner {
+ width: 100%;
+ padding: 30px;
+ }
+}
+
+.ping-pong__info h2 {
+ margin: 0;
+}
+
+.ping-pong.right {
+ flex-direction: row-reverse;
+}
+
+.ping-pong > div {
+ flex: 1;
+}
+
+@media screen and (max-width: 767px) {
+ .ping-pong > div {
+ flex: 1 0 100%;
+ }
+}
+
+.field--name-field-ping-pong-cta a {
+ background: rgba(255, 255, 255, 0.66);
+ padding: 10px 20px;
+ border-radius: 10px;
+ transition: background .5s ease;
+ cursor: pointer;
+}
+
+.field--name-field-ping-pong-cta a:hover {
+ background: white;
+}
+
+/** slider styles */
+.ping-pong .slide img {
+ width: 100%;
+ object-fit: cover;
+ display: block;
+ height: 400px;
+}
+
+.ping-pong .slide.active img {
+ display: block;
+ opacity: 1;
+ visibility: visible;
+ transition: all .5s ease-in-out;
+}
+
+.ping-pong .slide.hide img {
+ opacity: 0;
+ visibility: hidden;
+ transition: all .5s ease-in-out;
+}
+
+.ping-pong .slide img {
+ display: none;
+ visibility: hidden;
+ opacity: 0;
+ transition: all .5s ease-in-out;
+}
+
+.ping-pong ul.slides {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ max-height: 100%;
+}
diff --git a/web/modules/custom/dc_components/components/ping-pong/ping-pong.js b/web/modules/custom/dc_components/components/ping-pong/ping-pong.js
new file mode 100644
index 0000000..a71d75f
--- /dev/null
+++ b/web/modules/custom/dc_components/components/ping-pong/ping-pong.js
@@ -0,0 +1,38 @@
+(function (Drupal, once) {
+ Drupal.behaviors.pingPongSlider = {
+
+ attach: function (context, settings) {
+ let sliders = once('pingPongSlider', '.slider', context);
+ sliders.forEach((slider) => {
+ // get the slides
+ let slides = slider.querySelectorAll('.slide');
+ slides[0].classList.add("active");
+ if (slides.length <= 1) {
+ return;
+ }
+ changeSlide(slider);
+ });
+
+ function changeSlide(sliderDiv, loop = 1) {
+ setTimeout(() => {
+ let slideCount = sliderDiv.querySelectorAll('.slide').length;
+ let activeSlide = sliderDiv.querySelector('.slide.active');
+ let nextSlide = activeSlide.nextElementSibling;
+ if (loop == slideCount) {
+ nextSlide = sliderDiv.querySelectorAll('.slide')[0];
+ return;
+ // get the first slide
+ }
+ else {
+ loop++;
+ activeSlide.classList.toggle('active');
+ nextSlide.classList.toggle('active');
+ changeSlide(sliderDiv, loop);
+ }
+ }, 10000);
+ }
+ }
+
+ };
+})(Drupal, once);
+
diff --git a/web/modules/custom/dc_components/components/ping-pong/ping-pong.twig b/web/modules/custom/dc_components/components/ping-pong/ping-pong.twig
new file mode 100644
index 0000000..54b3575
--- /dev/null
+++ b/web/modules/custom/dc_components/components/ping-pong/ping-pong.twig
@@ -0,0 +1,40 @@
+{#
+ * Component variables
+ *
+ * props:
+ * layout
+ * media_alignment
+ * background_color
+ *
+ * slots
+ * headline
+ * body
+ * cta
+ * media
+ *
+ #}
+{% set classes = [
+ 'ping-pong',
+ mediaAlign|clean_class
+] %}
+
+ {{ title_prefix }}
+ {{ title_suffix }}
+
+ {% block media %}{% endblock %}
+
+
+
+
+ {% block headline %}{% endblock %}
+
+
+ {% block body %}{% endblock %}
+
+
+ {% block cta %}{% endblock %}
+
+
+
+
+
diff --git a/web/modules/custom/dc_components/config/install/block_content.type.ping_pong.yml b/web/modules/custom/dc_components/config/install/block_content.type.ping_pong.yml
new file mode 100644
index 0000000..f5a91da
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/block_content.type.ping_pong.yml
@@ -0,0 +1,8 @@
+uuid: 62221ff8-bff9-4615-b8b1-b5387c5c5fb8
+langcode: en
+status: true
+dependencies: { }
+id: ping_pong
+label: 'Ping Pong'
+revision: false
+description: 'A ping pong component.'
diff --git a/web/modules/custom/dc_components/config/install/core.entity_form_display.block_content.ping_pong.default.yml b/web/modules/custom/dc_components/config/install/core.entity_form_display.block_content.ping_pong.default.yml
new file mode 100644
index 0000000..213cd43
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/core.entity_form_display.block_content.ping_pong.default.yml
@@ -0,0 +1,66 @@
+uuid: cec1a040-81f5-465e-93b0-7f8c1b329a3b
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.field.block_content.ping_pong.field_ping_pong_background_color
+ - field.field.block_content.ping_pong.field_ping_pong_body
+ - field.field.block_content.ping_pong.field_ping_pong_cta
+ - field.field.block_content.ping_pong.field_ping_pong_layout
+ - field.field.block_content.ping_pong.field_ping_pong_media_alignment
+ - field.field.block_content.ping_pong.field_ping_pong_media_items
+ module:
+ - color_field
+ - link
+ - media_library
+ - text
+id: block_content.ping_pong.default
+targetEntityType: block_content
+bundle: ping_pong
+mode: default
+content:
+ field_ping_pong_background_color:
+ type: color_field_widget_box
+ weight: 1
+ region: content
+ settings:
+ default_colors: '#ac725e,#d06b64,#f83a22,#fa573c,#ff7537,#ffad46,#42d692,#16a765,#7bd148,#b3dc6c,#fbe983'
+ third_party_settings: { }
+ field_ping_pong_body:
+ type: text_textarea
+ weight: 5
+ region: content
+ settings:
+ rows: 5
+ placeholder: ''
+ third_party_settings: { }
+ field_ping_pong_cta:
+ type: link_default
+ weight: 26
+ region: content
+ settings:
+ placeholder_url: ''
+ placeholder_title: ''
+ third_party_settings: { }
+ field_ping_pong_layout:
+ type: options_select
+ weight: 2
+ region: content
+ settings: { }
+ third_party_settings: { }
+ field_ping_pong_media_alignment:
+ type: options_select
+ weight: 3
+ region: content
+ settings: { }
+ third_party_settings: { }
+ field_ping_pong_media_items:
+ type: media_library_widget
+ weight: 4
+ region: content
+ settings:
+ media_types: { }
+ third_party_settings: { }
+hidden:
+ info: true
diff --git a/web/modules/custom/dc_components/config/install/core.entity_view_display.block_content.ping_pong.default.yml b/web/modules/custom/dc_components/config/install/core.entity_view_display.block_content.ping_pong.default.yml
new file mode 100644
index 0000000..1623603
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/core.entity_view_display.block_content.ping_pong.default.yml
@@ -0,0 +1,75 @@
+uuid: ed5314c0-a437-46a6-8f0a-8a09370c01b2
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.field.block_content.ping_pong.field_ping_pong_background_color
+ - field.field.block_content.ping_pong.field_ping_pong_body
+ - field.field.block_content.ping_pong.field_ping_pong_cta
+ - field.field.block_content.ping_pong.field_ping_pong_layout
+ - field.field.block_content.ping_pong.field_ping_pong_media_alignment
+ - field.field.block_content.ping_pong.field_ping_pong_media_items
+ module:
+ - color_field
+ - link
+ - options
+ - text
+id: block_content.ping_pong.default
+targetEntityType: block_content
+bundle: ping_pong
+mode: default
+content:
+ field_ping_pong_background_color:
+ type: color_field_formatter_text
+ label: hidden
+ settings:
+ format: hex
+ opacity: true
+ third_party_settings: { }
+ weight: 5
+ region: content
+ field_ping_pong_body:
+ type: text_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 6
+ region: content
+ field_ping_pong_cta:
+ type: link
+ label: hidden
+ settings:
+ trim_length: 80
+ url_only: false
+ url_plain: false
+ rel: ''
+ target: ''
+ third_party_settings: { }
+ weight: 11
+ region: content
+ field_ping_pong_layout:
+ type: list_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 8
+ region: content
+ field_ping_pong_media_alignment:
+ type: list_default
+ label: hidden
+ settings: { }
+ third_party_settings: { }
+ weight: 9
+ region: content
+ field_ping_pong_media_items:
+ type: entity_reference_entity_view
+ label: hidden
+ settings:
+ view_mode: ping_pong
+ link: false
+ third_party_settings: { }
+ weight: 10
+ region: content
+hidden:
+ search_api_excerpt: true
diff --git a/web/modules/custom/dc_components/config/install/core.entity_view_display.media.image.ping_pong.yml b/web/modules/custom/dc_components/config/install/core.entity_view_display.media.image.ping_pong.yml
new file mode 100644
index 0000000..a1c40e4
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/core.entity_view_display.media.image.ping_pong.yml
@@ -0,0 +1,40 @@
+uuid: ad80e641-9853-4131-9802-0394aa966e30
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.media.ping_pong
+ - field.field.media.image.field_media_image
+ - image.style.large
+ - media.type.image
+ module:
+ - image
+ - layout_builder
+third_party_settings:
+ layout_builder:
+ enabled: false
+ allow_custom: false
+_core:
+ default_config_hash: 73xaTNkI5J6sfFcBmNYeuk070X3mQS_iwwWaPYyfG2M
+id: media.image.ping_pong
+targetEntityType: media
+bundle: image
+mode: ping_pong
+content:
+ field_media_image:
+ type: image
+ label: visually_hidden
+ settings:
+ image_link: ''
+ image_style: large
+ image_loading:
+ attribute: lazy
+ third_party_settings: { }
+ weight: 1
+ region: content
+hidden:
+ created: true
+ name: true
+ search_api_excerpt: true
+ thumbnail: true
+ uid: true
diff --git a/web/modules/custom/dc_components/config/install/core.entity_view_display.media.video.ping_pong.yml b/web/modules/custom/dc_components/config/install/core.entity_view_display.media.video.ping_pong.yml
new file mode 100644
index 0000000..9af3993
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/core.entity_view_display.media.video.ping_pong.yml
@@ -0,0 +1,42 @@
+uuid: fd852e6e-b857-45f5-9ff9-125ab5611d51
+langcode: en
+status: true
+dependencies:
+ config:
+ - core.entity_view_mode.media.ping_pong
+ - field.field.media.video.field_media_video_file
+ - media.type.video
+ module:
+ - file
+ - layout_builder
+third_party_settings:
+ layout_builder:
+ enabled: false
+ allow_custom: false
+_core:
+ default_config_hash: SxvbuGh-6cQMxl9bBV27-hGI46u7ZvwlMm5ObaJMNnw
+id: media.video.ping_pong
+targetEntityType: media
+bundle: video
+mode: ping_pong
+content:
+ field_media_video_file:
+ type: file_video
+ label: visually_hidden
+ settings:
+ controls: true
+ autoplay: false
+ loop: false
+ multiple_file_display_type: tags
+ muted: false
+ width: 640
+ height: 480
+ third_party_settings: { }
+ weight: 0
+ region: content
+hidden:
+ created: true
+ name: true
+ search_api_excerpt: true
+ thumbnail: true
+ uid: true
diff --git a/web/modules/custom/dc_components/config/install/core.entity_view_mode.media.ping_pong.yml b/web/modules/custom/dc_components/config/install/core.entity_view_mode.media.ping_pong.yml
new file mode 100644
index 0000000..fcadce4
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/core.entity_view_mode.media.ping_pong.yml
@@ -0,0 +1,11 @@
+uuid: 3907b7a9-1d74-4907-bcd5-ec4cc1071ed2
+langcode: en
+status: true
+dependencies:
+ module:
+ - media
+id: media.ping_pong
+label: 'Ping Pong'
+description: ''
+targetEntityType: media
+cache: true
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_background_color.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_background_color.yml
new file mode 100644
index 0000000..eeab7c8
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_background_color.yml
@@ -0,0 +1,22 @@
+uuid: 31cd8a2a-3bdf-43cd-9a64-43282c7e94be
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_background_color
+ module:
+ - color_field
+id: block_content.ping_pong.field_ping_pong_background_color
+field_name: field_ping_pong_background_color
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Background Color'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ opacity: 0
+field_type: color_field_type
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_body.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_body.yml
new file mode 100644
index 0000000..1ce59d1
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_body.yml
@@ -0,0 +1,22 @@
+uuid: 943e8d34-238f-4de9-9196-87ed7785bf74
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_body
+ module:
+ - text
+id: block_content.ping_pong.field_ping_pong_body
+field_name: field_ping_pong_body
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Body'
+description: 'The body text of the ping pong.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ allowed_formats: { }
+field_type: text_long
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_cta.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_cta.yml
new file mode 100644
index 0000000..d7e3e65
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_cta.yml
@@ -0,0 +1,23 @@
+uuid: 03279c7a-a355-4a6e-b9ad-b6c051d97963
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_cta
+ module:
+ - link
+id: block_content.ping_pong.field_ping_pong_cta
+field_name: field_ping_pong_cta
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong CTA'
+description: 'CTA Link for the ping pong item.'
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ title: 1
+ link_type: 17
+field_type: link
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_layout.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_layout.yml
new file mode 100644
index 0000000..d51e8d1
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_layout.yml
@@ -0,0 +1,21 @@
+uuid: 71d04346-f3b6-4b11-ac4f-98cd5ad14b35
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_layout
+ module:
+ - options
+id: block_content.ping_pong.field_ping_pong_layout
+field_name: field_ping_pong_layout
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Layout'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: list_string
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml
new file mode 100644
index 0000000..b072e75
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_alignment.yml
@@ -0,0 +1,21 @@
+uuid: 00c6c95a-5f80-45c8-ab83-deecd252ce32
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_media_alignment
+ module:
+ - options
+id: block_content.ping_pong.field_ping_pong_media_alignment
+field_name: field_ping_pong_media_alignment
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Media Alignment'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings: { }
+field_type: list_string
diff --git a/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_items.yml b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_items.yml
new file mode 100644
index 0000000..49449cb
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.field.block_content.ping_pong.field_ping_pong_media_items.yml
@@ -0,0 +1,31 @@
+uuid: 207b28f1-37af-4c91-9cb1-d75d76ab2277
+langcode: en
+status: true
+dependencies:
+ config:
+ - block_content.type.ping_pong
+ - field.storage.block_content.field_ping_pong_media_items
+ - media.type.image
+ - media.type.video
+id: block_content.ping_pong.field_ping_pong_media_items
+field_name: field_ping_pong_media_items
+entity_type: block_content
+bundle: ping_pong
+label: 'Ping Pong Media Items'
+description: ''
+required: false
+translatable: false
+default_value: { }
+default_value_callback: ''
+settings:
+ handler: 'default:media'
+ handler_settings:
+ target_bundles:
+ image: image
+ video: video
+ sort:
+ field: _none
+ direction: ASC
+ auto_create: false
+ auto_create_bundle: image
+field_type: entity_reference
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_background_color.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_background_color.yml
new file mode 100644
index 0000000..8e2a1e9
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_background_color.yml
@@ -0,0 +1,20 @@
+uuid: 2c91aadc-de94-4014-80b0-0165cb294d7e
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - color_field
+id: block_content.field_ping_pong_background_color
+field_name: field_ping_pong_background_color
+entity_type: block_content
+type: color_field_type
+settings:
+ format: '#HEXHEX'
+module: color_field
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_body.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_body.yml
new file mode 100644
index 0000000..0d9882c
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_body.yml
@@ -0,0 +1,19 @@
+uuid: 251a77bd-a105-4525-b528-0d1acdb5dea0
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - text
+id: block_content.field_ping_pong_body
+field_name: field_ping_pong_body
+entity_type: block_content
+type: text_long
+settings: { }
+module: text
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_cta.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_cta.yml
new file mode 100644
index 0000000..2572b8b
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_cta.yml
@@ -0,0 +1,19 @@
+uuid: 5f9b0f7a-f3ed-4b92-9558-d02846914aff
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - link
+id: block_content.field_ping_pong_cta
+field_name: field_ping_pong_cta
+entity_type: block_content
+type: link
+settings: { }
+module: link
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_layout.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_layout.yml
new file mode 100644
index 0000000..09538d0
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_layout.yml
@@ -0,0 +1,36 @@
+uuid: cb0cf63f-b12d-42a4-9ad8-151a6b45e5c4
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - options
+id: block_content.field_ping_pong_layout
+field_name: field_ping_pong_layout
+entity_type: block_content
+type: list_string
+settings:
+ allowed_values:
+ -
+ value: '50_50'
+ label: 50-50
+ -
+ value: '67_33'
+ label: 67-33
+ -
+ value: '33_67'
+ label: 33-67
+ -
+ value: '25_75'
+ label: 25-75
+ -
+ value: '75_25'
+ label: 75-25
+ allowed_values_function: ''
+module: options
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_alignment.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_alignment.yml
new file mode 100644
index 0000000..88cf565
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_alignment.yml
@@ -0,0 +1,27 @@
+uuid: 5aad3453-4210-45e5-a891-949efed0792c
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - options
+id: block_content.field_ping_pong_media_alignment
+field_name: field_ping_pong_media_alignment
+entity_type: block_content
+type: list_string
+settings:
+ allowed_values:
+ -
+ value: left
+ label: Left
+ -
+ value: right
+ label: Right
+ allowed_values_function: ''
+module: options
+locked: false
+cardinality: 1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_items.yml b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_items.yml
new file mode 100644
index 0000000..1def439
--- /dev/null
+++ b/web/modules/custom/dc_components/config/install/field.storage.block_content.field_ping_pong_media_items.yml
@@ -0,0 +1,20 @@
+uuid: ced369f0-c81f-44c2-9715-c80f73ba58ae
+langcode: en
+status: true
+dependencies:
+ module:
+ - block_content
+ - media
+id: block_content.field_ping_pong_media_items
+field_name: field_ping_pong_media_items
+entity_type: block_content
+type: entity_reference
+settings:
+ target_type: media
+module: core
+locked: false
+cardinality: -1
+translatable: true
+indexes: { }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/web/modules/custom/dc_components/dc_components.info.yml b/web/modules/custom/dc_components/dc_components.info.yml
new file mode 100644
index 0000000..7c56f85
--- /dev/null
+++ b/web/modules/custom/dc_components/dc_components.info.yml
@@ -0,0 +1,5 @@
+name: DC Component Library
+description: 'Components for use on a site.'
+type: module
+package: custom
+core_version_requirement: ^10.3 || ^11
diff --git a/web/modules/custom/dc_components/dc_components.libraries.yml b/web/modules/custom/dc_components/dc_components.libraries.yml
new file mode 100644
index 0000000..0201f4e
--- /dev/null
+++ b/web/modules/custom/dc_components/dc_components.libraries.yml
@@ -0,0 +1,12 @@
+swiffy:
+ theme:
+ css:
+ libraries/swiffy-slider.min.css: { minified: true }
+ js:
+ libraries/swiffy-slider.min.js: { minified: true }
+glide:
+ theme:
+ css:
+ libraries/glide.core.min.css: { minified: true }
+ js:
+ libraries/glide.min.js: { minified: true }
diff --git a/web/modules/custom/dc_components/dc_components.module b/web/modules/custom/dc_components/dc_components.module
new file mode 100644
index 0000000..7ac9c67
--- /dev/null
+++ b/web/modules/custom/dc_components/dc_components.module
@@ -0,0 +1,17 @@
+ [
+ 'render element' => 'elements',
+ 'base hook' => 'block',
+ ],
+ 'field__block_content__field_ping_pong_media_items__ping_pong' => [
+ 'render element' => 'elements',
+ 'base hook' => 'field'
+ ]
+ ];
+}
diff --git a/web/modules/custom/dc_components/libraries/glide.core.min.css b/web/modules/custom/dc_components/libraries/glide.core.min.css
new file mode 100644
index 0000000..4f611b3
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/glide.core.min.css
@@ -0,0 +1 @@
+.glide{position:relative;width:100%;box-sizing:border-box}.glide *{box-sizing:inherit}.glide__track{overflow:hidden}.glide__slides{position:relative;width:100%;list-style:none;backface-visibility:hidden;transform-style:preserve-3d;touch-action:pan-Y;overflow:hidden;margin:0;padding:0;white-space:nowrap;display:flex;flex-wrap:nowrap;will-change:transform}.glide__slides--dragging{user-select:none}.glide__slide{width:100%;height:100%;flex-shrink:0;white-space:normal;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.glide__slide a{user-select:none;-webkit-user-drag:none;-moz-user-select:none;-ms-user-select:none}.glide__arrows{-webkit-touch-callout:none;user-select:none}.glide__bullets{-webkit-touch-callout:none;user-select:none}.glide--rtl{direction:rtl}/*# sourceMappingURL=glide.core.min.css.map */
diff --git a/web/modules/custom/dc_components/libraries/glide.min.js b/web/modules/custom/dc_components/libraries/glide.min.js
new file mode 100644
index 0000000..7f38c67
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/glide.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Glide.js v3.6.2
+ * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)
+ * Released under the MIT License.
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Glide=e()}(this,(function(){"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function e(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),this.events=e,this.hop=e.hasOwnProperty}return o(t,[{key:"on",value:function(t,e){if(!w(t)){this.hop.call(this.events,t)||(this.events[t]=[]);var n=this.events[t].push(e)-1;return{remove:function(){delete this.events[t][n]}}}for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};i(this,t),this._c={},this._t=[],this._e=new O,this.disabled=!1,this.selector=e,this.settings=S(h,n),this.index=this.settings.startAt}return o(t,[{key:"mount",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this._e.emit("mount.before"),g(t)?this._c=_(this,t,this._e):v("You need to provide a object on `mount()`"),this._e.emit("mount.after"),this}},{key:"mutate",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return w(t)?this._t=t:v("You need to provide a array on `mutate()`"),this}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.settings=S(this.settings,t),t.hasOwnProperty("startAt")&&(this.index=t.startAt),this._e.emit("update"),this}},{key:"go",value:function(t){return this._c.Run.make(t),this}},{key:"move",value:function(t){return this._c.Transition.disable(),this._c.Move.make(t),this}},{key:"destroy",value:function(){return this._e.emit("destroy"),this}},{key:"play",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t&&(this.settings.autoplay=t),this._e.emit("play"),this}},{key:"pause",value:function(){return this._e.emit("pause"),this}},{key:"disable",value:function(){return this.disabled=!0,this}},{key:"enable",value:function(){return this.disabled=!1,this}},{key:"on",value:function(t,e){return this._e.on(t,e),this}},{key:"isType",value:function(t){return this.settings.type===t}},{key:"settings",get:function(){return this._o},set:function(t){g(t)?this._o=t:v("Options must be an `object` instance.")}},{key:"index",get:function(){return this._i},set:function(t){this._i=p(t)}},{key:"type",get:function(){return this.settings.type}},{key:"disabled",get:function(){return this._d},set:function(t){this._d=!!t}}]),t}();function T(){return(new Date).getTime()}function x(t,e){var n,i,r,o,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},u=0,a=function(){u=!1===s.leading?0:T(),n=null,o=t.apply(i,r),n||(i=r=null)},c=function(){var c=T();u||!1!==s.leading||(u=c);var l=e-(c-u);return i=this,r=arguments,l<=0||l>e?(n&&(clearTimeout(n),n=null),u=c,o=t.apply(i,r),n||(i=r=null)):n||!1===s.trailing||(n=setTimeout(a,l)),o};return c.cancel=function(){clearTimeout(n),u=0,n=i=r=null},c}var j={ltr:["marginLeft","marginRight"],rtl:["marginRight","marginLeft"]};function A(t){if(t&&t.parentNode){for(var e=t.parentNode.firstChild,n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}return[]}function P(t){return Array.prototype.slice.call(t)}var R=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),this.listeners=e}return o(t,[{key:"on",value:function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];m(t)&&(t=[t]);for(var r=0;r2&&void 0!==arguments[2]&&arguments[2];m(t)&&(t=[t]);for(var i=0;i":"<","<":">","=":"="};function z(t,e){return{modify:function(t){return e.Direction.is("rtl")?-t:t}}}function C(t,e){return{modify:function(t){var n=Math.floor(t/e.Sizes.slideWidth);return t+e.Gaps.value*n}}}function M(t,e){return{modify:function(t){return t+e.Clones.grow/2}}}function D(t,e){return{modify:function(n){if(t.settings.focusAt>=0){var i=e.Peek.value;return g(i)?n-i.before:n-i}return n}}}function B(t,e){return{modify:function(n){var i=e.Gaps.value,r=e.Sizes.width,o=t.settings.focusAt,s=e.Sizes.slideWidth;return"center"===o?n-(r/2-s/2):n-s*o-i*o}}}var W=!1;try{var q=Object.defineProperty({},"passive",{get:function(){W=!0}});window.addEventListener("testPassive",null,q),window.removeEventListener("testPassive",null,q)}catch(t){}var I=W,V=["touchstart","mousedown"],G=["touchmove","mousemove"],F=["touchend","touchcancel","mouseup","mouseleave"],N=["mousedown","mousemove","mouseup","mouseleave"];var Y='[data-glide-el^="controls"]',X="".concat(Y,' [data-glide-dir*="<"]'),K="".concat(Y,' [data-glide-dir*=">"]');function J(t){return g(t)?(e=t,Object.keys(e).sort().reduce((function(t,n){return t[n]=e[n],t[n],t}),{})):(v("Breakpoints option must be an object"),{});var e}var Q={Html:function(t,e,n){var i={mount:function(){this.root=t.selector,this.track=this.root.querySelector('[data-glide-el="track"]'),this.collectSlides()},collectSlides:function(){this.slides=P(this.wrapper.children).filter((function(e){return!e.classList.contains(t.settings.classes.slide.clone)}))}};return k(i,"root",{get:function(){return i._r},set:function(t){m(t)&&(t=document.querySelector(t)),null!==t?i._r=t:v("Root element must be a existing Html node")}}),k(i,"track",{get:function(){return i._t},set:function(t){i._t=t}}),k(i,"wrapper",{get:function(){return i.track.children[0]}}),n.on("update",(function(){i.collectSlides()})),i},Translate:function(t,e,n){var i={set:function(n){var i=function(t,e,n){var i=[C,M,D,B].concat(t._t,[z]);return{mutate:function(r){for(var o=0;o")||e.Run.isOffset("|>")?n+(i-r):(i+r)%n},getTravelDistance:function(){var n=e.Sizes.slideWidth*t.settings.perView;return e.Run.isOffset(">")||e.Run.isOffset("|>")?-1*n:n}};return n.on("move",(function(r){if(!t.isType("carousel")||!e.Run.isOffset())return i.set(r.movement);e.Transition.after((function(){n.emit("translate.jump"),i.set(e.Sizes.slideWidth*t.index)}));var o=e.Sizes.slideWidth*e.Translate.getStartIndex();return i.set(o-e.Translate.getTravelDistance())})),n.on("destroy",(function(){i.remove()})),i},Transition:function(t,e,n){var i=!1,r={compose:function(e){var n=t.settings;return i?"".concat(e," 0ms ").concat(n.animationTimingFunc):"".concat(e," ").concat(this.duration,"ms ").concat(n.animationTimingFunc)},set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"transform";e.Html.wrapper.style.transition=this.compose(t)},remove:function(){e.Html.wrapper.style.transition=""},after:function(t){setTimeout((function(){t()}),this.duration)},enable:function(){i=!1,this.set()},disable:function(){i=!0,this.set()}};return k(r,"duration",{get:function(){var n=t.settings;return t.isType("slider")&&e.Run.offset?n.rewindDuration:n.animationDuration}}),n.on("move",(function(){r.set()})),n.on(["build.before","resize","translate.jump"],(function(){r.disable()})),n.on("run",(function(){r.enable()})),n.on("destroy",(function(){r.remove()})),r},Direction:function(t,e,n){var i={mount:function(){this.value=t.settings.direction},resolve:function(t){var e=t.slice(0,1);return this.is("rtl")?t.split(e).join(L[e]):t},is:function(t){return this.value===t},addClass:function(){e.Html.root.classList.add(t.settings.classes.direction[this.value])},removeClass:function(){e.Html.root.classList.remove(t.settings.classes.direction[this.value])}};return k(i,"value",{get:function(){return i._v},set:function(t){E.indexOf(t)>-1?i._v=t:v("Direction value must be `ltr` or `rtl`")}}),n.on(["destroy","update"],(function(){i.removeClass()})),n.on("update",(function(){i.mount()})),n.on(["build.before","update"],(function(){i.addClass()})),i},Peek:function(t,e,n){var i={mount:function(){this.value=t.settings.peek}};return k(i,"value",{get:function(){return i._v},set:function(t){g(t)?(t.before=p(t.before),t.after=p(t.after)):t=p(t),i._v=t}}),k(i,"reductor",{get:function(){var e=i.value,n=t.settings.perView;return g(e)?e.before/n+e.after/n:2*e/n}}),n.on(["resize","update"],(function(){i.mount()})),i},Sizes:function(t,e,n){var i={setupSlides:function(){for(var t="".concat(this.slideWidth,"px"),n=e.Html.slides,i=0;i0&&void 0!==arguments[0]?arguments[0]:0;this.offset=i,n.emit("move",{movement:this.value}),e.Transition.after((function(){n.emit("move.after",{movement:t.value})}))}};return k(i,"offset",{get:function(){return i._o},set:function(t){i._o=b(t)?0:p(t)}}),k(i,"translate",{get:function(){return e.Sizes.slideWidth*t.index}}),k(i,"value",{get:function(){var t=this.offset,n=this.translate;return e.Direction.is("rtl")?n+t:n-t}}),n.on(["build.before","run"],(function(){i.make()})),i},Clones:function(t,e,n){var i={mount:function(){this.items=[],t.isType("carousel")&&(this.items=this.collect())},collect:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],i=e.Html.slides,r=t.settings,o=r.perView,s=r.classes,u=r.cloningRatio;if(i.length>0)for(var a=+!!t.settings.peek,c=o+a+Math.round(o/2),l=i.slice(0,c).reverse(),f=i.slice(-1*c),d=0;dn?void(t.index=n):void(t.index=r);if(">"!==o||">"!==r)if("<"!==o||"<"!==r){if("|"===o&&(s=t.settings.perView||1),">"===o||"|"===o&&">"===r){var u=function(e){var n=t.index;if(t.isType("carousel"))return n+e;return n+(e-n%e)}(s);return u>n&&(this._o=!0),void(t.index=function(e,n){var r=i.length;if(e<=r)return e;if(t.isType("carousel"))return e-(r+1);if(t.settings.rewind)return i.isBound()&&!i.isEnd()?r:0;if(i.isBound())return r;return Math.floor(r/n)*n}(u,s))}if("<"===o||"|"===o&&"<"===r){var a=function(e){var n=t.index;if(t.isType("carousel"))return n-e;return(Math.ceil(n/e)-1)*e}(s);return a<0&&(this._o=!0),void(t.index=function(e,n){var r=i.length;if(e>=0)return e;if(t.isType("carousel"))return e+(r+1);if(t.settings.rewind)return i.isBound()&&i.isStart()?r:Math.floor(r/n)*n;return 0}(a,s))}v("Invalid direction pattern [".concat(o).concat(r,"] has been used"))}else t.index=0;else t.index=n},isStart:function(){return t.index<=0},isEnd:function(){return t.index>=this.length},isOffset:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;return t?!!this._o&&("|>"===t?"|"===this.move.direction&&">"===this.move.steps:"|<"===t?"|"===this.move.direction&&"<"===this.move.steps:this.move.direction===t):this._o},isBound:function(){return t.isType("slider")&&"center"!==t.settings.focusAt&&t.settings.bound}};return k(i,"move",{get:function(){return this._m},set:function(t){var e=t.substr(1);this._m={direction:t.substr(0,1),steps:e?p(e)?p(e):e:0}}}),k(i,"length",{get:function(){var n=t.settings,i=e.Html.slides.length;return this.isBound()?i-1-(p(n.perView)-1)+p(n.focusAt):i-1}}),k(i,"offset",{get:function(){return this._o}}),i},Swipe:function(t,e,n){var i=new R,r=0,o=0,s=0,u=!1,a=!!I&&{passive:!0},c={mount:function(){this.bindSwipeStart()},start:function(e){if(!u&&!t.disabled){this.disable();var i=this.touches(e);r=null,o=p(i.pageX),s=p(i.pageY),this.bindSwipeMove(),this.bindSwipeEnd(),n.emit("swipe.start")}},move:function(i){if(!t.disabled){var u=t.settings,a=u.touchAngle,c=u.touchRatio,l=u.classes,f=this.touches(i),d=p(f.pageX)-o,h=p(f.pageY)-s,v=Math.abs(d<<2),m=Math.abs(h<<2),g=Math.sqrt(v+m),y=Math.sqrt(m);if(!(180*(r=Math.asin(y/g))/Math.PIf&&h"))):e.Move.make(),e.Html.root.classList.remove(c.dragging),this.unbindSwipeMove(),this.unbindSwipeEnd(),n.emit("swipe.end")}},bindSwipeStart:function(){var n=this,r=t.settings,o=r.swipeThreshold,s=r.dragThreshold;o&&i.on(V[0],e.Html.wrapper,(function(t){n.start(t)}),a),s&&i.on(V[1],e.Html.wrapper,(function(t){n.start(t)}),a)},unbindSwipeStart:function(){i.off(V[0],e.Html.wrapper,a),i.off(V[1],e.Html.wrapper,a)},bindSwipeMove:function(){var n=this;i.on(G,e.Html.wrapper,x((function(t){n.move(t)}),t.settings.throttle),a)},unbindSwipeMove:function(){i.off(G,e.Html.wrapper,a)},bindSwipeEnd:function(){var t=this;i.on(F,e.Html.wrapper,(function(e){t.end(e)}))},unbindSwipeEnd:function(){i.off(F,e.Html.wrapper)},touches:function(t){return N.indexOf(t.type)>-1?t:t.touches[0]||t.changedTouches[0]},threshold:function(e){var n=t.settings;return N.indexOf(e.type)>-1?n.dragThreshold:n.swipeThreshold},enable:function(){return u=!1,e.Transition.enable(),this},disable:function(){return u=!0,e.Transition.disable(),this}};return n.on("build.after",(function(){e.Html.root.classList.add(t.settings.classes.swipeable)})),n.on("destroy",(function(){c.unbindSwipeStart(),c.unbindSwipeMove(),c.unbindSwipeEnd(),i.destroy()})),c},Images:function(t,e,n){var i=new R,r={mount:function(){this.bind()},bind:function(){i.on("dragstart",e.Html.wrapper,this.dragstart)},unbind:function(){i.off("dragstart",e.Html.wrapper)},dragstart:function(t){t.preventDefault()}};return n.on("destroy",(function(){r.unbind(),i.destroy()})),r},Anchors:function(t,e,n){var i=new R,r=!1,o=!1,s={mount:function(){this._a=e.Html.wrapper.querySelectorAll("a"),this.bind()},bind:function(){i.on("click",e.Html.wrapper,this.click)},unbind:function(){i.off("click",e.Html.wrapper)},click:function(t){o&&(t.stopPropagation(),t.preventDefault())},detach:function(){if(o=!0,!r){for(var t=0;t",ArrowLeft:"<"}[n.code])))}};return n.on(["destroy","update"],(function(){r.unbind()})),n.on("update",(function(){r.mount()})),n.on("destroy",(function(){i.destroy()})),r},Autoplay:function(t,e,n){var i=new R,r={mount:function(){this.enable(),this.start(),t.settings.hoverpause&&this.bind()},enable:function(){this._e=!0},disable:function(){this._e=!1},start:function(){var i=this;this._e&&(this.enable(),t.settings.autoplay&&b(this._i)&&(this._i=setInterval((function(){i.stop(),e.Run.make(">"),i.start(),n.emit("autoplay")}),this.time)))},stop:function(){this._i=clearInterval(this._i)},bind:function(){var t=this;i.on("mouseover",e.Html.root,(function(){t._e&&t.stop()})),i.on("mouseout",e.Html.root,(function(){t._e&&t.start()}))},unbind:function(){i.off(["mouseover","mouseout"],e.Html.root)}};return k(r,"time",{get:function(){var n=e.Html.slides[t.index].getAttribute("data-glide-autoplay");return p(n||t.settings.autoplay)}}),n.on(["destroy","update"],(function(){r.unbind()})),n.on(["run.before","swipe.start","update"],(function(){r.stop()})),n.on(["pause","destroy"],(function(){r.disable(),r.stop()})),n.on(["run.after","swipe.end"],(function(){r.start()})),n.on(["play"],(function(){r.enable(),r.start()})),n.on("update",(function(){r.mount()})),n.on("destroy",(function(){i.destroy()})),r},Breakpoints:function(t,e,n){var i=new R,r=t.settings,o=J(r.breakpoints),s=Object.assign({},r),u={match:function(t){if(void 0!==window.matchMedia)for(var e in t)if(t.hasOwnProperty(e)&&window.matchMedia("(max-width: ".concat(e,"px)")).matches)return t[e];return s}};return Object.assign(r,u.match(o)),i.on("resize",window,x((function(){t.settings=S(r,u.match(o))}),t.settings.throttle)),n.on("update",(function(){o=J(o),s=Object.assign({},r)})),n.on("destroy",(function(){i.off("resize",window)})),u}},U=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&a(t,e)}(n,t);var e=l(n);function n(){return i(this,n),e.apply(this,arguments)}return o(n,[{key:"mount",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return d(u(n.prototype),"mount",this).call(this,Object.assign({},Q,t))}}]),n}(H);return U}));
diff --git a/web/modules/custom/dc_components/libraries/swiffy-slider.min.css b/web/modules/custom/dc_components/libraries/swiffy-slider.min.css
new file mode 100644
index 0000000..2844d3c
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/swiffy-slider.min.css
@@ -0,0 +1,2 @@
+.swiffy-slider{position:relative;display:block;width:100%;--swiffy-slider-snap-align:center;--swiffy-slider-item-width:100%;--swiffy-slider-item-gap:1rem;--swiffy-slider-item-reveal:0rem;--swiffy-slider-item-ratio:2/1;--swiffy-slider-item-count:1;--swiffy-slider-nav-light:#fff;--swiffy-slider-nav-dark:#333;--swiffy-slider-nav-zoom:1;--swiffy-slider-track-opacity:0.1;--swiffy-slider-track-height:0;--swiffy-slider-nav-outside-size:3.5rem;--swiffy-slider-indicator-outside-size:1.5rem;--swiffy-slider-animation-duration:.75s;--swiffy-slider-animation-delay:0s;--swiffy-slider-animation-timing:ease-in-out}.swiffy-slider,.swiffy-slider::after,.swiffy-slider::before{box-sizing:border-box}.swiffy-slider ::-webkit-scrollbar{height:var(--swiffy-slider-track-height)}.swiffy-slider ::-webkit-scrollbar-track{background:rgba(0,0,0,var(--swiffy-slider-track-opacity))}.swiffy-slider ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.4);border-radius:1rem}.swiffy-slider ::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.6)}.slider-container{--swiffy-slider-item-gap-totalwidth:calc(var(--swiffy-slider-item-gap) * (var(--swiffy-slider-item-count) - 1));--swiffy-slider-item-width:calc((100% - var(--swiffy-slider-item-reveal) - var(--swiffy-slider-item-gap-totalwidth)) / var(--swiffy-slider-item-count));overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory;scroll-behavior:smooth;display:grid;align-items:center;height:100%;grid:auto/auto-flow -webkit-max-content;grid:auto/auto-flow max-content;grid-auto-rows:100%;grid-auto-columns:var(--swiffy-slider-item-width);grid-auto-flow:column;grid-gap:var(--swiffy-slider-item-gap);list-style:none;margin:0;padding:0;scrollbar-width:none;scrollbar-color:rgba(0,0,0,.4) rgba(0,0,0,var(--swiffy-slider-track-opacity));background-clip:padding-box}.slider-container>*{scroll-snap-align:var(--swiffy-slider-snap-align);position:relative;width:100%;height:100%}.slider-item-helper .slider-container>*{background-size:cover;background-color:#e1e1e1;background-position:50% 50%;display:flex;justify-content:center;align-items:center}.slider-item-helper:not(.slider-item-ratio) .slider-container>*{min-height:20rem}.slider-item-ratio .slider-container>*>*{position:absolute;top:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.slider-item-ratio-contain .slider-container>*>*{-o-object-fit:contain;object-fit:contain}.slider-item-ratio .slider-container>::after{display:block;padding-top:calc(100% / (var(--swiffy-slider-item-ratio)));content:""}.slider-item-ratio-32x9{--swiffy-slider-item-ratio:32/9}.slider-item-ratio-21x9{--swiffy-slider-item-ratio:21/9}.slider-item-ratio-16x9{--swiffy-slider-item-ratio:16/9}.slider-item-ratio-4x3{--swiffy-slider-item-ratio:4/3}.slider-item-ratio-2x1{--swiffy-slider-item-ratio:2/1}.slider-item-ratio-1x1{--swiffy-slider-item-ratio:1/1}.slider-item-ratio-3x4{--swiffy-slider-item-ratio:3/4}.slider-nav-scrollbar{--swiffy-slider-track-height:0.5rem}.slider-nav-scrollbar .slider-container{scrollbar-width:thin}.slider-nav-nodelay .slider-container{scroll-behavior:auto}.slider-indicators{position:absolute;right:2rem;bottom:0;left:2rem;display:flex;justify-content:center;padding:0;margin-bottom:1rem;list-style:none}.slider-nav-scrollbar .slider-indicators{margin-bottom:calc(1rem + var(--swiffy-slider-track-height))}.slider-indicators>.active{opacity:1}.swiffy-slider.slider-indicators-outside .slider-nav{margin-bottom:var(--swiffy-slider-indicator-outside-size)}.swiffy-slider.slider-indicators-outside{padding-bottom:var(--swiffy-slider-indicator-outside-size)}.swiffy-slider.slider-indicators-outside .slider-indicators,.swiffy-slider.slider-indicators-outside.slider-indicators{margin-bottom:0}.slider-indicators>*{box-sizing:content-box;flex:0 1 auto;width:2rem;height:.2rem;padding:0;border:.4rem solid transparent;cursor:pointer;background-color:#fff;background-clip:padding-box;opacity:.5;transition:opacity .4s ease}.slider-indicators-square .slider-indicators>*,.slider-indicators-square.slider-indicators>*{width:.5rem;height:.5rem;border:.4rem solid transparent}.slider-indicators-round .slider-indicators>*,.slider-indicators-round.slider-indicators>*{width:.5rem;height:.5rem;border:.4rem solid transparent;border-radius:50%}.slider-indicators-highlight .slider-indicators>.active,.slider-indicators-highlight.slider-indicators>.active{border:.33rem solid transparent;padding:.07rem}.slider-nav{position:absolute;top:0;left:0;bottom:0;border:0;background-color:transparent;cursor:pointer;padding:0;visibility:hidden;opacity:.8;transition:visibility .1s,opacity .2s linear;margin-bottom:var(--swiffy-slider-track-height);display:flex;align-items:center;padding:0 .5rem;-webkit-filter:drop-shadow(0 0 .5rem rgba(0, 0, 0, .5));filter:drop-shadow(0 0 .5rem rgba(0, 0, 0, .5));transform:scale(var(--swiffy-slider-nav-zoom))}.slider-nav::before{position:absolute;content:"";padding:.5rem;width:3rem;height:3rem}.slider-nav::after{content:"";-webkit-mask:url("data:image/svg+xml,");mask:url("data:image/svg+xml,");-webkit-mask-size:cover;mask-size:cover;background-color:var(--swiffy-slider-nav-light);background-origin:content-box;width:3rem;height:3rem}.slider-nav-arrow .slider-nav::after{-webkit-mask:url("data:image/svg+xml,");mask:url("data:image/svg+xml,")}.slider-nav-chevron .slider-nav::after{-webkit-mask:url("data:image/svg+xml,");mask:url("data:image/svg+xml,")}.slider-nav-caret .slider-nav::after{-webkit-mask:url("data:image/svg+xml,");mask:url("data:image/svg+xml,")}.slider-nav-caretfill .slider-nav::after{-webkit-mask:url("data:image/svg+xml,");mask:url("data:image/svg+xml,")}.swiffy-slider:hover .slider-nav{visibility:visible}.swiffy-slider.slider-nav-autohide.slider-item-first-visible .slider-nav:not(.slider-nav-next){visibility:hidden}.swiffy-slider.slider-nav-autohide.slider-item-last-visible .slider-nav.slider-nav-next{visibility:hidden}.slider-nav-outside .slider-container{margin:0 var(--swiffy-slider-nav-outside-size)}.slider-nav-outside .slider-nav{padding:0}.swiffy-slider .slider-nav:hover{opacity:1}.slider-nav-square .slider-nav{padding:0}.slider-nav-round .slider-nav::before,.slider-nav-square .slider-nav::before{background-color:var(--swiffy-slider-nav-light)}.slider-nav-round .slider-nav::after,.slider-nav-square .slider-nav::after{background-color:var(--swiffy-slider-nav-dark);width:2rem;height:2rem;margin:.5rem}.slider-nav-round .slider-nav::before{border-radius:50%}.slider-nav-round .slider-nav::after{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' %3E%3Cpath fill-rule='evenodd' d='M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z'%3E%3C/path%3E%3C/svg%3E");mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' %3E%3Cpath fill-rule='evenodd' d='M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z'%3E%3C/path%3E%3C/svg%3E")}.slider-nav-dark .slider-nav::after{background-color:var(--swiffy-slider-nav-dark)}.slider-nav-dark.slider-nav-round .slider-nav::before,.slider-nav-dark.slider-nav-square .slider-nav::before{background-color:var(--swiffy-slider-nav-dark)}.slider-nav-dark.slider-nav-round .slider-nav::after,.slider-nav-dark.slider-nav-square .slider-nav::after{background-color:var(--swiffy-slider-nav-light)}.slider-nav-sm{--swiffy-slider-nav-zoom:.75;--swiffy-slider-nav-outside-size:2.5rem}.slider-nav.slider-nav-next::after{transform:rotate(180deg)}.slider-nav.slider-nav-next{right:0;left:unset}.slider-nav-visible .slider-nav{visibility:visible}.slider-nav-dark .slider-nav{opacity:.6}.slider-indicators-dark .slider-indicators>*,.slider-indicators-dark.slider-indicators>*{-webkit-filter:invert(1);filter:invert(1)}.slider-item-snapstart{--swiffy-slider-snap-align:start}.slider-item-nosnap{--swiffy-slider-snap-align:unset}.slider-item-nogap{--swiffy-slider-item-gap:0rem}.slider-item-reveal{--swiffy-slider-item-reveal:8rem}.slider-item-snapstart.slider-item-reveal{--swiffy-slider-item-reveal:4rem}.slider-item-show2{--swiffy-slider-item-count:2}.slider-item-show3{--swiffy-slider-item-count:3}.slider-item-show4{--swiffy-slider-item-count:4}.slider-item-show5{--swiffy-slider-item-count:5}.slider-item-show6{--swiffy-slider-item-count:6}.slider-nav-mousedrag .slider-container{cursor:-webkit-grab;cursor:grab}.slider-nav-mousedrag.dragging .slider-container{-ms-scroll-snap-type:unset;scroll-snap-type:unset;scroll-behavior:unset;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.slider-nav-mousedrag.dragging .slider-nav{visibility:hidden}@media (hover:hover){.slider-nav-mousedrag .slider-container::after{content:"";position:absolute;width:100%;height:100%}}@media (prefers-reduced-motion:no-preference){.slider-nav-animation.slider-nav-animation-fast{--swiffy-slider-animation-duration:.25s}.slider-nav-animation.slider-nav-animation-slow{--swiffy-slider-animation-duration:1.25s}.slider-nav-animation .slider-container>*>*{transition:opacity var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing),transform var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing);transition-delay:var(--swiffy-slider-animation-delay)}.slider-nav-animation .slider-container .slide-visible>*{transition:opacity var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing),transform var(--swiffy-slider-animation-duration) var(--swiffy-slider-animation-timing);transition-delay:var(--swiffy-slider-animation-delay)}.slider-nav-animation.slider-nav-animation-fadein .slider-container>*>*{opacity:.5}.slider-nav-animation.slider-nav-animation-scale .slider-container>*>*{transform:scale(.9)}.slider-nav-animation.slider-nav-animation-appear .slider-container>*>*{opacity:.3;transform:scale(.9)}.slider-nav-animation.slider-nav-animation-scaleup .slider-container>*>*{transform:scale(.25)}.slider-nav-animation.slider-nav-animation-zoomout .slider-container>*{overflow:hidden}.slider-nav-animation.slider-nav-animation-zoomout .slider-container>*>*{transform:scale(1.3)}.slider-nav-animation.slider-nav-animation-turn .slider-container>*>*{transform:rotateY(70deg)}.slider-nav-animation.slider-nav-animation-slideup .slider-container>*>*{transform:translateY(60%) scale(.99)}.slider-nav-animation.slider-nav-animation-slideup .slider-container{overflow-y:hidden}.slider-nav-animation .slider-container>.slide-visible>*{opacity:1;transform:none}}@media (min-width:62rem){.slider-item-show2:not(.slider-item-snapstart) .slider-container>*,.slider-item-show4:not(.slider-item-snapstart) .slider-container>*,.slider-item-show6:not(.slider-item-snapstart) .slider-container>*{scroll-snap-align:unset}.slider-item-show2:not(.slider-item-snapstart) .slider-container>::before,.slider-item-show4:not(.slider-item-snapstart) .slider-container>::before,.slider-item-show6:not(.slider-item-snapstart) .slider-container>::before{content:" ";display:block;position:absolute;left:calc((var(--swiffy-slider-item-gap)/2)*-1);top:0;width:1px;height:1px;scroll-snap-align:var(--swiffy-slider-snap-align)}.slider-nav-outside-expand .slider-nav{margin-left:-4rem}.slider-nav-outside-expand .slider-nav.slider-nav-next{margin-right:-4rem}.slider-nav-sm.slider-nav-outside-expand .slider-nav{margin-left:-3.5rem}.slider-nav-sm.slider-nav-outside-expand .slider-nav.slider-nav-next{margin-right:-3.5rem}.slider-indicators-sm.slider-indicators{display:none}}@media (max-width:62rem){.swiffy-slider{--swiffy-slider-track-height:0rem;--swiffy-slider-item-reveal:0rem;--swiffy-slider-item-count:1;--swiffy-slider-nav-zoom:.875}.swiffy-slider .slider-item-show2-sm{--swiffy-slider-item-count:2}.slider-item-reveal{--swiffy-slider-item-reveal:4rem}.slider-item-snapstart.slider-item-reveal{--swiffy-slider-item-reveal:2rem}.slider-item-show6 .slider-container{grid-auto-columns:calc(25% - (var(--swiffy-slider-item-gap)/ 4*3))}.slider-item-show6.slider-item-reveal .slider-container{grid-auto-columns:calc(25% - (var(--swiffy-slider-item-gap)/ 4*3) - .5rem)}.slider-item-show6.slider-item-reveal .slider-container>*{scroll-snap-align:unset}.slider-item-show6.slider-item-reveal .slider-container>::before{content:" ";display:block;position:absolute;left:calc((var(--swiffy-slider-item-gap)/2)*-1);top:0;width:1px;height:1px;scroll-snap-align:center}.slider-nav::after,.slider-nav::before{width:2rem;height:2rem;padding:.3rem}.slider-nav-round .slider-nav::after,.slider-nav-square .slider-nav::after{width:1.75rem;height:1.75rem;margin:.125rem}.slider-nav-outside .slider-container,.slider-nav-outside-expand .slider-container{margin:0 2rem}.slider-nav-outside-expand .slider-container{margin:0 var(--swiffy-slider-nav-outside-size)}.slider-nav-outside-expand .slider-nav{padding:0}.slider-indicators-round .slider-indicators>*,.slider-indicators-round.slider-indicators>*,.slider-indicators-square .slider-indicators>*,.slider-indicators-square.slider-indicators>*{width:.3rem;height:.3rem}.slider-indicators{margin-bottom:.5rem;display:none}.slider-nav-scrollbar .slider-indicators{margin-bottom:0}.slider-indicators>*{width:1rem;height:.125rem;border-width:.25rem}.slider-indicators-sm .slider-indicators,.slider-indicators-sm.slider-indicators{display:flex}}@media (max-width:48rem){.slider-item-show6 .slider-container{grid-auto-columns:calc(50% - (var(--swiffy-slider-item-gap)/ 2))}.slider-item-show6.slider-item-reveal .slider-container{grid-auto-columns:calc(50% - (var(--swiffy-slider-item-gap)/ 2) - 1.5rem)}}@media (hover:none){.swiffy-slider.slider-nav-touch .slider-nav{visibility:visible}.swiffy-slider:not(.slider-nav-touch).slider-nav-outside .slider-container,.swiffy-slider:not(.slider-nav-touch).slider-nav-outside-expand .slider-container{margin:0 0}.slider-item-nosnap-touch{--swiffy-slider-snap-align:unset}}
+/*# sourceMappingURL=swiffy-slider.min.css.map */
diff --git a/web/modules/custom/dc_components/libraries/swiffy-slider.min.css.map b/web/modules/custom/dc_components/libraries/swiffy-slider.min.css.map
new file mode 100644
index 0000000..35f85d1
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/swiffy-slider.min.css.map
@@ -0,0 +1,8 @@
+{
+ "version": 3,
+ "sources": [
+ "swiffy-slider.css"
+ ],
+ "names": [],
+ "mappings": "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"
+}
\ No newline at end of file
diff --git a/web/modules/custom/dc_components/libraries/swiffy-slider.min.js b/web/modules/custom/dc_components/libraries/swiffy-slider.min.js
new file mode 100644
index 0000000..04e4103
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/swiffy-slider.min.js
@@ -0,0 +1,2 @@
+const swiffyslider={version:"1.6.0",init(e=document.body){for(let t of e.querySelectorAll(".swiffy-slider"))this.initSlider(t)},initSlider(e){for(let t of e.querySelectorAll(".slider-nav")){let i=t.classList.contains("slider-nav-next");t.addEventListener("click",()=>this.slide(e,i),{passive:!0})}for(let t of e.querySelectorAll(".slider-indicators"))t.addEventListener("click",()=>this.slideToByIndicator()),this.onSlideEnd(e,()=>this.handleIndicators(e),60);if(e.classList.contains("slider-nav-autoplay")){const t=e.getAttribute("data-slider-nav-autoplay-interval")?e.getAttribute("data-slider-nav-autoplay-interval"):2500;this.autoPlay(e,t,e.classList.contains("slider-nav-autopause"))}if(["slider-nav-autohide","slider-nav-animation"].some(t=>e.classList.contains(t))){const t=e.getAttribute("data-slider-nav-animation-threshold")?e.getAttribute("data-slider-nav-animation-threshold"):.3;this.setVisibleSlides(e,t)}},setVisibleSlides(e,t=.3){let i=new IntersectionObserver(t=>{t.forEach(e=>{e.isIntersecting?e.target.classList.add("slide-visible"):e.target.classList.remove("slide-visible")}),e.querySelector(".slider-container>*:first-child").classList.contains("slide-visible")?e.classList.add("slider-item-first-visible"):e.classList.remove("slider-item-first-visible"),e.querySelector(".slider-container>*:last-child").classList.contains("slide-visible")?e.classList.add("slider-item-last-visible"):e.classList.remove("slider-item-last-visible")},{root:e.querySelector(".slider-container"),threshold:t});for(let t of e.querySelectorAll(".slider-container>*"))i.observe(t)},slide(e,t=!0){const i=e.querySelector(".slider-container"),s=e.classList.contains("slider-nav-page"),l=e.classList.contains("slider-nav-noloop"),r=e.classList.contains("slider-nav-nodelay"),o=i.children,n=parseInt(window.getComputedStyle(i).columnGap),a=o[0].offsetWidth+n;let d=t?i.scrollLeft+a:i.scrollLeft-a;s&&(d=t?i.scrollLeft+i.offsetWidth:i.scrollLeft-i.offsetWidth),i.scrollLeft<1&&!t&&!l&&(d=i.scrollWidth-i.offsetWidth),i.scrollLeft>=i.scrollWidth-i.offsetWidth&&t&&!l&&(d=0),i.scroll({left:d,behavior:r?"auto":"smooth"})},slideToByIndicator(){const e=window.event.target,t=Array.from(e.parentElement.children).indexOf(e),i=e.parentElement.children.length,s=e.closest(".swiffy-slider"),l=s.querySelector(".slider-container").children.length/i*t;this.slideTo(s,l)},slideTo(e,t){const i=e.querySelector(".slider-container"),s=parseInt(window.getComputedStyle(i).columnGap),l=i.children[0].offsetWidth+s,r=e.classList.contains("slider-nav-nodelay");i.scroll({left:l*t,behavior:r?"auto":"smooth"})},onSlideEnd(e,t,i=125){let s;e.querySelector(".slider-container").addEventListener("scroll",(function(){window.clearTimeout(s),s=setTimeout(t,i)}),{capture:!1,passive:!0})},autoPlay(e,t,i){t=t<750?750:t;let s=setInterval(()=>this.slide(e),t);const l=()=>this.autoPlay(e,t,i);return i&&(["mouseover","touchstart"].forEach((function(t){e.addEventListener(t,(function(){window.clearTimeout(s)}),{once:!0,passive:!0})})),["mouseout","touchend"].forEach((function(t){e.addEventListener(t,(function(){l()}),{once:!0,passive:!0})}))),s},handleIndicators(e){if(!e)return;const t=e.querySelector(".slider-container"),i=t.scrollWidth-t.offsetWidth,s=t.scrollLeft/i;for(let t of e.querySelectorAll(".slider-indicators")){let e=t.children,i=Math.abs(Math.round((e.length-1)*s));for(let t of e)t.classList.remove("active");e[i].classList.add("active")}}};window.swiffyslider=swiffyslider,document.currentScript.hasAttribute("data-noinit")||(document.currentScript.hasAttribute("defer")?swiffyslider.init():document.onreadystatechange=()=>{"interactive"===document.readyState&&swiffyslider.init()});
+//# sourceMappingURL=swiffy-slider.min.js.map
\ No newline at end of file
diff --git a/web/modules/custom/dc_components/libraries/swiffy-slider.min.js.map b/web/modules/custom/dc_components/libraries/swiffy-slider.min.js.map
new file mode 100644
index 0000000..9f918c3
--- /dev/null
+++ b/web/modules/custom/dc_components/libraries/swiffy-slider.min.js.map
@@ -0,0 +1,104 @@
+{
+ "version": 3,
+ "sources": [
+ "swiffy-slider.js"
+ ],
+ "names": [
+ "swiffyslider",
+ "version",
+ "[object Object]",
+ "rootElement",
+ "document",
+ "body",
+ "sliderElement",
+ "querySelectorAll",
+ "this",
+ "initSlider",
+ "navElement",
+ "next",
+ "classList",
+ "contains",
+ "addEventListener",
+ "slide",
+ "passive",
+ "indicatorElement",
+ "slideToByIndicator",
+ "onSlideEnd",
+ "handleIndicators",
+ "timeout",
+ "getAttribute",
+ "autoPlay",
+ "some",
+ "className",
+ "threshold",
+ "setVisibleSlides",
+ "observer",
+ "IntersectionObserver",
+ "slides",
+ "forEach",
+ "isIntersecting",
+ "target",
+ "add",
+ "remove",
+ "querySelector",
+ "root",
+ "observe",
+ "container",
+ "fullpage",
+ "noloop",
+ "nodelay",
+ "children",
+ "gapWidth",
+ "parseInt",
+ "window",
+ "getComputedStyle",
+ "columnGap",
+ "scrollStep",
+ "offsetWidth",
+ "scrollLeftPosition",
+ "scrollLeft",
+ "scrollWidth",
+ "scroll",
+ "left",
+ "behavior",
+ "indicator",
+ "event",
+ "indicatorIndex",
+ "Array",
+ "from",
+ "parentElement",
+ "indexOf",
+ "indicatorCount",
+ "length",
+ "closest",
+ "relativeSlideIndex",
+ "slideTo",
+ "slideIndex",
+ "delegate",
+ "isScrolling",
+ "clearTimeout",
+ "setTimeout",
+ "capture",
+ "autopause",
+ "autoplayTimer",
+ "setInterval",
+ "autoplayer",
+ "once",
+ "slidingAreaWidth",
+ "percentSlide",
+ "scrollIndicatorContainers",
+ "scrollIndicators",
+ "activeIndicator",
+ "Math",
+ "abs",
+ "round",
+ "element",
+ "currentScript",
+ "hasAttribute",
+ "init",
+ "onreadystatechange",
+ "readyState"
+ ],
+ "mappings": "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",
+ "file": "swiffy-slider.js"
+}
\ No newline at end of file
diff --git a/web/modules/custom/dc_components/templates/block--inline-block--ping-pong.html.twig b/web/modules/custom/dc_components/templates/block--inline-block--ping-pong.html.twig
new file mode 100644
index 0000000..d175565
--- /dev/null
+++ b/web/modules/custom/dc_components/templates/block--inline-block--ping-pong.html.twig
@@ -0,0 +1,45 @@
+{#
+ * Component variables
+ *
+ * props:
+ * layout
+ * mediaAlign
+ * bgColor
+ *
+ * slots
+ * headline
+ * body
+ * cta
+ * media
+ *
+ #}
+{% set align = content.field_ping_pong_media_alignment.0['#markup'] %}
+{% set bgColor = content.field_ping_pong_background_color.0['#markup']|default('#fff') %}
+
+ {{ title_prefix }}
+ {{ title_suffix }}
+
+ {% embed 'dc_components:ping-pong' with {
+ mediaAlign: align,
+ bgColor: bgColor,
+ }%}
+
+ {% block headline %}
+
{{ label }}
+ {% endblock%}
+
+ {% block body %}
+ {{ content.field_ping_pong_body }}
+ {% endblock %}
+
+ {% block cta %}
+ {{ content.field_ping_pong_cta }}
+ {% endblock %}
+
+ {% block media %}
+ {{ content.field_ping_pong_media_items }}
+ {% endblock %}
+
+ {% endembed %}
+
+
diff --git a/web/modules/custom/dc_components/templates/field--block-content--field-ping-pong-media-items--ping-pong.html.twig b/web/modules/custom/dc_components/templates/field--block-content--field-ping-pong-media-items--ping-pong.html.twig
new file mode 100644
index 0000000..502714d
--- /dev/null
+++ b/web/modules/custom/dc_components/templates/field--block-content--field-ping-pong-media-items--ping-pong.html.twig
@@ -0,0 +1,50 @@
+{#
+/**
+ * @file
+ * Theme override for a field.
+ *
+ * To override output, copy the "field.html.twig" from the templates directory
+ * to your theme's directory and customize it, just like customizing other
+ * Drupal templates such as page.html.twig or node.html.twig.
+ *
+ * Instead of overriding the theming for all fields, you can also just override
+ * theming for a subset of fields using
+ * @link themeable Theme hook suggestions. @endlink For example,
+ * here are some theme hook suggestions that can be used for a field_foo field
+ * on an article node type:
+ * - field--node--field-foo--article.html.twig
+ * - field--node--field-foo.html.twig
+ * - field--node--article.html.twig
+ * - field--field-foo.html.twig
+ * - field--text-with-summary.html.twig
+ * - field.html.twig
+ *
+ * Available variables:
+ * - attributes: HTML attributes for the containing element.
+ * - label_hidden: Whether to show the field label or not.
+ * - title_attributes: HTML attributes for the title.
+ * - label: The label for the field.
+ * - multiple: TRUE if a field can contain multiple items.
+ * - items: List of all the field items. Each item contains:
+ * - attributes: List of HTML attributes for each item.
+ * - content: The field item's content.
+ * - entity_type: The entity type to which the field belongs.
+ * - field_name: The name of the field.
+ * - field_type: The type of the field.
+ * - label_display: The display settings for the label.
+ *
+ * @see template_preprocess_field()
+ */
+#}
+{%
+ set title_classes = [
+ label_display == 'visually_hidden' ? 'visually-hidden',
+ ]
+%}
+
+
+ {% for item in items %}
+ - {{ item.content }}
+ {% endfor %}
+
+
diff --git a/web/themes/custom/dchadwick/css/style.css b/web/themes/custom/dchadwick/css/style.css
index 4c44d2d..a224aa7 100644
--- a/web/themes/custom/dchadwick/css/style.css
+++ b/web/themes/custom/dchadwick/css/style.css
@@ -296,6 +296,11 @@ table.cols-5 td.incorrect {
html {
font-size: 100%;
+ box-sizing: border-box;
+}
+
+.region-content {
+ padding: 0;
}
body {
diff --git a/web/themes/custom/dchadwick/src/sass/style.scss b/web/themes/custom/dchadwick/src/sass/style.scss
index 147ecf3..a7a11ca 100644
--- a/web/themes/custom/dchadwick/src/sass/style.scss
+++ b/web/themes/custom/dchadwick/src/sass/style.scss
@@ -34,6 +34,11 @@ $container-plus-padding: 1216px;
html {
font-size: 100%;
+ box-sizing: border-box;
+}
+
+.region-content {
+ padding: 0;
}
body {