ngx-freshok-carousel 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -282,11 +282,11 @@ class NgxCarouselControlsComponent {
282
282
  carousel = inject(NgxCarouselService);
283
283
  state = inject(NgxStateService);
284
284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NgxCarouselControlsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
285
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: NgxCarouselControlsComponent, isStandalone: true, selector: "lib-ngx-carousel-controls", ngImport: i0, template: "@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n (click)=\"carousel.prev()\"\r\n >\r\n Prev\r\n </button>\r\n \r\n <button\r\n (click)=\"carousel.next()\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n", styles: [".ngx-carousel__controls{position:absolute;display:flex;align-items:center;justify-content:space-between;padding:0 20px;top:var(--user-controls-top, 50%);transform:translateY(-50%);left:0;right:0;pointer-events:none}.ngx-carousel__controls.bullets{top:unset;bottom:10px}button{pointer-events:auto;cursor:pointer}.ngx-carousel__dots{position:absolute;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:20px}.ngx-carousel__dot{pointer-events:auto;cursor:pointer;width:20px;height:20px;border:2px solid blue;background-color:#ff0;border-radius:50%}.ngx-carousel__dot.active{background-color:orange}\n"] });
285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: NgxCarouselControlsComponent, isStandalone: true, selector: "lib-ngx-carousel-controls", ngImport: i0, template: "@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n (click)=\"carousel.prev()\"\r\n aria-label=\"Previous slide\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.617 20.0762C10.8882 19.805 10.8882 19.3654 10.617 19.0942L1.80242 10.2796L10.617 1.46497C10.8882 1.19379 10.8882 0.754138 10.617 0.482966C10.3459 0.211794 9.90621 0.211794 9.63504 0.482966L0.565868 9.55214C0.164103 9.9539 0.164103 10.6053 0.565868 11.007L9.63504 20.0762C9.90621 20.3474 10.3459 20.3474 10.617 20.0762Z\"></path></svg>\r\n </button>\r\n \r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n aria-label=\"Next slide\"\r\n (click)=\"carousel.next()\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\"></path></svg>\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n role=\"tablist\"\r\n aria-label=\"Carousel indicators\"\r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n type=\"button\"\r\n [attr.aria-selected]=\"carousel.getDisplayIndex() == i\"\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n", styles: [".ngx-carousel__controls{position:absolute;display:flex;align-items:center;justify-content:space-between;padding:var(--user-controls-padding, 0 20px);top:var(--user-controls-top, 50%);transform:translateY(-50%);left:0;right:0;pointer-events:none}.ngx-carousel__controls.bullets{top:unset;bottom:10px}.ngx-carousel__btn{pointer-events:auto;cursor:pointer;width:var(--user-controls-btn-width, auto);height:var(--user-controls-btn-heigth, auto);border:var(--user-controls-btn-border, 2px solid black);background-color:var(--user-controls-btn-bg, transparent);border-radius:var(--user-controls-btn-radius, 4px);transition:background-color .2s ease-in-out;padding:var(--user-controls-btn-padding, 10px)}.ngx-carousel__btn:hover{background-color:var(--user-controls-btn-hover-bg, lightgray)}.ngx-carousel__btn:hover svg{fill:var(--user-controls-btn-hover-fill, brown)}.ngx-carousel__btn svg{width:var(--user-controls-btn-svg-width, auto);height:var(--user-controls-btn-svg-height, auto);fill:var(--user-controls-btn-fill, red)}.ngx-carousel__dots{position:absolute;top:var(--user-controls-dots-top, unset);bottom:var(--user-controls-dots-bottom, 20px);left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:var(--user-controls-dots-gap, 20px)}.ngx-carousel__dot{pointer-events:auto;cursor:pointer;width:var(--user-controls-dot-width, 20px);height:var(--user-controls-dot-height, 20px);border:var(--user-controls-dot-border, 2px solid blue);background-color:var(--user-controls-dot-bg, yellow);border-radius:var(--user-controls-dot-radius, 50%)}.ngx-carousel__dot:hover{background-color:var(--user-controls-dot-hover-bg, green)}.ngx-carousel__dot.active{background-color:var(--user-controls-dot-active-bg, orange)}.ngx-carousel__dot.active:hover{background-color:var(--user-controls-dot-active-bg-hover, blue)}\n"] });
286
286
  }
287
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NgxCarouselControlsComponent, decorators: [{
288
288
  type: Component,
289
- args: [{ selector: 'lib-ngx-carousel-controls', imports: [], template: "@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n (click)=\"carousel.prev()\"\r\n >\r\n Prev\r\n </button>\r\n \r\n <button\r\n (click)=\"carousel.next()\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n", styles: [".ngx-carousel__controls{position:absolute;display:flex;align-items:center;justify-content:space-between;padding:0 20px;top:var(--user-controls-top, 50%);transform:translateY(-50%);left:0;right:0;pointer-events:none}.ngx-carousel__controls.bullets{top:unset;bottom:10px}button{pointer-events:auto;cursor:pointer}.ngx-carousel__dots{position:absolute;bottom:20px;left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:20px}.ngx-carousel__dot{pointer-events:auto;cursor:pointer;width:20px;height:20px;border:2px solid blue;background-color:#ff0;border-radius:50%}.ngx-carousel__dot.active{background-color:orange}\n"] }]
289
+ args: [{ selector: 'lib-ngx-carousel-controls', imports: [], template: "@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n (click)=\"carousel.prev()\"\r\n aria-label=\"Previous slide\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.617 20.0762C10.8882 19.805 10.8882 19.3654 10.617 19.0942L1.80242 10.2796L10.617 1.46497C10.8882 1.19379 10.8882 0.754138 10.617 0.482966C10.3459 0.211794 9.90621 0.211794 9.63504 0.482966L0.565868 9.55214C0.164103 9.9539 0.164103 10.6053 0.565868 11.007L9.63504 20.0762C9.90621 20.3474 10.3459 20.3474 10.617 20.0762Z\"></path></svg>\r\n </button>\r\n \r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n aria-label=\"Next slide\"\r\n (click)=\"carousel.next()\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\"></path></svg>\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n role=\"tablist\"\r\n aria-label=\"Carousel indicators\"\r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n type=\"button\"\r\n [attr.aria-selected]=\"carousel.getDisplayIndex() == i\"\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n", styles: [".ngx-carousel__controls{position:absolute;display:flex;align-items:center;justify-content:space-between;padding:var(--user-controls-padding, 0 20px);top:var(--user-controls-top, 50%);transform:translateY(-50%);left:0;right:0;pointer-events:none}.ngx-carousel__controls.bullets{top:unset;bottom:10px}.ngx-carousel__btn{pointer-events:auto;cursor:pointer;width:var(--user-controls-btn-width, auto);height:var(--user-controls-btn-heigth, auto);border:var(--user-controls-btn-border, 2px solid black);background-color:var(--user-controls-btn-bg, transparent);border-radius:var(--user-controls-btn-radius, 4px);transition:background-color .2s ease-in-out;padding:var(--user-controls-btn-padding, 10px)}.ngx-carousel__btn:hover{background-color:var(--user-controls-btn-hover-bg, lightgray)}.ngx-carousel__btn:hover svg{fill:var(--user-controls-btn-hover-fill, brown)}.ngx-carousel__btn svg{width:var(--user-controls-btn-svg-width, auto);height:var(--user-controls-btn-svg-height, auto);fill:var(--user-controls-btn-fill, red)}.ngx-carousel__dots{position:absolute;top:var(--user-controls-dots-top, unset);bottom:var(--user-controls-dots-bottom, 20px);left:50%;transform:translate(-50%);display:flex;align-items:center;justify-content:center;gap:var(--user-controls-dots-gap, 20px)}.ngx-carousel__dot{pointer-events:auto;cursor:pointer;width:var(--user-controls-dot-width, 20px);height:var(--user-controls-dot-height, 20px);border:var(--user-controls-dot-border, 2px solid blue);background-color:var(--user-controls-dot-bg, yellow);border-radius:var(--user-controls-dot-radius, 50%)}.ngx-carousel__dot:hover{background-color:var(--user-controls-dot-hover-bg, green)}.ngx-carousel__dot.active{background-color:var(--user-controls-dot-active-bg, orange)}.ngx-carousel__dot.active:hover{background-color:var(--user-controls-dot-active-bg-hover, blue)}\n"] }]
290
290
  }] });
