ngx-wrapper-tiny-slider
Version:
A simple Angular 15-16 wrapper for Tiny Slider
113 lines • 17 kB
JavaScript
import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
import { BehaviorSubject, from, Subject } from 'rxjs';
import { map, take, takeUntil } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "../services/windowref.service";
import * as i2 from "@angular/common";
class NgxWrapperTinySliderComponent {
wr;
cd;
slideItemsContainerRef;
config = {};
initManually = false;
id = '';
sliderReady$ = new BehaviorSubject(false);
sliderInstance;
tns$;
componentDestroy$ = new Subject();
defaultConfig = {
items: 3,
mode: 'carousel',
speed: 400,
controls: false,
nav: false,
navPosition: 'bottom',
autoplayButtonOutput: false
};
constructor(wr, cd) {
this.wr = wr;
this.cd = cd;
}
ngOnInit() {
if (this.wr.nativeWindow) {
this.initTns();
if (!this.initManually) {
this.initSlider();
}
}
}
initTns() {
this.tns$ = from(import('tiny-slider/src/tiny-slider'));
this.tns$.pipe(takeUntil(this.componentDestroy$)).subscribe();
}
initSlider() {
if (this.wr.nativeWindow && this.tns$) {
const extendConfig = Object.assign({ container: this.slideItemsContainerRef.nativeElement }, { ...this.defaultConfig, ...this.config });
this.tns$
.pipe(take(1), map((item) => {
const tns = item.tns;
this.sliderInstance = tns(extendConfig);
this.sliderReady$.next(true);
}))
.subscribe();
}
}
/**
* OVERIDE TINY SLIDER METHOD
*/
// public getInfo(): any {
// if (this.wr.nativeWindow) {
// const info = this.sliderInstance.getInfo() as TinySliderInfo;
// return {
// disablePrev: info.index <= 0 ? true : false,
// disableNext: info.index >= info.slideCount - info.items ? true : false
// };
// }
// }
goTo(target) {
if (this.wr.nativeWindow) {
this.sliderInstance.goTo(target);
}
}
play() {
if (this.wr.nativeWindow) {
this.sliderInstance.play();
}
}
pause() {
if (this.wr.nativeWindow) {
this.sliderInstance.pause();
}
}
destroy() {
if (this.wr.nativeWindow && this.sliderInstance?.destroy) {
this.sliderReady$.next(false);
this.sliderInstance.destroy();
}
}
/**
* DESTROY
*/
ngOnDestroy() {
this.componentDestroy$.next(false);
this.componentDestroy$.complete();
this.destroy();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgxWrapperTinySliderComponent, deps: [{ token: i1.BrowserWindowRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgxWrapperTinySliderComponent, selector: "ngx-wrapper-tiny-slider", inputs: { config: "config", initManually: "initManually", id: "id" }, viewQueries: [{ propertyName: "slideItemsContainerRef", first: true, predicate: ["slideItems"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"slider-wrapper\" [class.ready]=\"sliderReady$ | async\">\n <div class=\"slide-items\" #slideItems>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".tns-outer{padding:0!important}.tns-outer [hidden]{display:none!important}.tns-outer [aria-controls],.tns-outer [data-action]{cursor:pointer}.tns-slider{transition:all 0s}.tns-slider>.tns-item{box-sizing:border-box}.tns-horizontal.tns-subpixel{white-space:nowrap}.tns-horizontal.tns-subpixel>.tns-item{display:inline-block;vertical-align:top;white-space:normal}.tns-horizontal.tns-no-subpixel:after{content:\"\";display:table;clear:both}.tns-horizontal.tns-no-subpixel>.tns-item{float:left}.tns-horizontal.tns-carousel.tns-no-subpixel>.tns-item{margin-right:-100%}.tns-no-calc{position:relative;left:0}.tns-gallery{position:relative;left:0;min-height:1px}.tns-gallery>.tns-item{position:absolute;left:-100%;transition:transform 0s,opacity 0s}.tns-gallery>.tns-slide-active{position:relative;left:auto!important}.tns-gallery>.tns-moving{transition:all .25s}.tns-autowidth{display:inline-block}.tns-lazy-img{transition:opacity .6s;opacity:.6}.tns-lazy-img.tns-complete{opacity:1}.tns-ah{transition:height 0s}.tns-ovh{overflow:hidden}.tns-visually-hidden{position:absolute;left:-10000em}.tns-transparent{opacity:0;visibility:hidden}.tns-fadeIn{opacity:1;filter:alpha(opacity=100);z-index:0}.tns-normal,.tns-fadeOut{opacity:0;filter:alpha(opacity=0);z-index:-1}.tns-vpfix{white-space:nowrap}.tns-vpfix>div,.tns-vpfix>li{display:inline-block}.tns-t-subp2{margin:0 auto;width:310px;position:relative;height:10px;overflow:hidden}.tns-t-ct{width:calc(100% * 70 / 3);position:absolute;right:0}.tns-t-ct:after{content:\"\";display:table;clear:both}.tns-t-ct>div{width:calc(100% / 70);height:10px;float:left}\n", ".slider-wrapper{opacity:0;overflow:hidden;max-height:0;transition:all 20ms ease-out;position:relative}.slider-wrapper.ready{opacity:1;max-height:none;overflow:visible}\n"], dependencies: [{ kind: "pipe", type: i2.AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.None });
}
export { NgxWrapperTinySliderComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgxWrapperTinySliderComponent, decorators: [{
type: Component,
args: [{ selector: 'ngx-wrapper-tiny-slider', encapsulation: ViewEncapsulation.None, template: "<div class=\"slider-wrapper\" [class.ready]=\"sliderReady$ | async\">\n <div class=\"slide-items\" #slideItems>\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".tns-outer{padding:0!important}.tns-outer [hidden]{display:none!important}.tns-outer [aria-controls],.tns-outer [data-action]{cursor:pointer}.tns-slider{transition:all 0s}.tns-slider>.tns-item{box-sizing:border-box}.tns-horizontal.tns-subpixel{white-space:nowrap}.tns-horizontal.tns-subpixel>.tns-item{display:inline-block;vertical-align:top;white-space:normal}.tns-horizontal.tns-no-subpixel:after{content:\"\";display:table;clear:both}.tns-horizontal.tns-no-subpixel>.tns-item{float:left}.tns-horizontal.tns-carousel.tns-no-subpixel>.tns-item{margin-right:-100%}.tns-no-calc{position:relative;left:0}.tns-gallery{position:relative;left:0;min-height:1px}.tns-gallery>.tns-item{position:absolute;left:-100%;transition:transform 0s,opacity 0s}.tns-gallery>.tns-slide-active{position:relative;left:auto!important}.tns-gallery>.tns-moving{transition:all .25s}.tns-autowidth{display:inline-block}.tns-lazy-img{transition:opacity .6s;opacity:.6}.tns-lazy-img.tns-complete{opacity:1}.tns-ah{transition:height 0s}.tns-ovh{overflow:hidden}.tns-visually-hidden{position:absolute;left:-10000em}.tns-transparent{opacity:0;visibility:hidden}.tns-fadeIn{opacity:1;filter:alpha(opacity=100);z-index:0}.tns-normal,.tns-fadeOut{opacity:0;filter:alpha(opacity=0);z-index:-1}.tns-vpfix{white-space:nowrap}.tns-vpfix>div,.tns-vpfix>li{display:inline-block}.tns-t-subp2{margin:0 auto;width:310px;position:relative;height:10px;overflow:hidden}.tns-t-ct{width:calc(100% * 70 / 3);position:absolute;right:0}.tns-t-ct:after{content:\"\";display:table;clear:both}.tns-t-ct>div{width:calc(100% / 70);height:10px;float:left}\n", ".slider-wrapper{opacity:0;overflow:hidden;max-height:0;transition:all 20ms ease-out;position:relative}.slider-wrapper.ready{opacity:1;max-height:none;overflow:visible}\n"] }]
}], ctorParameters: function () { return [{ type: i1.BrowserWindowRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { slideItemsContainerRef: [{
type: ViewChild,
args: ['slideItems', { static: true }]
}], config: [{
type: Input
}], initManually: [{
type: Input
}], id: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXdyYXBwZXItdGlueS1zbGlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXdyYXBwZXItdGlueS1zbGlkZXIvc3JjL2xpYi9uZ3gtd3JhcHBlci10aW55LXNsaWRlci9uZ3gtd3JhcHBlci10aW55LXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtd3JhcHBlci10aW55LXNsaWRlci9zcmMvbGliL25neC13cmFwcGVyLXRpbnktc2xpZGVyL25neC13cmFwcGVyLXRpbnktc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsS0FBSyxFQUtMLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBU3RELE1BTWEsNkJBQTZCO0lBcUJwQjtJQUE4QjtJQXBCUCxzQkFBc0IsQ0FBYTtJQUNyRSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztJQUN6QyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFVixZQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsY0FBYyxDQUFxQjtJQUVsQyxJQUFJLENBQWtCO0lBQ3RCLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFDM0MsYUFBYSxHQUFnQztRQUNuRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxHQUFHO1FBQ1YsUUFBUSxFQUFFLEtBQUs7UUFDZixH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QUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQzt1R0FwR1UsNkJBQTZCOzJGQUE3Qiw2QkFBNkIseVFDNUIxQyxxS0FLQTs7U0R1QmEsNkJBQTZCOzJGQUE3Qiw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UseUJBQXlCLGlCQUdwQixpQkFBaUIsQ0FBQyxJQUFJO3VJQUdNLHNCQUFzQjtzQkFBaEUsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNoQyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBUaW55U2xpZGVySW5mbyxcbiAgVGlueVNsaWRlckluc3RhbmNlLFxuICBUaW55U2xpZGVyU2V0dGluZ3Ncbn0gZnJvbSAndGlueS1zbGlkZXInO1xuXG5pbXBvcnQgeyBCcm93c2VyV2luZG93UmVmIH0gZnJvbSAnLi4vc2VydmljZXMvd2luZG93cmVmLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtd3JhcHBlci10aW55LXNsaWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnbmd4LXdyYXBwZXItdGlueS1zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW55LXNsaWRlci5zY3NzJywgJy4vbmd4LXdyYXBwZXItdGlueS1zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hXcmFwcGVyVGlueVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc2xpZGVJdGVtcycsIHsgc3RhdGljOiB0cnVlIH0pIHNsaWRlSXRlbXNDb250YWluZXJSZWY6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIGNvbmZpZzogUGFydGlhbDxUaW55U2xpZGVyU2V0dGluZ3M+ID0ge307XG4gIEBJbnB1dCgpIGluaXRNYW51YWxseSA9IGZhbHNlO1xuICBASW5wdXQoKSBpZCA9ICcnO1xuXG4gIHB1YmxpYyBzbGlkZXJSZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIHNsaWRlckluc3RhbmNlOiBUaW55U2xpZGVySW5zdGFuY2U7XG5cbiAgcHJpdmF0ZSB0bnMkOiBPYnNlcnZhYmxlPGFueT47XG4gIHByaXZhdGUgY29tcG9uZW50RGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIGRlZmF1bHRDb25maWc6IFBhcnRpYWw8VGlueVNsaWRlclNldHRpbmdzPiA9IHtcbiAgICBpdGVtczogMyxcbiAgICBtb2RlOiAnY2Fyb3VzZWwnLFxuICAgIHNwZWVkOiA0MDAsXG4gICAgY29udHJvbHM6IGZhbHNlLFxuICAgIG5hdjogZmFsc2UsXG4gICAgbmF2UG9zaXRpb246ICdib3R0b20nLFxuICAgIGF1dG9wbGF5QnV0dG9uT3V0cHV0OiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd3I6IEJyb3dzZXJXaW5kb3dSZWYsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLndyLm5hdGl2ZVdpbmRvdykge1xuICAgICAgdGhpcy5pbml0VG5zKCk7XG5cbiAgICAgIGlmICghdGhpcy5pbml0TWFudWFsbHkpIHtcbiAgICAgICAgdGhpcy5pbml0U2xpZGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VG5zKCkge1xuICAgIHRoaXMudG5zJCA9IGZyb20oaW1wb3J0KCd0aW55LXNsaWRlci9zcmMvdGlueS1zbGlkZXInKSk7XG4gICAgdGhpcy50bnMkLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveSQpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0U2xpZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyLm5hdGl2ZVdpbmRvdyAmJiB0aGlzLnRucyQpIHtcbiAgICAgIGNvbnN0IGV4dGVuZENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHsgY29udGFpbmVyOiB0aGlzLnNsaWRlSXRlbXNDb250YWluZXJSZWYubmF0aXZlRWxlbWVudCB9LFxuICAgICAgICB7IC4uLnRoaXMuZGVmYXVsdENvbmZpZywgLi4udGhpcy5jb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy50bnMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRucyA9IGl0ZW0udG5zO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJJbnN0YW5jZSA9IHRucyhleHRlbmRDb25maWcpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJSZWFkeSQubmV4dCh0cnVlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT1ZFUklERSBUSU5ZIFNMSURFUiBNRVRIT0RcbiAgICovXG5cbiAgLy8gcHVibGljIGdldEluZm8oKTogYW55IHtcbiAgLy8gICBpZiAodGhpcy53ci5uYXRpdmVXaW5kb3cpIHtcbiAgLy8gICAgIGNvbnN0IGluZm8gPSB0aGlzLnNsaWRlckluc3RhbmNlLmdldEluZm8oKSBhcyBUaW55U2xpZGVySW5mbztcbiAgLy8gICAgIHJldHVybiB7XG4gIC8vICAgICAgIGRpc2FibGVQcmV2OiBpbmZvLmluZGV4IDw9IDAgPyB0cnVlIDogZmFsc2UsXG4gIC8vICAgICAgIGRpc2FibGVOZXh0OiBpbmZvLmluZGV4ID49IGluZm8uc2xpZGVDb3VudCAtIGluZm8uaXRlbXMgPyB0cnVlIDogZmFsc2VcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyB9XG4gIHB1YmxpYyBnb1RvKHRhcmdldDogbnVtYmVyIHwgJ25leHQnIHwgJ3ByZXYnIHwgJ2ZpcnN0JyB8ICdsYXN0Jyk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyLm5hdGl2ZVdpbmRvdykge1xuICAgICAgdGhpcy5zbGlkZXJJbnN0YW5jZS5nb1RvKHRhcmdldCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBwbGF5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyLm5hdGl2ZVdpbmRvdykge1xuICAgICAgdGhpcy5zbGlkZXJJbnN0YW5jZS5wbGF5KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53ci5uYXRpdmVXaW5kb3cpIHtcbiAgICAgIHRoaXMuc2xpZGVySW5zdGFuY2UucGF1c2UoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3IubmF0aXZlV2luZG93ICYmIHRoaXMuc2xpZGVySW5zdGFuY2U/LmRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuc2xpZGVyUmVhZHkkLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5zbGlkZXJJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERFU1RST1lcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveSQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jb21wb25lbnREZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2xpZGVyLXdyYXBwZXJcIiBbY2xhc3MucmVhZHldPVwic2xpZGVyUmVhZHkkIHwgYXN5bmNcIj5cbiAgPGRpdiBjbGFzcz1cInNsaWRlLWl0ZW1zXCIgI3NsaWRlSXRlbXM+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19