{% sw_extends '@Storefront/storefront/element/cms-element-image-gallery.html.twig' %}
{% block element_image_gallery_alignment %}
{% set navigationArrows = false %}
{% set zoom = false %}
{% set magnifierOverGallery = false %}
{% set gallerySliderOptions = {
"dots": true,
"mobileFirst": true,
"arrows": false,
"responsive": [
{
"breakpoint": 1023,
"settings": "unslick"
}
]
} %}
{% if navigationArrows %}
{% set gallerySliderOptions = gallerySliderOptions|replace_recursive({
"arrows": true,
"prevArrow": "#prev-slide-"~element.id,
"nextArrow": "#next-slide-"~element.id,
}) %}
{% endif %}
{% block element_image_gallery_inner %}
<div class="row gallery-slider-row{% if imageCount == 1 %} is-single-image{% else %} is-loading{% endif %} js-gallery-zoom-modal-container lg:grid lg:grid-cols-[48px_1fr] lg:grid-gap-2"
{% if zoom %}
data-magnifier="true"
{% endif %}
{% if magnifierOptions|length > 0 %}
data-magnifier-options='{{ magnifierOptions|json_encode|raw }}'
{% endif %}
{% if imageCount > 1 %}
data-gallery-slider-options='{{ gallerySliderOptions|json_encode }}'
data-custom-slider="true"
{% endif %}>
{% block element_image_gallery_inner_col %}
<div class="gallery-slider-col lg:order-last{% if galleryPosition == "left" %} is-left{% elseif galleryPosition == "underneath" %} is-underneath{% endif %}"
{% if zoomModal %}data-zoom-modal="true"{% endif %}>
{# option "magnifierOverGallery" shows zoom container over gallery #}
<div class="gallery-slider relative {% if navigationArrows == "outside" %} has-nav-outside{% endif %}{% if navigationDots == "outside" %} has-dots-outside{% endif %}{% if magnifierOverGallery %} js-magnifier-zoom-image-container{% endif %}">
{% block element_image_gallery_inner_wrapper %}
{% if imageCount > 1 %}
{% block element_image_gallery_inner_multiple_slides %}
{% block element_image_gallery_inner_container %}
<div class="custom-slider slick-init pb-4 hide-scrollbar lg:pb-0 lg:flex-col lg:grid-gap-2 lg:!overflow-y-scroll lg:h-[46vw] 2xl:h-[40vw] lg:max-h-[760px]"
data-slick='{{ gallerySliderOptions|json_encode }}'
data-slider-container="true">
{% for image in mediaItems %}
{% block element_image_gallery_inner_item %}
<div class="custom-slide js-magnifier-container ratio ratio_product_image"{% if minHeight and (displayMode == "cover" or displayMode == "contain" ) %} style="min-height: {{ minHeight }}"{% endif %}
data-slide="{{ loop.index }}">
{% set attributes = {
'class': 'gallery-slider-image js-magnifier-image cursor-zoom-in',
'alt': (image.translated.alt ?: fallbackImageTitle),
'title': (image.translated.title ?: fallbackImageTitle),
'data-full-image': image.url
} %}
{% if displayMode == 'cover' or displayMode == 'contain' %}
{% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
{% endif %}
{% if isProduct %}
{% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
{% endif %}
{% sw_thumbnails 'gallery-slider-image-thumbnails' with {
media: image
} %}
</div>
{% endblock %}
{% endfor %}
</div>
{% endblock %}
{% block element_image_gallery_inner_controls %}
{% if navigationArrows %}
<div class="gallery-slider-controls-container hidden absolute bottom-3 right-3 lg:block">
<div class="flex grid-gap-2 justify-end">
<button id="prev-slide-{{ element.id }}"
class="products-back flex p-1 transition duration-300 active:-translate-x-0.5 hover:-translate-x-0.5">
{% sw_icon 'arrow-head-left' %}
</button>
<button id="next-slide-{{ element.id }}"
class="products-next flex p-1 transition duration-300 active:translate-x-0.5 hover:translate-x-0.5">
{% sw_icon 'arrow-head-right' %}
</button>
</div>
</div>
{% endif %}
{% endblock %}
{% endblock %}
{% else %}
{% block element_image_gallery_inner_single %}
<div class="gallery-slider-single-image js-magnifier-container ratio ratio_product_image"{% if minHeight %} style="min-height: {{ minHeight }}"{% endif %}>
{% if imageCount > 0 %}
{% set attributes = {
'class': 'gallery-slider-image magnifier-image js-magnifier-image cursor-zoom-in',
'alt': (mediaItems|first.translated.alt ?: fallbackImageTitle),
'title': (mediaItems|first.translated.title ?: fallbackImageTitle),
'data-full-image': mediaItems|first.url
} %}
{% if displayMode == 'cover' or displayMode == 'contain' %}
{% set attributes = attributes|merge({ 'data-object-fit': displayMode }) %}
{% endif %}
{% if isProduct %}
{% set attributes = attributes|merge({ 'itemprop': 'image' }) %}
{% endif %}
{% sw_thumbnails 'gallery-slider-image-thumbnails' with {
media: mediaItems|first,
} %}
{% else %}
{% sw_icon 'placeholder' style {
'size': 'fluid'
} %}
{% endif %}
</div>
{% endblock %}
{% endif %}
{% endblock %}
</div>
</div>
{% endblock %}
{% block element_image_gallery_inner_thumbnails_col %}
{% if imageCount > 1 %}
<div class="custom-thumbnail-control-container hidden lg:block lg:order-first {% if galleryPosition == "left" %} is-left{% elseif galleryPosition == "underneath" %} is-underneath{% endif %}">
{% block element_image_gallery_inner_thumbnails %}
<div class="custom-thumbnail-control {% if galleryPosition == "underneath" %} is-underneath{% endif %} lg:grid lg:grid-gap-2"
data-slider-thumbnails="true" data-active-thumbnail-classes="active !border-grey-900">
{% block element_image_gallery_inner_thumbnails_items %}
{% for image in mediaItems %}
{% block element_image_gallery_inner_thumbnails_item %}
<div class="thumbnails-item">
{% block element_image_gallery_inner_thumbnails_item_inner %}
<div class="thumbnails-item-inner w-12 ratio ratio_product_image">
{% set attributes = {
'class': 'gallery-slider-thumbnails-image rounded-sm transition cursor-pointer border border-transparent ' ~ ((loop.first) ? '!border-grey-900' : ' border-transparent'),
'alt': (image.translated.alt ?: fallbackImageTitle),
'title': (image.translated.title ?: fallbackImageTitle)
} %}
{% if isProduct %}
{% set attributes = attributes|merge({ 'itemprop': 'image', 'data-thumbnail': loop.index}) %}
{% endif %}
{% sw_thumbnails 'gallery-slider-thumbnails-image-thumbnails' with {
media: image,
sizes: {
'default': '200px'
}
} %}
</div>
{% endblock %}
</div>
{% endblock %}
{% endfor %}
{% endblock %}
</div>
{% endblock %}
</div>
{% else %}
<div class="placeholder for-slider-thumbnails"></div>
{% endif %}
{% endblock %}
{% block element_image_gallery_inner_zoom_modal_wrapper %}
{% if zoomModal %}
<div class="zoom-modal-wrapper">
{% sw_include '@Storefront/storefront/component/product/image-gallery/zoom-modal.html.twig' %}
</div>
{% endif %}
{% endblock %}
</div>
{% endblock %}
{% endblock %}