@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
55 lines • 6.75 kB
JavaScript
import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core';
import { tuiClamp } from '@taiga-ui/cdk/utils/math';
import * as i0 from "@angular/core";
const MAX_VALUE = 0x10000;
export class TuiRepeatTimesContext {
constructor($implicit) {
this.$implicit = $implicit;
}
}
/**
* Directive similar to ngFor but using a number of repetitions rather than an array
*
* {@link TuiRepeatTimes.tuiRepeatTimesOf requested number of times}.
* {@link TuiRepeatTimesContext context} for every instance of the template inherits outer context and stores
* {@link TuiRepeatTimesContext.$implicit index} of a template instance.
*/
class TuiRepeatTimes {
constructor() {
this.viewContainer = inject(ViewContainerRef);
this.templateRef = inject((TemplateRef));
}
set tuiRepeatTimesOf(count) {
const safeCount = Math.floor(tuiClamp(count, 0, MAX_VALUE));
const { length } = this.viewContainer;
if (count < length) {
this.removeContainers(length - count);
}
else {
this.addContainers(safeCount);
}
}
addContainers(count) {
for (let index = this.viewContainer.length; index < count; index++) {
this.viewContainer.createEmbeddedView(this.templateRef, new TuiRepeatTimesContext(index));
}
}
removeContainers(amount) {
for (let index = 0; index < amount; index++) {
this.viewContainer.remove();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRepeatTimes, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiRepeatTimes, isStandalone: true, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: { tuiRepeatTimesOf: "tuiRepeatTimesOf" }, ngImport: i0 }); }
}
export { TuiRepeatTimes };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiRepeatTimes, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[tuiRepeatTimes][tuiRepeatTimesOf]',
}]
}], propDecorators: { tuiRepeatTimesOf: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0LXRpbWVzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3JlcGVhdC10aW1lcy9yZXBlYXQtdGltZXMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUVsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFFMUIsTUFBTSxPQUFPLHFCQUFxQjtJQUM5QixZQUE0QixTQUFpQjtRQUFqQixjQUFTLEdBQVQsU0FBUyxDQUFRO0lBQUcsQ0FBQztDQUNwRDtBQUVEOzs7Ozs7R0FNRztBQUNILE1BSWEsY0FBYztJQUozQjtRQUtxQixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsV0FBa0MsQ0FBQSxDQUFDLENBQUM7S0E2QjdFO0lBM0JHLElBQ1csZ0JBQWdCLENBQUMsS0FBYTtRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFcEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWE7UUFDL0IsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQ25DLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUMvQjtJQUNMLENBQUM7K0dBOUJRLGNBQWM7bUdBQWQsY0FBYzs7U0FBZCxjQUFjOzRGQUFkLGNBQWM7a0JBSjFCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxvQ0FBb0M7aUJBQ2pEOzhCQU1jLGdCQUFnQjtzQkFEMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3QsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3R5cGUgVHVpQ29udGV4dH0gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5pbXBvcnQge3R1aUNsYW1wfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21hdGgnO1xuXG5jb25zdCBNQVhfVkFMVUUgPSAweDEwMDAwO1xuXG5leHBvcnQgY2xhc3MgVHVpUmVwZWF0VGltZXNDb250ZXh0IGltcGxlbWVudHMgVHVpQ29udGV4dDxudW1iZXI+IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgJGltcGxpY2l0OiBudW1iZXIpIHt9XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHNpbWlsYXIgdG8gbmdGb3IgYnV0IHVzaW5nIGEgbnVtYmVyIG9mIHJlcGV0aXRpb25zIHJhdGhlciB0aGFuIGFuIGFycmF5XG4gKlxuICoge0BsaW5rIFR1aVJlcGVhdFRpbWVzLnR1aVJlcGVhdFRpbWVzT2YgcmVxdWVzdGVkIG51bWJlciBvZiB0aW1lc30uXG4gKiB7QGxpbmsgVHVpUmVwZWF0VGltZXNDb250ZXh0IGNvbnRleHR9IGZvciBldmVyeSBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgaW5oZXJpdHMgb3V0ZXIgY29udGV4dCBhbmQgc3RvcmVzXG4gKiB7QGxpbmsgVHVpUmVwZWF0VGltZXNDb250ZXh0LiRpbXBsaWNpdCBpbmRleH0gb2YgYSB0ZW1wbGF0ZSBpbnN0YW5jZS5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t0dWlSZXBlYXRUaW1lc11bdHVpUmVwZWF0VGltZXNPZl0nLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlSZXBlYXRUaW1lcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8VHVpUmVwZWF0VGltZXNDb250ZXh0Pik7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdHVpUmVwZWF0VGltZXNPZihjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHNhZmVDb3VudCA9IE1hdGguZmxvb3IodHVpQ2xhbXAoY291bnQsIDAsIE1BWF9WQUxVRSkpO1xuXG4gICAgICAgIGNvbnN0IHtsZW5ndGh9ID0gdGhpcy52aWV3Q29udGFpbmVyO1xuXG4gICAgICAgIGlmIChjb3VudCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb250YWluZXJzKGxlbmd0aCAtIGNvdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29udGFpbmVycyhzYWZlQ291bnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDb250YWluZXJzKGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSB0aGlzLnZpZXdDb250YWluZXIubGVuZ3RoOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3PFR1aVJlcGVhdFRpbWVzQ29udGV4dD4oXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICBuZXcgVHVpUmVwZWF0VGltZXNDb250ZXh0KGluZGV4KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUNvbnRhaW5lcnMoYW1vdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFtb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19