Magic

<!-- Error rendering component -->
<!-- TwigException: Twig.expression.type.operator.binary cannot follow a Twig.expression.type.comma at template:73 near '//...' -->
<!-- Error: TwigException: Twig.expression.type.operator.binary cannot follow a Twig.expression.type.comma at template:73 near '//...'
    at /var/www/vhosts/ati4.group/afflelou.design-system.ati4.group/node_modules/@frctl/twig/src/adapter.js:156:24
    at new Promise (<anonymous>)
    at TwigAdapter.render (/var/www/vhosts/ati4.group/afflelou.design-system.ati4.group/node_modules/@frctl/twig/src/adapter.js:134:16)
    at ComponentSource._renderVariant (/var/www/vhosts/ati4.group/afflelou.design-system.ati4.group/node_modules/@frctl/fractal/src/api/components/source.js:212:30)
    at _renderVariant.next (<anonymous>)
    at onFulfilled (/var/www/vhosts/ati4.group/afflelou.design-system.ati4.group/node_modules/co/index.js:65:19) -->
<div x-data="gsapAnimation()" x-ref="containerGsap" class="px-0 flex flex-col gap-14 md:gap-28 py-20 md:py-48">
    <div x-ref="container" class="container w-4/5">
        <div class="inline-flex flex-col gap-6">
            {% render "@logos-brand--magic" with {logoClass:"h-6 md:h-8"} %}
            <h2 class="font-medium text-6xl">{{ text.title }}</h2>
        </div>
    </div>

    <div x-ref="containerVideo" class="image-container">
        {% render "@image" with {
            src: '/placeholder-image.jpg',
            alt: 'Description de l\'image',
            width: 'full', // full, 1/2, 1/4, etc.
            height: 'auto',
            objectFit: 'cover', // cover, contain, fill
            loading: 'lazy',
            enableGsap: true,
        } %}
    </div>

    <div class="container w-4/5 px-0 flex flex-col gap-14 md:gap-28">
        <div class="flex flex-col items-center gap-10"
             x-ref="buttonMagic"
        >
            <p class="font-medium text-2xl">{{ text.description }}</p>
            {% render "@template-button" with {
                href:"https://www.afflelou.com/",
                external:true,
                color: "dark-subtle",
                label:"En savoir plus",
                class:"mx-auto",
                button_attribute:(":class=\"isMagicDark ? 'btn-light-subtle' : 'btn-dark-subtle'\"")|replace({'\"': '"'})
            } %}
        </div>
    </div>

    <div class="container" x-ref="sliderMagic">
        {% render "@carousel" with {
            swiper_pagination_attribute:(":class=\"isMagicDark ? 'swiper-dark' : 'swiper-light'\"")|replace({'\"': '"'}),
            cta_button_attribute:(":class=\"isMagicDark ? 'btn-light-subtle' : 'btn-dark-subtle'\"")|replace({'\"': '"'}),
            swiper_navigation_attribute:(":class=\"isMagicDark ? 'btn-light-subtle' : 'btn-dark-subtle'\"")|replace({'\"': '"'}),
        } %}
    </div>
</div>

<script>
	function gsapAnimation() {
		return {
			isMagicDark: false,
			init() {
				this.setupGsapAnimation();
			},
			setupGsapAnimation() {
				gsap.registerPlugin(ScrollTrigger);

				const containerVideo = this.$refs.containerVideo;
				const containerGsap = this.$refs.containerGsap;

				gsap.timeline({
					scrollTrigger: {
						trigger: containerVideo,
						start: "top-=100 bottom",
						end: "bottom top",
						markers: true, // À retirer en production
						onEnter: () => {
							this.applyDarkTheme();
						}
					}
				});

				gsap.timeline({
					scrollTrigger: {
						trigger: containerGsap,
						start: "top-=100 top",
						end: "bottom+=200 bottom",
						markers: true, // À retirer en production
						onLeave: () => {
							this.resetToWhite();
						}
					}
				});
			},
			resetToWhite() {
				this.isMagicDark = false;
				gsap.to(this.$refs.containerGsap, {
					backgroundColor: 'white',
					color: 'black',
					duration: 0.5
				});
			},
			applyDarkTheme() {
				this.isMagicDark = true;
				gsap.to(this.$refs.containerGsap, {
					backgroundColor: '#262626',
					color: '#FFFFFF',
					duration: 0.5
				});
			},
		};
	}
</script>
{
  "text": {
    "title": "Autant de clips, autant de looks.",
    "description": "MAGIC, un concept innovant et pratique pour ceux qui souhaitent avoir une seule paire de lunettes avec un style personnalisable et des fonctionnalités multiples."
  }
}

No notes defined.