ngx-hm-carousel
Version:
A light carousel for Angular, support mobile touch by hammerJs with SSR
46 lines • 6.61 kB
JavaScript
import { Directive, TemplateRef, ViewContainerRef, inject, } from '@angular/core';
import { input } from '@angular/core';
import * as i0 from "@angular/core";
// TODO: ssr problem should not hide on ssr
// TODO: show number change should recalculate is show and init show number
export class NgxHmCarouselDynamicDirective {
_view = inject(ViewContainerRef);
_template = inject((TemplateRef));
index = input(undefined, {
alias: 'ngxHmCarouselDynamic',
});
length = input(0, { alias: 'ngxHmCarouselDynamicLength' });
show = input(1, { alias: 'ngxHmCarouselDynamicShow' });
currentI = input(0, {
alias: 'ngxHmCarouselDynamicIndex',
transform: (value) => {
if (!this.completed) {
const nextI = value + this.show();
const prevI = value - this.show();
if (this.index() === 0 ||
this.index() === this.length() - 1 ||
this.index() === nextI ||
this.index() === prevI ||
this.index() === value) {
this._view.createEmbeddedView(this._template);
this.completed = true;
}
}
return value;
},
});
completed = false;
constructor() {
this._view.clear();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NgxHmCarouselDynamicDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.3", type: NgxHmCarouselDynamicDirective, isStandalone: true, selector: "[ngxHmCarouselDynamic]", inputs: { index: { classPropertyName: "index", publicName: "ngxHmCarouselDynamic", isSignal: true, isRequired: false, transformFunction: null }, length: { classPropertyName: "length", publicName: "ngxHmCarouselDynamicLength", isSignal: true, isRequired: false, transformFunction: null }, show: { classPropertyName: "show", publicName: "ngxHmCarouselDynamicShow", isSignal: true, isRequired: false, transformFunction: null }, currentI: { classPropertyName: "currentI", publicName: "ngxHmCarouselDynamicIndex", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NgxHmCarouselDynamicDirective, decorators: [{
type: Directive,
args: [{
selector: '[ngxHmCarouselDynamic]',
standalone: true,
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWhtLWNhcm91c2VsLWR5bmFtaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL25neC1obS1jYXJvdXNlbC9zcmMvbGliL25neC1obS1jYXJvdXNlbC1keW5hbWljLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXRDLDJDQUEyQztBQUMzQywyRUFBMkU7QUFLM0UsTUFBTSxPQUFPLDZCQUE2QjtJQUNoQyxLQUFLLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDakMsU0FBUyxHQUFHLE1BQU0sQ0FBbUIsQ0FBQSxXQUFnQixDQUFBLENBQUMsQ0FBQztJQUMvRCxLQUFLLEdBQUcsS0FBSyxDQUFxQixTQUFTLEVBQUU7UUFDM0MsS0FBSyxFQUFFLHNCQUFzQjtLQUM5QixDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7SUFDM0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBRXZELFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ2xCLEtBQUssRUFBRSwyQkFBMkI7UUFDbEMsU0FBUyxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsSUFDRSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztvQkFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO29CQUNsQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSztvQkFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUs7b0JBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQ3RCLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVLLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFMUI7UUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUM7dUdBbkNVLDZCQUE2QjsyRkFBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUp6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBUT0RPOiBzc3IgcHJvYmxlbSBzaG91bGQgbm90IGhpZGUgb24gc3NyXG4vLyBUT0RPOiBzaG93IG51bWJlciBjaGFuZ2Ugc2hvdWxkIHJlY2FsY3VsYXRlIGlzIHNob3cgYW5kIGluaXQgc2hvdyBudW1iZXJcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tuZ3hIbUNhcm91c2VsRHluYW1pY10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hIbUNhcm91c2VsRHluYW1pY0RpcmVjdGl2ZSB7XG4gIHByaXZhdGUgX3ZpZXcgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgX3RlbXBsYXRlID0gaW5qZWN0PFRlbXBsYXRlUmVmPGFueT4+KFRlbXBsYXRlUmVmPGFueT4pO1xuICBpbmRleCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XG4gICAgYWxpYXM6ICduZ3hIbUNhcm91c2VsRHluYW1pYycsXG4gIH0pO1xuICBsZW5ndGggPSBpbnB1dCgwLCB7IGFsaWFzOiAnbmd4SG1DYXJvdXNlbER5bmFtaWNMZW5ndGgnIH0pO1xuICBzaG93ID0gaW5wdXQoMSwgeyBhbGlhczogJ25neEhtQ2Fyb3VzZWxEeW5hbWljU2hvdycgfSk7XG5cbiAgY3VycmVudEkgPSBpbnB1dCgwLCB7XG4gICAgYWxpYXM6ICduZ3hIbUNhcm91c2VsRHluYW1pY0luZGV4JyxcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29tcGxldGVkKSB7XG4gICAgICAgIGNvbnN0IG5leHRJID0gdmFsdWUgKyB0aGlzLnNob3coKTtcbiAgICAgICAgY29uc3QgcHJldkkgPSB2YWx1ZSAtIHRoaXMuc2hvdygpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pbmRleCgpID09PSAwIHx8XG4gICAgICAgICAgdGhpcy5pbmRleCgpID09PSB0aGlzLmxlbmd0aCgpIC0gMSB8fFxuICAgICAgICAgIHRoaXMuaW5kZXgoKSA9PT0gbmV4dEkgfHxcbiAgICAgICAgICB0aGlzLmluZGV4KCkgPT09IHByZXZJIHx8XG4gICAgICAgICAgdGhpcy5pbmRleCgpID09PSB2YWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl92aWV3LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSk7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICB9KTtcblxuICBwcml2YXRlIGNvbXBsZXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3ZpZXcuY2xlYXIoKTtcbiAgfVxufVxuIl19