ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
129 lines • 15.3 kB
JavaScript
import { Component, ElementRef, Input, HostBinding, ViewEncapsulation } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class SliderStepsComponent {
set min(value) {
if (value && value <= this._max) {
this._min = value;
}
}
set max(value) {
if (value && value >= this._min) {
this._max = value;
}
}
set marks(value) {
this._marks = value;
}
set step(value) {
this._step = value;
}
set included(value) {
this._included = value;
}
set dots(value) {
this._dots = value;
}
set upperBound(value) {
if (value !== undefined && value !== this._upperBound) {
this._upperBound = value;
this.setActiveCls();
}
}
set lowerBound(value) {
if (value !== undefined && value !== this.lowerBound) {
this._lowerBound = value;
this.setActiveCls();
}
}
get class() {
return 'am-slider-step';
}
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.stepArray = [];
this._min = 0;
this._max = 100;
this._marks = {};
this._included = true;
this._dots = false;
}
calPoints() {
const points = Object.keys(this._marks).map(parseFloat);
if (this._dots) {
for (let i = this._min; i <= this._max; i = i + this._step) {
if (points.indexOf(i) < 0) {
points.push(i);
}
}
}
return points;
}
getSteps(points) {
const range = this._max - this._min;
this.stepArray = [];
points.map(point => {
const stepItem = {
stepStyle: {},
stepClass: {},
point: null
};
const offset = `${(Math.abs(point - this._min) / range) * 100}%`;
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
let style = { left: offset, ...this._dotStyle };
if (isActived) {
style = { ...style, ...this._activeDotStyle };
}
const pointClassName = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
stepItem.point = point;
stepItem.stepStyle = style;
stepItem.stepClass = pointClassName;
this.stepArray.push(stepItem);
});
}
setActiveCls() {
for (let i = 0; i < this.stepArray.length; i++) {
const point = this.stepArray[i].point;
const isActived = (!this._included && point === this._upperBound) ||
(this._included && point <= this._upperBound && point >= this._lowerBound);
this.stepArray[i].stepClass = {
[`${this.prefixCls}-dot`]: true,
[`${this.prefixCls}-dot-active`]: isActived
};
}
}
ngOnInit() {
const points = this.calPoints();
this.getSteps(points);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SliderStepsComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: SliderStepsComponent, selector: "SliderSteps, nzm-slider-steps", inputs: { min: "min", max: "max", marks: "marks", step: "step", included: "included", dots: "dots", upperBound: "upperBound", lowerBound: "lowerBound" }, host: { properties: { "class": "this.class" } }, ngImport: i0, template: "<span *ngFor=\"let item of stepArray\" [ngClass]=\"item.stepClass\" [ngStyle]=\"item.stepStyle\"> </span>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SliderStepsComponent, decorators: [{
type: Component,
args: [{ selector: 'SliderSteps, nzm-slider-steps', encapsulation: ViewEncapsulation.None, template: "<span *ngFor=\"let item of stepArray\" [ngClass]=\"item.stepClass\" [ngStyle]=\"item.stepStyle\"> </span>\n" }]
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { min: [{
type: Input
}], max: [{
type: Input
}], marks: [{
type: Input
}], step: [{
type: Input
}], included: [{
type: Input
}], dots: [{
type: Input
}], upperBound: [{
type: Input
}], lowerBound: [{
type: Input
}], class: [{
type: HostBinding
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci1zdGVwcy9zbGlkZXItc3RlcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9zbGlkZXIvc2xpZGVyLXN0ZXBzL3NsaWRlci1zdGVwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPckcsTUFBTSxPQUFPLG9CQUFvQjtJQWUvQixJQUNJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUNELElBQ0ksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBQ0QsSUFDSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFDSSxJQUFJLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFDSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFDSSxJQUFJLENBQUMsS0FBYztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQ0Qs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LG9CQUFvQixnUkNQakMsNkdBQ0E7OzJGRE1hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSwrQkFBK0IsaUJBRTFCLGlCQUFpQixDQUFDLElBQUk7K0VBa0JqQyxHQUFHO3NCQUROLEtBQUs7Z0JBT0YsR0FBRztzQkFETixLQUFLO2dCQU9GLEtBQUs7c0JBRFIsS0FBSztnQkFLRixJQUFJO3NCQURQLEtBQUs7Z0JBS0YsUUFBUTtzQkFEWCxLQUFLO2dCQUtGLElBQUk7c0JBRFAsS0FBSztnQkFLRixVQUFVO3NCQURiLEtBQUs7Z0JBUUYsVUFBVTtzQkFEYixLQUFLO2dCQVNGLEtBQUs7c0JBRFIsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdEJpbmRpbmcsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1NsaWRlclN0ZXBzLCBuem0tc2xpZGVyLXN0ZXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci1zdGVwcy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVyU3RlcHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcmVmaXhDbHMgPSAnYW0tc2xpZGVyJztcbiAgc3RlcEFycmF5ID0gW107XG5cbiAgcHJpdmF0ZSBfbWluOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9tYXg6IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBfc3RlcDogbnVtYmVyO1xuICBwcml2YXRlIF9tYXJrczogb2JqZWN0ID0ge307XG4gIHByaXZhdGUgX2luY2x1ZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBwZXJCb3VuZDogbnVtYmVyO1xuICBwcml2YXRlIF9sb3dlckJvdW5kOiBudW1iZXI7XG4gIHByaXZhdGUgX2RvdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZG90U3R5bGU6IG9iamVjdDtcbiAgcHJpdmF0ZSBfYWN0aXZlRG90U3R5bGU6IG9iamVjdDtcblxuICBASW5wdXQoKVxuICBzZXQgbWluKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUgPD0gdGhpcy5fbWF4KSB7XG4gICAgICB0aGlzLl9taW4gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlID49IHRoaXMuX21pbikge1xuICAgICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBtYXJrcyh2YWx1ZTogb2JqZWN0KSB7XG4gICAgdGhpcy5fbWFya3MgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBpbmNsdWRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luY2x1ZGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRvdHModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kb3RzID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHVwcGVyQm91bmQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB0aGlzLl91cHBlckJvdW5kKSB7XG4gICAgICB0aGlzLl91cHBlckJvdW5kID0gdmFsdWU7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNscygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbG93ZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IHRoaXMubG93ZXJCb3VuZCkge1xuICAgICAgdGhpcy5fbG93ZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZXRBY3RpdmVDbHMoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoKVxuICBnZXQgY2xhc3MoKSB7XG4gICAgcmV0dXJuICdhbS1zbGlkZXItc3RlcCc7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgY2FsUG9pbnRzKCkge1xuICAgIGNvbnN0IHBvaW50cyA9IE9iamVjdC5rZXlzKHRoaXMuX21hcmtzKS5tYXAocGFyc2VGbG9hdCk7XG4gICAgaWYgKHRoaXMuX2RvdHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9taW47IGkgPD0gdGhpcy5fbWF4OyBpID0gaSArIHRoaXMuX3N0ZXApIHtcbiAgICAgICAgaWYgKHBvaW50cy5pbmRleE9mKGkpIDwgMCkge1xuICAgICAgICAgIHBvaW50cy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwb2ludHM7XG4gIH1cblxuICBnZXRTdGVwcyhwb2ludHMpIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuX21heCAtIHRoaXMuX21pbjtcbiAgICB0aGlzLnN0ZXBBcnJheSA9IFtdO1xuICAgIHBvaW50cy5tYXAocG9pbnQgPT4ge1xuICAgICAgY29uc3Qgc3RlcEl0ZW0gPSB7XG4gICAgICAgIHN0ZXBTdHlsZToge30sXG4gICAgICAgIHN0ZXBDbGFzczoge30sXG4gICAgICAgIHBvaW50OiBudWxsXG4gICAgICB9O1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gYCR7KE1hdGguYWJzKHBvaW50IC0gdGhpcy5fbWluKSAvIHJhbmdlKSAqIDEwMH0lYDtcbiAgICAgIGNvbnN0IGlzQWN0aXZlZCA9XG4gICAgICAgICghdGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPT09IHRoaXMuX3VwcGVyQm91bmQpIHx8XG4gICAgICAgICh0aGlzLl9pbmNsdWRlZCAmJiBwb2ludCA8PSB0aGlzLl91cHBlckJvdW5kICYmIHBvaW50ID49IHRoaXMuX2xvd2VyQm91bmQpO1xuICAgICAgbGV0IHN0eWxlID0geyBsZWZ0OiBvZmZzZXQsIC4uLnRoaXMuX2RvdFN0eWxlIH07XG4gICAgICBpZiAoaXNBY3RpdmVkKSB7XG4gICAgICAgIHN0eWxlID0geyAuLi5zdHlsZSwgLi4udGhpcy5fYWN0aXZlRG90U3R5bGUgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9pbnRDbGFzc05hbWUgPSB7XG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90YF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZG90LWFjdGl2ZWBdOiBpc0FjdGl2ZWRcbiAgICAgIH07XG4gICAgICBzdGVwSXRlbS5wb2ludCA9IHBvaW50O1xuICAgICAgc3RlcEl0ZW0uc3RlcFN0eWxlID0gc3R5bGU7XG4gICAgICBzdGVwSXRlbS5zdGVwQ2xhc3MgPSBwb2ludENsYXNzTmFtZTtcbiAgICAgIHRoaXMuc3RlcEFycmF5LnB1c2goc3RlcEl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2xzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGVwQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5zdGVwQXJyYXlbaV0ucG9pbnQ7XG4gICAgICBjb25zdCBpc0FjdGl2ZWQgPVxuICAgICAgICAoIXRoaXMuX2luY2x1ZGVkICYmIHBvaW50ID09PSB0aGlzLl91cHBlckJvdW5kKSB8fFxuICAgICAgICAodGhpcy5faW5jbHVkZWQgJiYgcG9pbnQgPD0gdGhpcy5fdXBwZXJCb3VuZCAmJiBwb2ludCA+PSB0aGlzLl9sb3dlckJvdW5kKTtcbiAgICAgIHRoaXMuc3RlcEFycmF5W2ldLnN0ZXBDbGFzcyA9IHtcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kb3RgXTogdHJ1ZSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1kb3QtYWN0aXZlYF06IGlzQWN0aXZlZFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBwb2ludHMgPSB0aGlzLmNhbFBvaW50cygpO1xuICAgIHRoaXMuZ2V0U3RlcHMocG9pbnRzKTtcbiAgfVxufVxuIiwiPHNwYW4gKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RlcEFycmF5XCIgW25nQ2xhc3NdPVwiaXRlbS5zdGVwQ2xhc3NcIiBbbmdTdHlsZV09XCJpdGVtLnN0ZXBTdHlsZVwiPiA8L3NwYW4+XG4iXX0=