291
291
 
292
292
  class NgxAutoplayService {
@@ -507,7 +507,7 @@ class NgxCarouselComponent {
507
507
  NgxSwipeService,
508
508
  NgxStateService,
509
509
  NgxLayoutService,
510
- ], queries: [{ propertyName: "slideTemplate", first: true, predicate: ["slideTemplate"], descendants: true, static: true }, { propertyName: "controlsTemplate", first: true, predicate: ["controlsTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "carouselList", first: true, predicate: ["carouselList"], descendants: true, static: true }], ngImport: i0, template: "<div\r\n class=\"ngx-carousel\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n", styles: [".ngx-carousel{outline:none;overflow:hidden;position:relative;width:100%;height:auto}.ngx-carousel__list{display:flex;position:relative;width:100%;height:var(--carousel-list-height, 100%);margin:0;padding:0;list-style:none;-webkit-user-select:none;user-select:none;touch-action:pan-y;cursor:grab}.ngx-carousel__list.no-transition{transition:none!important}.ngx-carousel__slide{width:100%;height:100%;display:flex;flex-shrink:0;position:relative}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgxCarouselControlsComponent, selector: "lib-ngx-carousel-controls" }] });
510
+ ], queries: [{ propertyName: "slideTemplate", first: true, predicate: ["slideTemplate"], descendants: true, static: true }, { propertyName: "controlsTemplate", first: true, predicate: ["controlsTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "carouselList", first: true, predicate: ["carouselList"], descendants: true, static: true }], ngImport: i0, template: "<div\r\n class=\"ngx-carousel\"\r\n tabindex=\"0\"\r\n aria-roledescription=\"carousel\"\r\n aria-live=\"polite\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n role=\"listbox\"\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n role=\"option\"\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n", styles: [".ngx-carousel{outline:none;overflow:hidden;position:relative;width:100%;height:auto}.ngx-carousel__list{display:flex;position:relative;width:100%;height:var(--carousel-list-height, 100%);margin:0;padding:0;list-style:none;-webkit-user-select:none;user-select:none;touch-action:pan-y;cursor:grab}.ngx-carousel__list.no-transition{transition:none!important}.ngx-carousel__slide{width:100%;height:100%;display:flex;flex-shrink:0;position:relative}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgxCarouselControlsComponent, selector: "lib-ngx-carousel-controls" }] });
511
511
  }
512
512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NgxCarouselComponent, decorators: [{
513
513
  type: Component,
@@ -517,7 +517,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
517
517
  NgxSwipeService,
518
518
  NgxStateService,
519
519
  NgxLayoutService,
520
- ], template: "<div\r\n class=\"ngx-carousel\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n", styles: [".ngx-carousel{outline:none;overflow:hidden;position:relative;width:100%;height:auto}.ngx-carousel__list{display:flex;position:relative;width:100%;height:var(--carousel-list-height, 100%);margin:0;padding:0;list-style:none;-webkit-user-select:none;user-select:none;touch-action:pan-y;cursor:grab}.ngx-carousel__list.no-transition{transition:none!important}.ngx-carousel__slide{width:100%;height:100%;display:flex;flex-shrink:0;position:relative}\n"] }]
520
+ ], template: "<div\r\n class=\"ngx-carousel\"\r\n tabindex=\"0\"\r\n aria-roledescription=\"carousel\"\r\n aria-live=\"polite\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n role=\"listbox\"\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n role=\"option\"\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n", styles: [".ngx-carousel{outline:none;overflow:hidden;position:relative;width:100%;height:auto}.ngx-carousel__list{display:flex;position:relative;width:100%;height:var(--carousel-list-height, 100%);margin:0;padding:0;list-style:none;-webkit-user-select:none;user-select:none;touch-action:pan-y;cursor:grab}.ngx-carousel__list.no-transition{transition:none!important}.ngx-carousel__slide{width:100%;height:100%;display:flex;flex-shrink:0;position:relative}\n"] }]
521
521
  }], propDecorators: { slides: [{
522
522
  type: Input,
523
523
  args: [{ required: true }]
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-freshok-carousel.mjs","sources":["../../../projects/carousel/src/lib/ngx-carousel.types.ts","../../../projects/carousel/src/lib/services/ngx-state.service.ts","../../../projects/carousel/src/lib/services/ngx-carousel.service.ts","../../../projects/carousel/src/lib/components/ngx-carousel-controls/ngx-carousel-controls.component.ts","../../../projects/carousel/src/lib/components/ngx-carousel-controls/ngx-carousel-controls.component.html","../../../projects/carousel/src/lib/services/ngx-autoplay..service.ts","../../../projects/carousel/src/lib/services/ngx-layout.service.ts","../../../projects/carousel/src/lib/services/ngx-swipe.service.ts","../../../projects/carousel/src/lib/ngx-carousel.component.ts","../../../projects/carousel/src/lib/ngx-carousel.component.html","../../../projects/carousel/src/public-api.ts","../../../projects/carousel/src/ngx-freshok-carousel.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface NgxCarouselBreakpoint extends NgxCarouselConfig {\r\n breakpoint: number; // Ширина экрана, при которой применяется конфигурация (max-width)\r\n}\r\n\r\nexport interface NgxCarouselConfig {\r\n autoplay?: boolean,\r\n interval?: number,\r\n loop?: boolean,\r\n pauseOnHover?: boolean;\r\n animation?: 'slide' | 'fade',\r\n startIndex?: number,\r\n slidesToShow?: number\r\n showArrows?: boolean;\r\n showDots?: boolean;\r\n spaceBetween?: number;\r\n speed?: number;\r\n breakpoints?: NgxCarouselBreakpoint[],\r\n}\r\n\r\nexport const DEFAULT_CAROUSEL_CONFIG: NgxCarouselConfig = {\r\n autoplay: true, // автопроигрывание слайдов\r\n interval: 5000, // время переключения слайдов\r\n loop: true, // бесконечная прокрутка\r\n pauseOnHover: true, // останавливать автопрокрутку при наведении\r\n animation: 'slide', // тип анимации\r\n startIndex: 0, // начальный номер слайда\r\n slidesToShow: 1, // по умолчанию показываем 1 слайд\r\n showArrows: true,\r\n showDots: true,\r\n spaceBetween: 0,\r\n speed: 500,\r\n breakpoints: [], // по умолчанию нет брейкпоинтов\r\n}\r\n\r\nexport const NGX_CAROUSEL_CONFIG = new InjectionToken<NgxCarouselConfig>(\r\n 'NGX_CAROUSEL_CONFIG'\r\n);\r\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { DEFAULT_CAROUSEL_CONFIG, NGX_CAROUSEL_CONFIG, NgxCarouselConfig } from '../ngx-carousel.types';\r\n\r\n@Injectable()\r\nexport class NgxStateService {\r\n private config = signal<NgxCarouselConfig>({});\r\n width = signal(0)\r\n slides = signal<any[]>([]);\r\n currentSlide = signal(0);\r\n\r\n private appCfg = inject(NGX_CAROUSEL_CONFIG, { optional: true });\r\n\r\n /* ========= ACTIVECONFIG ========= */\r\n activeConfig = computed(() => {\r\n return {\r\n ...DEFAULT_CAROUSEL_CONFIG,\r\n ...this.appCfg ?? {},\r\n ...this.config(),\r\n ...this.activeBreakpoint() ?? {}\r\n }\r\n })\r\n\r\n slidesToShow = computed(() => this.activeConfig().slidesToShow ?? 1);\r\n autoplay = computed(() => this.activeConfig().autoplay ?? true);\r\n interval = computed(() => this.activeConfig().interval ?? 5000);\r\n pauseOnHover = computed(() => this.activeConfig().pauseOnHover ?? true);\r\n space = computed(() => this.activeConfig().spaceBetween ?? 0);\r\n isFade = computed(() => this.activeConfig().animation === 'fade');\r\n loop = computed(() => this.activeConfig().loop)\r\n isArrows = computed(() => this.activeConfig().showArrows)\r\n isDots = computed(() => this.activeConfig().showDots)\r\n speed = computed(() => this.activeConfig().speed ?? 500)\r\n\r\n /* ========= BREAKPOINTS ========= */\r\n activeBreakpoint = computed<Partial<NgxCarouselConfig> | null>(() => {\r\n const breakpoints = this.config().breakpoints ?? []\r\n const w = this.width();\r\n\r\n return [...breakpoints]\r\n .sort((a, b) => b.breakpoint - a.breakpoint)\r\n .find(bp => w >= bp.breakpoint) ?? null\r\n })\r\n\r\n /* ========= CLONES ========= */\r\n slidesWithClones = computed(() => {\r\n if (this.isFade()) {\r\n return this.slides();\r\n }\r\n\r\n const slides = this.slides();\r\n const count = this.slidesToShow();\r\n\r\n if (!this.loop() || slides.length < count) {\r\n return slides;\r\n }\r\n\r\n return [\r\n ...slides.slice(-count),\r\n ...slides,\r\n ...slides.slice(0, count),\r\n ];\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const slides = this.slides()\r\n const cfg = this.activeConfig()\r\n\r\n if (!slides.length) return\r\n\r\n const index = this.loop() ?\r\n (cfg.startIndex ?? 0) + this.slidesToShow() :\r\n cfg.startIndex ?? 0\r\n\r\n this.setCurrentSlide(index)\r\n })\r\n\r\n // setInterval(() => {\r\n // console.log(\"ACTIVE\", this.activeConfig())\r\n\r\n // }, 1000)\r\n setTimeout(() => {\r\n console.log(\"ACTIVE\", this.activeConfig())\r\n\r\n }, 2000)\r\n }\r\n\r\n /* ========= INIT ========= */\r\n init(customConfig: NgxCarouselConfig = {}) {\r\n this.config.set({\r\n ...DEFAULT_CAROUSEL_CONFIG,\r\n ...this.appCfg ?? {},\r\n ...customConfig\r\n });\r\n // console.log(\"🔸 this.config:\", this.config())\r\n }\r\n\r\n setWidth(width: number) {\r\n this.width.set(width)\r\n // console.log(\"ACTIVE\", this.activeConfig())\r\n }\r\n\r\n setSlides(slides: any[]) {\r\n this.slides.set(slides);\r\n }\r\n\r\n setCurrentSlide(index: number) {\r\n this.currentSlide.set(index);\r\n }\r\n}\r\n","import { inject, Injectable, signal } from '@angular/core';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxCarouselService {\r\n private state = inject(NgxStateService)\r\n\r\n private jumpTimer: any = null;\r\n\r\n disableTransition = signal(false);\r\n isAnimating = signal(false);\r\n\r\n\r\n next() {\r\n if (!this.startAnimation()) return\r\n\r\n const length = this.state.slidesWithClones().length\r\n if (length <= 1) return;\r\n\r\n if (this.state.isFade()) {\r\n const nextNum = (this.state.currentSlide() + 1) % length\r\n this.state.setCurrentSlide(nextNum)\r\n return\r\n }\r\n\r\n this.disableTransition.set(false);\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow()\r\n\r\n if (this.state.loop()) {\r\n // Переходим к следующему слайду (даже если это клон)\r\n this.state.setCurrentSlide(current + 1);\r\n\r\n // Если достигли клона\r\n if (current + slidesToShow >= length - 1) {\r\n // Сбрасываем на первый оригинальный слайд\r\n const index = this.getRealIndex(current + 1)\r\n this.scheduleJumpToReal(index);\r\n }\r\n } else if (current + 1 < length) {\r\n // В режиме без loop просто проверяем границы\r\n this.state.setCurrentSlide(current + 1);\r\n }\r\n }\r\n\r\n prev() {\r\n if (!this.startAnimation()) return;\r\n\r\n const length = this.state.slidesWithClones().length;\r\n if (length <= 1) return;\r\n\r\n if (this.state.isFade()) {\r\n const prev = (this.state.currentSlide() - 1 + length) % length;\r\n this.state.setCurrentSlide(prev);\r\n return;\r\n }\r\n\r\n this.disableTransition.set(false);\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n\r\n if (this.state.activeConfig().loop) {\r\n // Переходим к предыдущему слайду (даже если это клон)\r\n this.state.setCurrentSlide(current - 1);\r\n\r\n if (current - slidesToShow <= 0) {\r\n const index = this.getRealIndex(current - 1);\r\n this.scheduleJumpToReal(index);\r\n }\r\n } else if (current > 0) {\r\n this.state.setCurrentSlide(current - 1);\r\n }\r\n }\r\n\r\n private scheduleJumpToReal(realIndex: number) {\r\n //Если таймер уже запущен, то остановить и обнулить\r\n if (this.jumpTimer) {\r\n clearTimeout(this.jumpTimer)\r\n this.jumpTimer = null\r\n }\r\n\r\n const slidesToShow = this.state.slidesToShow()\r\n const realTarget = realIndex + slidesToShow\r\n\r\n // Заново запысываем новый таймер\r\n this.jumpTimer = setTimeout(() => {\r\n this.disableTransition.set(true)\r\n this.state.setCurrentSlide(realTarget)\r\n\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n this.disableTransition.set(false)\r\n if (this.jumpTimer) {\r\n clearTimeout(this.jumpTimer)\r\n this.jumpTimer = null\r\n }\r\n })\r\n })\r\n }, this.state.speed());\r\n }\r\n\r\n goTo(index: number) {\r\n const length = this.state.slides().length\r\n if (length <= 0) return;\r\n\r\n const slidestToShow = this.state.slidesToShow();\r\n\r\n if (this.state.loop()) {\r\n // В режиме loop просто устанавливаем целевой индекс\r\n this.state.setCurrentSlide(index + slidestToShow);\r\n } else {\r\n this.state.setCurrentSlide(index);\r\n }\r\n }\r\n\r\n getDisplayIndex(): number {\r\n const length = this.state.slidesWithClones().length;\r\n if (length <= 0) return 0;\r\n\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n\r\n // Если loop отключен, то просто вернем индекс текущего слайда\r\n if (!this.state.loop()) return current;\r\n\r\n // Если на клоне последнего (индекс 0), показываем последний реальный\r\n if (current === 0) return length - 1;\r\n\r\n // Если на клоне первого (индекс len + 1), показываем первый реальный\r\n if (current === length - slidesToShow) return 0;\r\n\r\n // Иначе вычитаем slidesToShow, так как реальные слайды начинаются с индекса slidesToShow\r\n return current - slidesToShow;\r\n }\r\n\r\n startAnimation(): boolean {\r\n if (this.isAnimating()) return false;\r\n this.isAnimating.set(true);\r\n\r\n const duration = this.state.speed();\r\n\r\n setTimeout(() => {\r\n this.isAnimating.set(false);\r\n }, duration);\r\n\r\n return true;\r\n }\r\n\r\n private getRealIndex(virtualIndex: number): number {\r\n const length = this.state.slides().length\r\n const slidesToShow = this.state.slidesToShow()\r\n\r\n if (!this.state.loop()) return virtualIndex\r\n\r\n let real = virtualIndex - slidesToShow\r\n\r\n if (real < 0) real += length\r\n if (real >= length) real -= length\r\n\r\n return real\r\n }\r\n\r\n shiftBy(slidesDragged: number) {\r\n if (slidesDragged === 0) return;\r\n if (!this.startAnimation()) return;\r\n\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n const total = this.state.slidesWithClones().length;\r\n\r\n let target = current + slidesDragged;\r\n\r\n this.disableTransition.set(false);\r\n\r\n if (!this.state.loop()) {\r\n const max = total - slidesToShow;\r\n target = Math.max(0, Math.min(target, max));\r\n this.state.setCurrentSlide(target);\r\n return;\r\n }\r\n\r\n this.state.setCurrentSlide(target);\r\n\r\n // вычисляем РЕАЛЬНЫЙ индекс\r\n const realIndex = this.getRealIndex(target);\r\n\r\n // если ушли в клоны — снапаемся туда же, но в реальной зоне\r\n if (target < slidesToShow || target >= total - slidesToShow) {\r\n this.scheduleJumpToReal(realIndex);\r\n }\r\n }\r\n}\r\n","import { Component, inject, } from '@angular/core';\r\nimport { NgxCarouselService } from '../../services/ngx-carousel.service';\r\nimport { NgxStateService } from '../../services/ngx-state.service';\r\n\r\n@Component({\r\n selector: 'lib-ngx-carousel-controls',\r\n imports: [],\r\n templateUrl: './ngx-carousel-controls.component.html',\r\n styleUrl: './ngx-carousel-controls.component.scss',\r\n})\r\nexport class NgxCarouselControlsComponent {\r\n carousel = inject(NgxCarouselService);\r\n state = inject(NgxStateService)\r\n}\r\n","@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n (click)=\"carousel.prev()\"\r\n >\r\n Prev\r\n </button>\r\n \r\n <button\r\n (click)=\"carousel.next()\"\r\n >\r\n Next\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n","import { effect, inject, Injectable, signal } from '@angular/core';\r\nimport { NgxCarouselService } from './ngx-carousel.service';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxAutoplayService {\r\n private carousel = inject(NgxCarouselService)\r\n state = inject(NgxStateService)\r\n private isPlaying = signal(true)\r\n private timerAutoplay: any = null\r\n\r\n constructor() {\r\n effect(() => {\r\n if(!this.state.autoplay() || this.state.slides().length <= 1) {\r\n this.stop()\r\n return\r\n }\r\n\r\n this.state.autoplay() ?\r\n this.resume() :\r\n this.stop()\r\n })\r\n }\r\n\r\n private start() {\r\n\r\n if (!this.state.autoplay() || !this.isPlaying()) return\r\n \r\n this.stop()\r\n const delay = this.state.interval() ?? 5000\r\n this.timerAutoplay = setInterval(() => this.carousel.next(), delay )\r\n }\r\n\r\n stop() {\r\n this.isPlaying.set(false)\r\n if (this.timerAutoplay) {\r\n clearInterval(this.timerAutoplay)\r\n this.timerAutoplay = null\r\n }\r\n }\r\n\r\n pause() {\r\n if(this.state.pauseOnHover()) {\r\n this.stop();\r\n }\r\n }\r\n\r\n resume() {\r\n if(this.state.autoplay()) {\r\n this.isPlaying.set(true);\r\n\r\n setTimeout(() => this.start(), 0);\r\n }\r\n }\r\n}\r\n","import { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxLayoutService {\r\n\r\n private state = inject(NgxStateService);\r\n\r\n /* ========= GEOMETRY ========= */\r\n slideWidthPx = computed(() => \r\n this.state.width() / this.state.slidesToShow() - this.state.space() / 2\r\n );\r\n\r\n slideStepPx = computed(() => this.slideWidthPx() + this.state.space());\r\n\r\n translatePx = computed(() => {\r\n if (this.state.isFade()) return 'none';\r\n return `translate(-${this.state.currentSlide() * this.slideStepPx()}px)`;\r\n });\r\n}\r\n","import { ElementRef, inject, Injectable, Renderer2, signal } from '@angular/core';\r\nimport { NgxCarouselService } from './ngx-carousel.service';\r\nimport { NgxAutoplayService } from './ngx-autoplay..service';\r\nimport { NgxStateService } from './ngx-state.service';\r\nimport { NgxLayoutService } from './ngx-layout.service';\r\n\r\n@Injectable()\r\nexport class NgxSwipeService {\r\n // Порог в пикселях для различения клика и свайпа\r\n private readonly CLICK_LIMIT = 5; // px\r\n private readonly SWIPE_LIMIT = 0.05; // %\r\n\r\n private carousel = inject(NgxCarouselService);\r\n private autoplay = inject(NgxAutoplayService);\r\n private state = inject(NgxStateService)\r\n private layout = inject(NgxLayoutService)\r\n\r\n private renderer!: Renderer2;\r\n private carouselList!: ElementRef<HTMLDivElement>;\r\n private startX = 0;\r\n private currentX = 0;\r\n\r\n private isSwiping = signal(false);\r\n // private config = computed(() => this.carousel.getConfig())\r\n\r\n // Определяем, был ли свайп достаточным, чтобы считать его жестом, а не кликом.\r\n // Будет использоваться для блокировки кликов по ссылкам.\r\n isSwipedEnough = signal(false);\r\n\r\n registerSlideList(element: ElementRef<HTMLDivElement>) {\r\n this.carouselList = element;\r\n }\r\n\r\n setRenderer(renderer: Renderer2) {\r\n this.renderer = renderer;\r\n }\r\n\r\n onPointerDown(event: PointerEvent) {\r\n if (this.carousel.isAnimating()) return\r\n\r\n this.startX = event.clientX;\r\n this.currentX = 0;\r\n this.isSwipedEnough.set(false);\r\n this.isSwiping.set(true);\r\n this.autoplay.stop();\r\n\r\n // Отключаем transition в начале свайпа (через Renderer2)\r\n this.renderer.setStyle(this.carouselList.nativeElement, 'transition', 'none');\r\n }\r\n\r\n onPointerMove(event: PointerEvent) {\r\n this.currentX = event.clientX - this.startX\r\n\r\n if (this.state.isFade()) return\r\n if (!this.isSwiping()) return;\r\n\r\n // Если отключена бесконечная прокрутка, то останавливаем свайп\r\n // при достижении первого и последнего слайда\r\n if (!this.state.loop()) {\r\n const length = this.state.slides().length\r\n const current = this.state.currentSlide();\r\n const slidesToshow = this.state.slidesToShow()\r\n\r\n if ((current <= 0) && (this.currentX > 0)) return // свайпаем на предыдущий слайд\r\n if ((current >= length - slidesToshow) && (this.currentX < 0)) return // свайпаем на следующий слайд\r\n }\r\n\r\n // Проверяем, превысили ли мы порог, чтобы считать это \"свайпом\", а не кликом\r\n if (Math.abs(this.currentX) > this.CLICK_LIMIT) {\r\n this.isSwipedEnough.set(true);\r\n\r\n // pointercapture гарантирует, что все pointermove события будут приходить на этот элемент, \r\n // даже если палец/мышь вышли за пределы слайдера.\r\n // Без него свайп часто \"обрывается\", если пользователь ведёт чуть в сторону.\r\n this.carouselList.nativeElement.setPointerCapture(event.pointerId);\r\n }\r\n\r\n // Смещение в пикселях к текущему слайду\r\n const baseTranslate = -this.state.currentSlide() * this.layout.slideStepPx()\r\n\r\n // Смещение в пикселях (текущее + пользовательское)\r\n const offsetPx = baseTranslate + this.currentX\r\n\r\n // Обновляем transform напрямую\r\n this.renderer.setStyle(\r\n this.carouselList.nativeElement,\r\n 'transform',\r\n `translateX(${offsetPx}px)`\r\n );\r\n }\r\n\r\n onPointerUp(event: PointerEvent) {\r\n if (this.state.isFade()) {\r\n if (this.currentX < -50) this.carousel.next()\r\n if (this.currentX > 50) this.carousel.prev()\r\n\r\n this.isSwiping.set(false)\r\n return\r\n }\r\n\r\n if (!this.isSwiping()) return;\r\n\r\n // 1. Включаем transition обратно, прежде чем менять currentSlide()\r\n this.renderer.setStyle(\r\n this.carouselList.nativeElement,\r\n 'transition',\r\n `transform ${this.state.speed()}ms ease`\r\n );\r\n\r\n const swipeDistance = this.currentX;\r\n const limit = this.carouselList.nativeElement.clientWidth * this.SWIPE_LIMIT;\r\n const step = this.layout.slideStepPx()\r\n const slidesDragged = Math.round(swipeDistance / step) * -1 // сколько слайдов было пролистано за одно перерягивание. Домножаем на -1 так как направление перетягивания swipeDistance по своему знаку противоположно той стороне, куда нужно сместить слайды. То есть при свайпе вправо (листаем вперед), swipeDistance станет отрицательным, а слайды нам нужно сдвинуть в бОльшую сторону\r\n\r\n if (swipeDistance < -limit) {\r\n Math.abs(slidesDragged) > 0 ?\r\n this.carousel.shiftBy(slidesDragged) :\r\n this.carousel.next()\r\n } else if (swipeDistance > limit) {\r\n Math.abs(slidesDragged) > 0 ?\r\n this.carousel.shiftBy(slidesDragged) :\r\n this.carousel.prev()\r\n } else {\r\n // Возврат на место, так как длинна свайпа недостаточная по длинне \r\n // (так как transition уже включен, это будет плавно)\r\n this.snapBack();\r\n }\r\n\r\n // 2. Сбрасываем флаги\r\n this.isSwiping.set(false);\r\n this.isSwipedEnough.set(false);\r\n this.currentX = 0;\r\n this.autoplay.resume();\r\n }\r\n\r\n private snapBack() {\r\n const offsetPx = -this.state.currentSlide() * this.layout.slideStepPx();\r\n\r\n // Просто устанавливаем transform в текущую позицию. Transition уже включен в onPointerUp.\r\n this.renderer\r\n .setStyle(\r\n this.carouselList.nativeElement,\r\n 'transform',\r\n `translateX(${offsetPx}px)`\r\n )\r\n }\r\n}","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnInit,\r\n Renderer2,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { NgxCarouselService } from './services/ngx-carousel.service';\r\nimport { NgxCarouselControlsComponent } from './components/ngx-carousel-controls/ngx-carousel-controls.component';\r\nimport { NgxAutoplayService } from './services/ngx-autoplay..service';\r\nimport { NgxSwipeService } from './services/ngx-swipe.service';\r\nimport { NgxStateService } from './services/ngx-state.service';\r\nimport { NgxCarouselConfig } from './ngx-carousel.types';\r\nimport { NgxLayoutService } from './services/ngx-layout.service';\r\n\r\n@Component({\r\n selector: 'lib-ngx-carousel',\r\n imports: [NgTemplateOutlet, NgxCarouselControlsComponent],\r\n templateUrl: './ngx-carousel.component.html',\r\n styleUrl: './ngx-carousel.component.scss',\r\n providers: [\r\n NgxCarouselService,\r\n NgxAutoplayService,\r\n NgxSwipeService,\r\n NgxStateService,\r\n NgxLayoutService,\r\n ],\r\n})\r\nexport class NgxCarouselComponent implements OnInit, AfterViewInit {\r\n @Input({ required: true }) slides!: any[];\r\n @Input() config!: NgxCarouselConfig;\r\n\r\n @ViewChild('carouselList', { static: true }) \r\n carouselList!: ElementRef<HTMLDivElement>;\r\n @ContentChild('slideTemplate', { static: true }) \r\n slideTemplate!: TemplateRef<any>;\r\n @ContentChild('controlsTemplate', {static: true}) \r\n controlsTemplate!: TemplateRef<any>\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private resizeObserver!: ResizeObserver;\r\n\r\n carousel = inject(NgxCarouselService);\r\n autoplay = inject(NgxAutoplayService);\r\n swipe = inject(NgxSwipeService);\r\n state = inject(NgxStateService);\r\n layout = inject(NgxLayoutService);\r\n\r\n ngOnInit() {\r\n this.watchResize();\r\n this.state.init(this.config)\r\n this.state.setSlides(this.slides)\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.swipe.registerSlideList(this.carouselList);\r\n this.swipe.setRenderer(this.renderer);\r\n\r\n this.resizeObserver.observe(this.carouselList.nativeElement);\r\n }\r\n\r\n private watchResize() {\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n const width = entries[0].contentRect.width;\r\n this.state.setWidth(width);\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"ngx-carousel\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of carousel\r\n */\r\n\r\nexport * from './lib/ngx-carousel.component';\r\nexport * from './lib/ngx-carousel.types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-freshok-carousel.mjs","sources":["../../../projects/carousel/src/lib/ngx-carousel.types.ts","../../../projects/carousel/src/lib/services/ngx-state.service.ts","../../../projects/carousel/src/lib/services/ngx-carousel.service.ts","../../../projects/carousel/src/lib/components/ngx-carousel-controls/ngx-carousel-controls.component.ts","../../../projects/carousel/src/lib/components/ngx-carousel-controls/ngx-carousel-controls.component.html","../../../projects/carousel/src/lib/services/ngx-autoplay..service.ts","../../../projects/carousel/src/lib/services/ngx-layout.service.ts","../../../projects/carousel/src/lib/services/ngx-swipe.service.ts","../../../projects/carousel/src/lib/ngx-carousel.component.ts","../../../projects/carousel/src/lib/ngx-carousel.component.html","../../../projects/carousel/src/public-api.ts","../../../projects/carousel/src/ngx-freshok-carousel.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport interface NgxCarouselBreakpoint extends NgxCarouselConfig {\r\n breakpoint: number; // Ширина экрана, при которой применяется конфигурация (max-width)\r\n}\r\n\r\nexport interface NgxCarouselConfig {\r\n autoplay?: boolean,\r\n interval?: number,\r\n loop?: boolean,\r\n pauseOnHover?: boolean;\r\n animation?: 'slide' | 'fade',\r\n startIndex?: number,\r\n slidesToShow?: number\r\n showArrows?: boolean;\r\n showDots?: boolean;\r\n spaceBetween?: number;\r\n speed?: number;\r\n breakpoints?: NgxCarouselBreakpoint[],\r\n}\r\n\r\nexport const DEFAULT_CAROUSEL_CONFIG: NgxCarouselConfig = {\r\n autoplay: true, // автопроигрывание слайдов\r\n interval: 5000, // время переключения слайдов\r\n loop: true, // бесконечная прокрутка\r\n pauseOnHover: true, // останавливать автопрокрутку при наведении\r\n animation: 'slide', // тип анимации\r\n startIndex: 0, // начальный номер слайда\r\n slidesToShow: 1, // по умолчанию показываем 1 слайд\r\n showArrows: true,\r\n showDots: true,\r\n spaceBetween: 0,\r\n speed: 500,\r\n breakpoints: [], // по умолчанию нет брейкпоинтов\r\n}\r\n\r\nexport const NGX_CAROUSEL_CONFIG = new InjectionToken<NgxCarouselConfig>(\r\n 'NGX_CAROUSEL_CONFIG'\r\n);\r\n","import { computed, effect, inject, Injectable, signal } from '@angular/core';\r\nimport { DEFAULT_CAROUSEL_CONFIG, NGX_CAROUSEL_CONFIG, NgxCarouselConfig } from '../ngx-carousel.types';\r\n\r\n@Injectable()\r\nexport class NgxStateService {\r\n private config = signal<NgxCarouselConfig>({});\r\n width = signal(0)\r\n slides = signal<any[]>([]);\r\n currentSlide = signal(0);\r\n\r\n private appCfg = inject(NGX_CAROUSEL_CONFIG, { optional: true });\r\n\r\n /* ========= ACTIVECONFIG ========= */\r\n activeConfig = computed(() => {\r\n return {\r\n ...DEFAULT_CAROUSEL_CONFIG,\r\n ...this.appCfg ?? {},\r\n ...this.config(),\r\n ...this.activeBreakpoint() ?? {}\r\n }\r\n })\r\n\r\n slidesToShow = computed(() => this.activeConfig().slidesToShow ?? 1);\r\n autoplay = computed(() => this.activeConfig().autoplay ?? true);\r\n interval = computed(() => this.activeConfig().interval ?? 5000);\r\n pauseOnHover = computed(() => this.activeConfig().pauseOnHover ?? true);\r\n space = computed(() => this.activeConfig().spaceBetween ?? 0);\r\n isFade = computed(() => this.activeConfig().animation === 'fade');\r\n loop = computed(() => this.activeConfig().loop)\r\n isArrows = computed(() => this.activeConfig().showArrows)\r\n isDots = computed(() => this.activeConfig().showDots)\r\n speed = computed(() => this.activeConfig().speed ?? 500)\r\n\r\n /* ========= BREAKPOINTS ========= */\r\n activeBreakpoint = computed<Partial<NgxCarouselConfig> | null>(() => {\r\n const breakpoints = this.config().breakpoints ?? []\r\n const w = this.width();\r\n\r\n return [...breakpoints]\r\n .sort((a, b) => b.breakpoint - a.breakpoint)\r\n .find(bp => w >= bp.breakpoint) ?? null\r\n })\r\n\r\n /* ========= CLONES ========= */\r\n slidesWithClones = computed(() => {\r\n if (this.isFade()) {\r\n return this.slides();\r\n }\r\n\r\n const slides = this.slides();\r\n const count = this.slidesToShow();\r\n\r\n if (!this.loop() || slides.length < count) {\r\n return slides;\r\n }\r\n\r\n return [\r\n ...slides.slice(-count),\r\n ...slides,\r\n ...slides.slice(0, count),\r\n ];\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const slides = this.slides()\r\n const cfg = this.activeConfig()\r\n\r\n if (!slides.length) return\r\n\r\n const index = this.loop() ?\r\n (cfg.startIndex ?? 0) + this.slidesToShow() :\r\n cfg.startIndex ?? 0\r\n\r\n this.setCurrentSlide(index)\r\n })\r\n\r\n // setInterval(() => {\r\n // console.log(\"ACTIVE\", this.activeConfig())\r\n\r\n // }, 1000)\r\n setTimeout(() => {\r\n console.log(\"ACTIVE\", this.activeConfig())\r\n\r\n }, 2000)\r\n }\r\n\r\n /* ========= INIT ========= */\r\n init(customConfig: NgxCarouselConfig = {}) {\r\n this.config.set({\r\n ...DEFAULT_CAROUSEL_CONFIG,\r\n ...this.appCfg ?? {},\r\n ...customConfig\r\n });\r\n // console.log(\"🔸 this.config:\", this.config())\r\n }\r\n\r\n setWidth(width: number) {\r\n this.width.set(width)\r\n // console.log(\"ACTIVE\", this.activeConfig())\r\n }\r\n\r\n setSlides(slides: any[]) {\r\n this.slides.set(slides);\r\n }\r\n\r\n setCurrentSlide(index: number) {\r\n this.currentSlide.set(index);\r\n }\r\n}\r\n","import { inject, Injectable, signal } from '@angular/core';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxCarouselService {\r\n private state = inject(NgxStateService)\r\n\r\n private jumpTimer: any = null;\r\n\r\n disableTransition = signal(false);\r\n isAnimating = signal(false);\r\n\r\n\r\n next() {\r\n if (!this.startAnimation()) return\r\n\r\n const length = this.state.slidesWithClones().length\r\n if (length <= 1) return;\r\n\r\n if (this.state.isFade()) {\r\n const nextNum = (this.state.currentSlide() + 1) % length\r\n this.state.setCurrentSlide(nextNum)\r\n return\r\n }\r\n\r\n this.disableTransition.set(false);\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow()\r\n\r\n if (this.state.loop()) {\r\n // Переходим к следующему слайду (даже если это клон)\r\n this.state.setCurrentSlide(current + 1);\r\n\r\n // Если достигли клона\r\n if (current + slidesToShow >= length - 1) {\r\n // Сбрасываем на первый оригинальный слайд\r\n const index = this.getRealIndex(current + 1)\r\n this.scheduleJumpToReal(index);\r\n }\r\n } else if (current + 1 < length) {\r\n // В режиме без loop просто проверяем границы\r\n this.state.setCurrentSlide(current + 1);\r\n }\r\n }\r\n\r\n prev() {\r\n if (!this.startAnimation()) return;\r\n\r\n const length = this.state.slidesWithClones().length;\r\n if (length <= 1) return;\r\n\r\n if (this.state.isFade()) {\r\n const prev = (this.state.currentSlide() - 1 + length) % length;\r\n this.state.setCurrentSlide(prev);\r\n return;\r\n }\r\n\r\n this.disableTransition.set(false);\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n\r\n if (this.state.activeConfig().loop) {\r\n // Переходим к предыдущему слайду (даже если это клон)\r\n this.state.setCurrentSlide(current - 1);\r\n\r\n if (current - slidesToShow <= 0) {\r\n const index = this.getRealIndex(current - 1);\r\n this.scheduleJumpToReal(index);\r\n }\r\n } else if (current > 0) {\r\n this.state.setCurrentSlide(current - 1);\r\n }\r\n }\r\n\r\n private scheduleJumpToReal(realIndex: number) {\r\n //Если таймер уже запущен, то остановить и обнулить\r\n if (this.jumpTimer) {\r\n clearTimeout(this.jumpTimer)\r\n this.jumpTimer = null\r\n }\r\n\r\n const slidesToShow = this.state.slidesToShow()\r\n const realTarget = realIndex + slidesToShow\r\n\r\n // Заново запысываем новый таймер\r\n this.jumpTimer = setTimeout(() => {\r\n this.disableTransition.set(true)\r\n this.state.setCurrentSlide(realTarget)\r\n\r\n requestAnimationFrame(() => {\r\n requestAnimationFrame(() => {\r\n this.disableTransition.set(false)\r\n if (this.jumpTimer) {\r\n clearTimeout(this.jumpTimer)\r\n this.jumpTimer = null\r\n }\r\n })\r\n })\r\n }, this.state.speed());\r\n }\r\n\r\n goTo(index: number) {\r\n const length = this.state.slides().length\r\n if (length <= 0) return;\r\n\r\n const slidestToShow = this.state.slidesToShow();\r\n\r\n if (this.state.loop()) {\r\n // В режиме loop просто устанавливаем целевой индекс\r\n this.state.setCurrentSlide(index + slidestToShow);\r\n } else {\r\n this.state.setCurrentSlide(index);\r\n }\r\n }\r\n\r\n getDisplayIndex(): number {\r\n const length = this.state.slidesWithClones().length;\r\n if (length <= 0) return 0;\r\n\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n\r\n // Если loop отключен, то просто вернем индекс текущего слайда\r\n if (!this.state.loop()) return current;\r\n\r\n // Если на клоне последнего (индекс 0), показываем последний реальный\r\n if (current === 0) return length - 1;\r\n\r\n // Если на клоне первого (индекс len + 1), показываем первый реальный\r\n if (current === length - slidesToShow) return 0;\r\n\r\n // Иначе вычитаем slidesToShow, так как реальные слайды начинаются с индекса slidesToShow\r\n return current - slidesToShow;\r\n }\r\n\r\n startAnimation(): boolean {\r\n if (this.isAnimating()) return false;\r\n this.isAnimating.set(true);\r\n\r\n const duration = this.state.speed();\r\n\r\n setTimeout(() => {\r\n this.isAnimating.set(false);\r\n }, duration);\r\n\r\n return true;\r\n }\r\n\r\n private getRealIndex(virtualIndex: number): number {\r\n const length = this.state.slides().length\r\n const slidesToShow = this.state.slidesToShow()\r\n\r\n if (!this.state.loop()) return virtualIndex\r\n\r\n let real = virtualIndex - slidesToShow\r\n\r\n if (real < 0) real += length\r\n if (real >= length) real -= length\r\n\r\n return real\r\n }\r\n\r\n shiftBy(slidesDragged: number) {\r\n if (slidesDragged === 0) return;\r\n if (!this.startAnimation()) return;\r\n\r\n const current = this.state.currentSlide();\r\n const slidesToShow = this.state.slidesToShow();\r\n const total = this.state.slidesWithClones().length;\r\n\r\n let target = current + slidesDragged;\r\n\r\n this.disableTransition.set(false);\r\n\r\n if (!this.state.loop()) {\r\n const max = total - slidesToShow;\r\n target = Math.max(0, Math.min(target, max));\r\n this.state.setCurrentSlide(target);\r\n return;\r\n }\r\n\r\n this.state.setCurrentSlide(target);\r\n\r\n // вычисляем РЕАЛЬНЫЙ индекс\r\n const realIndex = this.getRealIndex(target);\r\n\r\n // если ушли в клоны — снапаемся туда же, но в реальной зоне\r\n if (target < slidesToShow || target >= total - slidesToShow) {\r\n this.scheduleJumpToReal(realIndex);\r\n }\r\n }\r\n}\r\n","import { Component, inject, } from '@angular/core';\r\nimport { NgxCarouselService } from '../../services/ngx-carousel.service';\r\nimport { NgxStateService } from '../../services/ngx-state.service';\r\n\r\n@Component({\r\n selector: 'lib-ngx-carousel-controls',\r\n imports: [],\r\n templateUrl: './ngx-carousel-controls.component.html',\r\n styleUrl: './ngx-carousel-controls.component.scss',\r\n})\r\nexport class NgxCarouselControlsComponent {\r\n carousel = inject(NgxCarouselService);\r\n state = inject(NgxStateService)\r\n}\r\n","@if(state.isArrows()) {\r\n <div class=\"ngx-carousel__controls\">\r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n (click)=\"carousel.prev()\"\r\n aria-label=\"Previous slide\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.617 20.0762C10.8882 19.805 10.8882 19.3654 10.617 19.0942L1.80242 10.2796L10.617 1.46497C10.8882 1.19379 10.8882 0.754138 10.617 0.482966C10.3459 0.211794 9.90621 0.211794 9.63504 0.482966L0.565868 9.55214C0.164103 9.9539 0.164103 10.6053 0.565868 11.007L9.63504 20.0762C9.90621 20.3474 10.3459 20.3474 10.617 20.0762Z\"></path></svg>\r\n </button>\r\n \r\n <button\r\n type=\"button\"\r\n class=\"ngx-carousel__btn\"\r\n aria-label=\"Next slide\"\r\n (click)=\"carousel.next()\"\r\n >\r\n <svg width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\"></path></svg>\r\n </button>\r\n </div>\r\n}\r\n\r\n@if(state.isDots()) {\r\n <div class=\"ngx-carousel__controls bullets\">\r\n <div \r\n role=\"tablist\"\r\n aria-label=\"Carousel indicators\"\r\n class=\"ngx-carousel__dots\"\r\n >\r\n @for(dot of state.slides(); track $index; let i = $index) {\r\n <button\r\n type=\"button\"\r\n [attr.aria-selected]=\"carousel.getDisplayIndex() == i\"\r\n class=\"ngx-carousel__dot\"\r\n [class.active]=\"carousel.getDisplayIndex() == i\"\r\n (click)=\"carousel.goTo(i)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n}\r\n\r\n\r\n","import { effect, inject, Injectable, signal } from '@angular/core';\r\nimport { NgxCarouselService } from './ngx-carousel.service';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxAutoplayService {\r\n private carousel = inject(NgxCarouselService)\r\n state = inject(NgxStateService)\r\n private isPlaying = signal(true)\r\n private timerAutoplay: any = null\r\n\r\n constructor() {\r\n effect(() => {\r\n if(!this.state.autoplay() || this.state.slides().length <= 1) {\r\n this.stop()\r\n return\r\n }\r\n\r\n this.state.autoplay() ?\r\n this.resume() :\r\n this.stop()\r\n })\r\n }\r\n\r\n private start() {\r\n\r\n if (!this.state.autoplay() || !this.isPlaying()) return\r\n \r\n this.stop()\r\n const delay = this.state.interval() ?? 5000\r\n this.timerAutoplay = setInterval(() => this.carousel.next(), delay )\r\n }\r\n\r\n stop() {\r\n this.isPlaying.set(false)\r\n if (this.timerAutoplay) {\r\n clearInterval(this.timerAutoplay)\r\n this.timerAutoplay = null\r\n }\r\n }\r\n\r\n pause() {\r\n if(this.state.pauseOnHover()) {\r\n this.stop();\r\n }\r\n }\r\n\r\n resume() {\r\n if(this.state.autoplay()) {\r\n this.isPlaying.set(true);\r\n\r\n setTimeout(() => this.start(), 0);\r\n }\r\n }\r\n}\r\n","import { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { NgxStateService } from './ngx-state.service';\r\n\r\n@Injectable()\r\nexport class NgxLayoutService {\r\n\r\n private state = inject(NgxStateService);\r\n\r\n /* ========= GEOMETRY ========= */\r\n slideWidthPx = computed(() => \r\n this.state.width() / this.state.slidesToShow() - this.state.space() / 2\r\n );\r\n\r\n slideStepPx = computed(() => this.slideWidthPx() + this.state.space());\r\n\r\n translatePx = computed(() => {\r\n if (this.state.isFade()) return 'none';\r\n return `translate(-${this.state.currentSlide() * this.slideStepPx()}px)`;\r\n });\r\n}\r\n","import { ElementRef, inject, Injectable, Renderer2, signal } from '@angular/core';\r\nimport { NgxCarouselService } from './ngx-carousel.service';\r\nimport { NgxAutoplayService } from './ngx-autoplay..service';\r\nimport { NgxStateService } from './ngx-state.service';\r\nimport { NgxLayoutService } from './ngx-layout.service';\r\n\r\n@Injectable()\r\nexport class NgxSwipeService {\r\n // Порог в пикселях для различения клика и свайпа\r\n private readonly CLICK_LIMIT = 5; // px\r\n private readonly SWIPE_LIMIT = 0.05; // %\r\n\r\n private carousel = inject(NgxCarouselService);\r\n private autoplay = inject(NgxAutoplayService);\r\n private state = inject(NgxStateService)\r\n private layout = inject(NgxLayoutService)\r\n\r\n private renderer!: Renderer2;\r\n private carouselList!: ElementRef<HTMLDivElement>;\r\n private startX = 0;\r\n private currentX = 0;\r\n\r\n private isSwiping = signal(false);\r\n // private config = computed(() => this.carousel.getConfig())\r\n\r\n // Определяем, был ли свайп достаточным, чтобы считать его жестом, а не кликом.\r\n // Будет использоваться для блокировки кликов по ссылкам.\r\n isSwipedEnough = signal(false);\r\n\r\n registerSlideList(element: ElementRef<HTMLDivElement>) {\r\n this.carouselList = element;\r\n }\r\n\r\n setRenderer(renderer: Renderer2) {\r\n this.renderer = renderer;\r\n }\r\n\r\n onPointerDown(event: PointerEvent) {\r\n if (this.carousel.isAnimating()) return\r\n\r\n this.startX = event.clientX;\r\n this.currentX = 0;\r\n this.isSwipedEnough.set(false);\r\n this.isSwiping.set(true);\r\n this.autoplay.stop();\r\n\r\n // Отключаем transition в начале свайпа (через Renderer2)\r\n this.renderer.setStyle(this.carouselList.nativeElement, 'transition', 'none');\r\n }\r\n\r\n onPointerMove(event: PointerEvent) {\r\n this.currentX = event.clientX - this.startX\r\n\r\n if (this.state.isFade()) return\r\n if (!this.isSwiping()) return;\r\n\r\n // Если отключена бесконечная прокрутка, то останавливаем свайп\r\n // при достижении первого и последнего слайда\r\n if (!this.state.loop()) {\r\n const length = this.state.slides().length\r\n const current = this.state.currentSlide();\r\n const slidesToshow = this.state.slidesToShow()\r\n\r\n if ((current <= 0) && (this.currentX > 0)) return // свайпаем на предыдущий слайд\r\n if ((current >= length - slidesToshow) && (this.currentX < 0)) return // свайпаем на следующий слайд\r\n }\r\n\r\n // Проверяем, превысили ли мы порог, чтобы считать это \"свайпом\", а не кликом\r\n if (Math.abs(this.currentX) > this.CLICK_LIMIT) {\r\n this.isSwipedEnough.set(true);\r\n\r\n // pointercapture гарантирует, что все pointermove события будут приходить на этот элемент, \r\n // даже если палец/мышь вышли за пределы слайдера.\r\n // Без него свайп часто \"обрывается\", если пользователь ведёт чуть в сторону.\r\n this.carouselList.nativeElement.setPointerCapture(event.pointerId);\r\n }\r\n\r\n // Смещение в пикселях к текущему слайду\r\n const baseTranslate = -this.state.currentSlide() * this.layout.slideStepPx()\r\n\r\n // Смещение в пикселях (текущее + пользовательское)\r\n const offsetPx = baseTranslate + this.currentX\r\n\r\n // Обновляем transform напрямую\r\n this.renderer.setStyle(\r\n this.carouselList.nativeElement,\r\n 'transform',\r\n `translateX(${offsetPx}px)`\r\n );\r\n }\r\n\r\n onPointerUp(event: PointerEvent) {\r\n if (this.state.isFade()) {\r\n if (this.currentX < -50) this.carousel.next()\r\n if (this.currentX > 50) this.carousel.prev()\r\n\r\n this.isSwiping.set(false)\r\n return\r\n }\r\n\r\n if (!this.isSwiping()) return;\r\n\r\n // 1. Включаем transition обратно, прежде чем менять currentSlide()\r\n this.renderer.setStyle(\r\n this.carouselList.nativeElement,\r\n 'transition',\r\n `transform ${this.state.speed()}ms ease`\r\n );\r\n\r\n const swipeDistance = this.currentX;\r\n const limit = this.carouselList.nativeElement.clientWidth * this.SWIPE_LIMIT;\r\n const step = this.layout.slideStepPx()\r\n const slidesDragged = Math.round(swipeDistance / step) * -1 // сколько слайдов было пролистано за одно перерягивание. Домножаем на -1 так как направление перетягивания swipeDistance по своему знаку противоположно той стороне, куда нужно сместить слайды. То есть при свайпе вправо (листаем вперед), swipeDistance станет отрицательным, а слайды нам нужно сдвинуть в бОльшую сторону\r\n\r\n if (swipeDistance < -limit) {\r\n Math.abs(slidesDragged) > 0 ?\r\n this.carousel.shiftBy(slidesDragged) :\r\n this.carousel.next()\r\n } else if (swipeDistance > limit) {\r\n Math.abs(slidesDragged) > 0 ?\r\n this.carousel.shiftBy(slidesDragged) :\r\n this.carousel.prev()\r\n } else {\r\n // Возврат на место, так как длинна свайпа недостаточная по длинне \r\n // (так как transition уже включен, это будет плавно)\r\n this.snapBack();\r\n }\r\n\r\n // 2. Сбрасываем флаги\r\n this.isSwiping.set(false);\r\n this.isSwipedEnough.set(false);\r\n this.currentX = 0;\r\n this.autoplay.resume();\r\n }\r\n\r\n private snapBack() {\r\n const offsetPx = -this.state.currentSlide() * this.layout.slideStepPx();\r\n\r\n // Просто устанавливаем transform в текущую позицию. Transition уже включен в onPointerUp.\r\n this.renderer\r\n .setStyle(\r\n this.carouselList.nativeElement,\r\n 'transform',\r\n `translateX(${offsetPx}px)`\r\n )\r\n }\r\n}","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnInit,\r\n Renderer2,\r\n TemplateRef,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { NgxCarouselService } from './services/ngx-carousel.service';\r\nimport { NgxCarouselControlsComponent } from './components/ngx-carousel-controls/ngx-carousel-controls.component';\r\nimport { NgxAutoplayService } from './services/ngx-autoplay..service';\r\nimport { NgxSwipeService } from './services/ngx-swipe.service';\r\nimport { NgxStateService } from './services/ngx-state.service';\r\nimport { NgxCarouselConfig } from './ngx-carousel.types';\r\nimport { NgxLayoutService } from './services/ngx-layout.service';\r\n\r\n@Component({\r\n selector: 'lib-ngx-carousel',\r\n imports: [NgTemplateOutlet, NgxCarouselControlsComponent],\r\n templateUrl: './ngx-carousel.component.html',\r\n styleUrl: './ngx-carousel.component.scss',\r\n providers: [\r\n NgxCarouselService,\r\n NgxAutoplayService,\r\n NgxSwipeService,\r\n NgxStateService,\r\n NgxLayoutService,\r\n ],\r\n})\r\nexport class NgxCarouselComponent implements OnInit, AfterViewInit {\r\n @Input({ required: true }) slides!: any[];\r\n @Input() config!: NgxCarouselConfig;\r\n\r\n \r\n\r\n @ViewChild('carouselList', { static: true }) \r\n carouselList!: ElementRef<HTMLDivElement>;\r\n @ContentChild('slideTemplate', { static: true }) \r\n slideTemplate!: TemplateRef<any>;\r\n @ContentChild('controlsTemplate', {static: true}) \r\n controlsTemplate!: TemplateRef<any>\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private resizeObserver!: ResizeObserver;\r\n\r\n carousel = inject(NgxCarouselService);\r\n autoplay = inject(NgxAutoplayService);\r\n swipe = inject(NgxSwipeService);\r\n state = inject(NgxStateService);\r\n layout = inject(NgxLayoutService);\r\n\r\n ngOnInit() {\r\n this.watchResize();\r\n this.state.init(this.config)\r\n this.state.setSlides(this.slides)\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.swipe.registerSlideList(this.carouselList);\r\n this.swipe.setRenderer(this.renderer);\r\n\r\n this.resizeObserver.observe(this.carouselList.nativeElement);\r\n }\r\n\r\n private watchResize() {\r\n this.resizeObserver = new ResizeObserver((entries) => {\r\n const width = entries[0].contentRect.width;\r\n this.state.setWidth(width);\r\n });\r\n }\r\n}\r\n","<div\r\n class=\"ngx-carousel\"\r\n tabindex=\"0\"\r\n aria-roledescription=\"carousel\"\r\n aria-live=\"polite\"\r\n (keydown.arrowRight)=\"carousel.next()\"\r\n (keydown.arrowLeft)=\"carousel.prev()\"\r\n (mouseleave)=\"autoplay.resume()\"\r\n (mouseover)=\"autoplay.pause()\"\r\n (focusin)=\"autoplay.pause()\"\r\n (focusout)=\"autoplay.resume()\"\r\n>\r\n <ul\r\n #carouselList\r\n role=\"listbox\"\r\n class=\"ngx-carousel__list\"\r\n [class.no-transition]=\"carousel.disableTransition()\"\r\n [style.transform]=\"layout.translatePx()\"\r\n [style.transition]=\"`transform ${state.speed()}ms ease`\"\r\n (pointerdown)=\"swipe.onPointerDown($event)\"\r\n (pointermove)=\"swipe.onPointerMove($event)\"\r\n (pointerup)=\"swipe.onPointerUp($event)\"\r\n (pointercancel)=\"swipe.onPointerUp($event)\"\r\n (pointerleave)=\"swipe.onPointerUp($event)\"\r\n >\r\n @for(slideData of state.slidesWithClones(); track $index; let i = $index) {\r\n <li\r\n role=\"option\"\r\n class=\"ngx-carousel__slide\"\r\n [class.active]=\"i === state.currentSlide()\"\r\n [style.width]=\"layout.slideWidthPx() + 'px'\"\r\n [style.marginRight.px]=\"state.space()\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"slideTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: slideData, index: i }\"\r\n ></ng-container>\r\n </li>\r\n } \r\n </ul>\r\n\r\n @if(controlsTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"controlsTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: carousel}\"\r\n />\r\n } @else {\r\n <lib-ngx-carousel-controls />\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of carousel\r\n */\r\n\r\nexport * from './lib/ngx-carousel.component';\r\nexport * from './lib/ngx-carousel.types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-freshok-carousel",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "This is a test library written for the 'Fresh-ok' project.",
5
5
  "keywords": [
6
6
  "freshok",