import { Component, HostBinding, OnDestroy, Input, OnInit } from '@angular/core'; import { CarouselComponent } from './carousel.component'; @Component({ selector: 'slide', template: `
`, // eslint-disable-next-line @angular-eslint/no-host-metadata-property host: { '[attr.aria-hidden]': '!active', '[class.multilist-margin]': 'multilist' }, styles: [` :host.carousel-animation { transition: opacity 0.6s ease, visibility 0.6s ease; float: left; } :host.carousel-animation.active { opacity: 1; visibility: visible; } :host.carousel-animation:not(.active) { display: block; position: absolute; opacity: 0; visibility: hidden; } :host.multilist-margin { margin-right: auto; } :host.carousel-item { perspective: 1000px; } `] }) export class SlideComponent implements OnInit, OnDestroy { /** Is current slide active */ @HostBinding('class.active') @Input() active = false; @HostBinding('style.width') itemWidth = '100%'; @HostBinding('style.order') order = 0; @HostBinding('class.carousel-animation') isAnimated = false; /** Wraps element by appropriate CSS classes */ @HostBinding('class.item') @HostBinding('class.carousel-item') addClass = true; /** Link to Parent(container-collection) component */ protected carousel: CarouselComponent; multilist = false; constructor(carousel: CarouselComponent) { this.carousel = carousel; } /** Fires changes in container collection after adding a new slide instance */ ngOnInit(): void { this.carousel.addSlide(this); this.itemWidth = `${100 / this.carousel.itemsPerSlide}%`; this.multilist = this.carousel?.itemsPerSlide > 1; } /** Fires changes in container collection after removing of this slide instance */ ngOnDestroy(): void { this.carousel.removeSlide(this); } }