@teenageinterface/carousel
Version:
The `Carousel` component allows you to create a sliding carousel with configurable options such as auto-sliding, controls, and dot indicators.
1 lines • 16.7 kB
Source Map (JSON)
{"version":3,"file":"teenageinterface-carousel.mjs","sources":["../../../libs/carousel/src/lib/slide.component.ts","../../../libs/carousel/src/lib/slide.component.html","../../../libs/carousel/src/lib/carousel.component.ts","../../../libs/carousel/src/lib/carousel.component.html","../../../libs/carousel/src/public-api.ts","../../../libs/carousel/src/teenageinterface-carousel.ts"],"sourcesContent":["/**\r\n * @Author: 0K0 <contact@oko.app>\r\n * @Date: 29-11-2024 09:34:46\r\n * @Last Modified by: 0K0 <contact@oko.app>\r\n * @Last Modified time: 29-11-2024 09:54:39\r\n */\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { Component, Input, HostBinding } from '@angular/core';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'tiSlide',\r\n imports: [CommonModule],\r\n templateUrl: './slide.component.html',\r\n styleUrl: './tailwind.css'\r\n})\r\nexport class SlideComponent {\r\n @Input() width: number = 320;\r\n\r\n public active: boolean = false;\r\n public currentIndex: number = 0;\r\n public index: number = 0;\r\n public type: \"classic\" | \"modern\" = \"modern\";\r\n\r\n @HostBinding('style')\r\n get setWidth(): SafeStyle {\r\n return this.sanitizer.bypassSecurityTrustStyle(`width: ${this.width}px`);\r\n }\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n}\r\n","<div\r\n class=\"box-border select-none relative transition-all duration-300\"\r\n [style.width]=\"width + 'px'\"\r\n [style.transform]=\"type === 'modern' ? (active ? 'scale(1)' : 'scale(0.8)') : ''\"\r\n [style.transform-origin]=\"type === 'modern' ? (currentIndex > index ? 'right' : 'left') : ''\"\r\n [style.z-index]=\"type === 'modern' ? (active ? '10' : '1') : ''\"\r\n [style.left]=\"type === 'modern' ? (index === currentIndex - 1 ? '25%' : index === currentIndex + 1 ? '-25%' : '0') : ''\"\r\n [style.opacity]=\"type === 'modern' ? (active ? '1' : '0.7') : ''\"\r\n>\r\n <ng-content>\r\n </ng-content>\r\n</div>\r\n","/**\r\n * @Author: 0K0 <contact@oko.app>\r\n * @Date: 29-11-2024 09:16:54\r\n * @Last Modified by: 0K0 <contact@oko.app>\r\n * @Last Modified time: 30-11-2024 00:08:08\r\n */\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { AfterContentInit, AfterViewChecked, HostBinding, Component, ContentChildren, Input, HostListener, QueryList, ElementRef } from '@angular/core';\r\nimport { SlideComponent } from './slide.component';\r\nimport { IconsComponent } from '@teenageinterface/icons'\r\nimport { SafeStyle } from \"@angular/platform-browser\";\r\n\r\n@Component({\r\n selector: 'tiCarousel',\r\n imports: [CommonModule, SlideComponent, IconsComponent],\r\n templateUrl: './carousel.component.html',\r\n styleUrl: './tailwind.css',\r\n styles: [`:host{ display: block; }`]\r\n})\r\nexport class CarouselComponent implements AfterContentInit, AfterViewChecked {\r\n @ContentChildren(SlideComponent) slides!: QueryList<SlideComponent>;\r\n public slideList: SlideComponent[] = [];\r\n public currentIndex: number = 0;\r\n private autoSlideInterval: any;\r\n private isDragging: boolean = false;\r\n private startX: number = 0;\r\n private currentTranslate: number = 0;\r\n private prevTranslate: number = 0;\r\n private isInitialized = false;\r\n\r\n @Input() autoSlideTime = 3000;\r\n @Input() autoSlide: boolean = true;\r\n @Input() dot: boolean = true;\r\n @Input() controls: boolean = true;\r\n @Input() width: number = 320;\r\n @Input() infinite: boolean = true;\r\n @Input() type: \"classic\" | \"modern\" = \"modern\";\r\n\r\n @HostListener('window:resize')\r\n onWindowResize(): void {\r\n this.updateSlideWidths();\r\n }\r\n\r\n @HostBinding('style.width')\r\n setWidth: SafeStyle = this.type === 'modern' ? (this.width + (this.width / 2)) + 'px' : this.width + 'px';\r\n\r\n\r\n constructor(private hostRef: ElementRef) {}\r\n\r\n ngAfterViewChecked(): void {\r\n if (!this.isInitialized && this.hostRef.nativeElement.offsetWidth > 0) {\r\n this.updateSlideWidths();\r\n this.slides.forEach((slide: SlideComponent, i) => {\r\n slide.width = this.width;\r\n slide.index = i;\r\n slide.currentIndex = this.currentIndex;\r\n slide.type = this.type;\r\n if(i === this.currentIndex) slide.active = true;\r\n else slide.active = false;\r\n });\r\n this.slideList = this.slides.toArray();\r\n if(this.autoSlide)\r\n this.startAutoSlide();\r\n this.isInitialized = true;\r\n }\r\n }\r\n\r\n public ngAfterContentInit(): void {\r\n this.updateSlideWidths();\r\n }\r\n\r\n private updateSlideWidths(): void {\r\n this.width = this.hostRef.nativeElement.offsetWidth;\r\n if (this.width === 0) return;\r\n this.setWidth = this.type === 'modern' ? (this.width + (this.width / 2)) + 'px' : this.width + 'px';\r\n this.slides.forEach((slide: SlideComponent) => {\r\n slide.width = this.width;\r\n });\r\n }\r\n\r\n private startAutoSlide(): void {\r\n if(!this.autoSlide) return;\r\n\r\n this.autoSlideInterval = setInterval(() => {\r\n this.nextSlide();\r\n }, this.autoSlideTime);\r\n }\r\n\r\n public pauseAutoSlide(): void {\r\n if (this.autoSlideInterval) {\r\n clearInterval(this.autoSlideInterval);\r\n }\r\n }\r\n\r\n public resumeAutoSlide(): void {\r\n if(!this.autoSlide) return;\r\n this.startAutoSlide();\r\n }\r\n\r\n public goToSlide(index: number): void {\r\n this.currentIndex = index;\r\n }\r\n\r\n public nextSlide(): void {\r\n if(this.currentIndex === (this.slideList.length - 1) && !this.infinite) return;\r\n\r\n this.currentIndex = (this.currentIndex + 1) % this.slideList.length;\r\n this.slides.forEach((slide: SlideComponent, i) => {\r\n slide.currentIndex = this.currentIndex;\r\n if(i === this.currentIndex) slide.active = true;\r\n else slide.active = false;\r\n });\r\n }\r\n\r\n public prevSlide(): void {\r\n if(this.currentIndex === 0 && !this.infinite) return;\r\n\r\n this.currentIndex = (this.currentIndex - 1 + this.slideList.length) % this.slideList.length;\r\n this.slides.forEach((slide: SlideComponent, i) => {\r\n slide.currentIndex = this.currentIndex;\r\n if(i === this.currentIndex) slide.active = true;\r\n else slide.active = false;\r\n });\r\n }\r\n\r\n onDragStart(event: MouseEvent): void {\r\n this.isDragging = true;\r\n this.startX = event.clientX;\r\n this.prevTranslate = this.currentTranslate;\r\n event.preventDefault();\r\n }\r\n\r\n onDrag(event: MouseEvent): void {\r\n if (!this.isDragging) return;\r\n\r\n const currentX = event.clientX;\r\n const deltaX = currentX - this.startX;\r\n this.currentTranslate = this.prevTranslate + deltaX;\r\n }\r\n\r\n onDragEnd(event: MouseEvent): void {\r\n if (!this.isDragging) return;\r\n\r\n this.isDragging = false;\r\n const movedBy = this.currentTranslate - this.prevTranslate;\r\n\r\n if (movedBy < -50 && this.currentIndex < this.slideList.length - 1) {\r\n this.nextSlide();\r\n } else if (movedBy > 50 && this.currentIndex > 0) {\r\n this.prevSlide();\r\n }\r\n }\r\n}\r\n","<div class=\"relative w-full mb-8\" [style.width]=\"type === 'modern' ? ((width + (width / 2)) + 'px') : (width + 'px')\" (mouseenter)=\"pauseAutoSlide()\" (mouseleave)=\"resumeAutoSlide()\">\r\n\r\n <div\r\n class=\"absolute cursor-pointer transition duration-300 text-neutral-800 dark:text-neutral-300 hover:text-neutral-950 hover:dark:text-neutral-50 z-10 flex items-center justify-center\"\r\n [class.top-0]=\"type === 'modern'\"\r\n [class.left-0]=\"type === 'modern'\"\r\n [class.h-full]=\"type === 'modern'\"\r\n [class.rounded-full]=\"type === 'classic'\"\r\n [class.p-4]=\"type === 'classic'\"\r\n [class.border]=\"type === 'classic'\"\r\n [class.dark:border-neutral-700]=\"type === 'classic'\"\r\n [class.border-neutral-300]=\"type === 'classic'\"\r\n [ngClass]=\"{'w-1/6': type === 'modern', 'top-1/2 -translate-y-1/2 -left-20 hover:bg-neutral-100 hover:dark:bg-neutral-900 hover:border-neutral-400 hover:dark:border-neutral-600 active:scale-95': type === 'classic'}\"\r\n (click)=\"prevSlide()\"\r\n *ngIf=\"controls\">\r\n <tiIcon *ngIf=\"type !== 'modern'\" icon=\"chevron_left\" other=\"!w-5 !h-5\" />\r\n </div>\r\n\r\n <div\r\n class=\"relative flex justify-center overflow-hidden w-full cursor-grab active:cursor-grabbing\"\r\n [style.mask-image]=\"type ==='modern' ? 'linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 15%, rgba(0,0,0,1) 50%, rgba(0,0,0,1) 85%, rgba(0,0,0,0) 100%)' : ''\"\r\n (mousedown)=\"onDragStart($event)\"\r\n (mouseup)=\"onDragEnd($event)\"\r\n (mouseleave)=\"onDragEnd($event)\"\r\n (mousemove)=\"onDrag($event)\">\r\n <div class=\"flex transition-transform duration-300 ease-in-out\" [style.width]=\"width + 'px'\" [style.transform]=\"'translateX(-' + currentIndex * 100 + '%)'\">\r\n <ng-container *ngFor=\"let slide of slideList; let i = index\">\r\n <ng-content></ng-content>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"absolute cursor-pointer transition duration-300 text-neutral-800 dark:text-neutral-300 hover:text-neutral-950 hover:dark:text-neutral-50 z-10 flex items-center justify-center\"\r\n [class.top-0]=\"type === 'modern'\"\r\n [class.right-0]=\"type === 'modern'\"\r\n [class.h-full]=\"type === 'modern'\"\r\n [class.rounded-full]=\"type === 'classic'\"\r\n [class.p-4]=\"type === 'classic'\"\r\n [class.border]=\"type === 'classic'\"\r\n [class.dark:border-neutral-700]=\"type === 'classic'\"\r\n [class.border-neutral-300]=\"type === 'classic'\"\r\n [ngClass]=\"{'w-1/6': type === 'modern', 'top-1/2 -translate-y-1/2 -right-20 hover:bg-neutral-100 hover:dark:bg-neutral-900 hover:border-neutral-400 hover:dark:border-neutral-600 active:scale-95': type === 'classic'}\"\r\n (click)=\"nextSlide()\"\r\n *ngIf=\"controls\">\r\n <tiIcon *ngIf=\"type !== 'modern'\" icon=\"chevron_right\" other=\"!w-5 !h-5\" />\r\n </div>\r\n\r\n <div *ngIf=\"dot\" class=\"absolute -bottom-8 left-1/2 -translate-x-1/2 flex gap-2\">\r\n <span\r\n *ngFor=\"let index of slideList; let i = index\"\r\n class=\"w-3 h-2 rounded-full dark:bg-neutral-700 bg-neutral-400 cursor-pointer transition-all duration-300\"\r\n [class.dark:!bg-neutral-50]=\"i === currentIndex\"\r\n [class.!bg-neutral-950]=\"i === currentIndex\"\r\n [class.!w-6]=\"i === currentIndex\"\r\n (click)=\"goToSlide(i)\">\r\n </span>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of carousel\r\n */\r\n\r\nexport * from './lib/slide.component';\r\nexport * from './lib/carousel.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}