range-selection-input 15.0.2

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.
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # RangeSelectionInput
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project range-selection-input` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project range-selection-input`.
8
+ > Note: Don't forget to add `--project range-selection-input` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build range-selection-input` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build range-selection-input`, go to the dist folder `cd dist/range-selection-input` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test range-selection-input` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,144 @@
1
+ import { Component, Input, forwardRef, inject } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS, Validators, FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/slider";
7
+ export class RangeSelectionInputComponent {
8
+ set min(value) {
9
+ this._min = (value) ? value : 0;
10
+ this.doubleSlider = value > -1 ? true : false;
11
+ }
12
+ get min() {
13
+ return this._min;
14
+ }
15
+ set max(value) {
16
+ this._max = value ? value : 100;
17
+ }
18
+ get max() {
19
+ return this._max;
20
+ }
21
+ set displayFunc(value) {
22
+ this._displayFunc = value;
23
+ }
24
+ get displayFunc() {
25
+ return (this._displayFunc) ? this._displayFunc : () => { };
26
+ }
27
+ constructor() {
28
+ this.fb = inject(FormBuilder);
29
+ this.doubleSlider = false;
30
+ this.startValue = this.fb.control(0);
31
+ this.endValue = this.fb.control(0);
32
+ this._min = 0;
33
+ this._max = 0;
34
+ this.showValue = false;
35
+ this.showDivisions = false;
36
+ this.divisions = 0;
37
+ this.minRequired = this.min;
38
+ this.maxRequired = this.max;
39
+ this.isObject = (value) => typeof value === "object";
40
+ this.disabled = false;
41
+ this.onChange = () => { };
42
+ this.onTouch = () => { };
43
+ this.sliderValue = { start: 0, end: 10 };
44
+ }
45
+ ngOnInit() {
46
+ }
47
+ onSetStartValue(value) {
48
+ if (!this.doubleSlider) {
49
+ this.sliderValue.end = +value;
50
+ this.onChange(this.sliderValue.end);
51
+ }
52
+ else {
53
+ this.sliderValue.start = +value;
54
+ this.onChange(this.sliderValue);
55
+ }
56
+ }
57
+ onSetEndValue(value) {
58
+ this.sliderValue.end = +value;
59
+ this.onChange(this.sliderValue);
60
+ }
61
+ writeValue(value) {
62
+ if (value) {
63
+ if (this.isObject(value) && this.doubleSlider) {
64
+ this.sliderValue.start = value.start || 0;
65
+ this.sliderValue.end = value.end || 0;
66
+ }
67
+ else {
68
+ this.sliderValue.end = value;
69
+ }
70
+ this.sliderValue.start = this.sliderValue.start < this.min ? this.min : this.sliderValue.start;
71
+ this.sliderValue.end = this.sliderValue.end < this.max ? this.sliderValue.end : this.max;
72
+ this.endValue.patchValue(this.sliderValue.end, { emitEvent: false });
73
+ this.startValue.patchValue(this.sliderValue.start, { emitEvent: false });
74
+ }
75
+ else {
76
+ this.sliderValue.start = 0;
77
+ this.sliderValue.end = 0;
78
+ this.startValue.patchValue(this.sliderValue.start, { emitEvent: false });
79
+ this.endValue.patchValue(this.sliderValue.end, { emitEvent: false });
80
+ }
81
+ }
82
+ validate(control) {
83
+ const isRequired = control.hasValidator(Validators.required) ? true : false;
84
+ let errors = { 'minRequired': false, 'maxRequired': false, 'valueRequired': false };
85
+ errors.valueRequired = this.sliderValue.start === 0 || this.sliderValue.end === 0 ? true : false;
86
+ errors.minRequired = this.sliderValue.start < this.minRequired ? true : false;
87
+ errors.maxRequired = this.sliderValue.end > this.maxRequired || this.sliderValue.end < this.minRequired ? true : false;
88
+ return Object.fromEntries(Object.entries(errors).filter(([key, value]) => value !== false));
89
+ }
90
+ registerOnChange(fn) {
91
+ this.onChange = fn;
92
+ }
93
+ registerOnTouched(fn) {
94
+ this.onTouch = fn;
95
+ }
96
+ setDisabledState(isDisabled) {
97
+ this.disabled = isDisabled;
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RangeSelectionInputComponent, selector: "app-range-selection-input", inputs: { min: "min", max: "max", showValue: "showValue", showDivisions: "showDivisions", divisions: "divisions", minRequired: "minRequired", maxRequired: "maxRequired", displayFunc: "displayFunc" }, providers: [
101
+ {
102
+ provide: NG_VALUE_ACCESSOR,
103
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
104
+ multi: true
105
+ },
106
+ {
107
+ provide: NG_VALIDATORS,
108
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
109
+ multi: true
110
+ }
111
+ ], ngImport: i0, template: "<div style=\"display: flex; gap: 2rem; flex-direction: column;\">\n\n <ng-container *ngIf=\"doubleSlider; else SINGLE\">\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [showTickMarks]=\"showDivisions\"\n [discrete]=\"showValue\"\n [step]=\"divisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n [formControl]=\"startValue\"\n matSliderStartThumb\n (change)=\"onSetStartValue(startValue.value)\"\n />\n <input\n [formControl]=\"endValue\"\n matSliderEndThumb\n (change)=\"onSetEndValue(endValue.value)\"\n >\n </mat-slider>\n </ng-container>\n\n <ng-template #SINGLE>\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"0\"\n [max]=\"max\"\n [step]=\"divisions\"\n [discrete]=\"showValue\"\n [showTickMarks]=\"showDivisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n matSliderThumb\n [formControl]=\"endValue\"\n (change)=\"onSetStartValue(endValue.value)\"\n >\n </mat-slider>\n\n </ng-template>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i3.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }] }); }
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputComponent, decorators: [{
114
+ type: Component,
115
+ args: [{ selector: 'app-range-selection-input', providers: [
116
+ {
117
+ provide: NG_VALUE_ACCESSOR,
118
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
119
+ multi: true
120
+ },
121
+ {
122
+ provide: NG_VALIDATORS,
123
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
124
+ multi: true
125
+ }
126
+ ], template: "<div style=\"display: flex; gap: 2rem; flex-direction: column;\">\n\n <ng-container *ngIf=\"doubleSlider; else SINGLE\">\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [showTickMarks]=\"showDivisions\"\n [discrete]=\"showValue\"\n [step]=\"divisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n [formControl]=\"startValue\"\n matSliderStartThumb\n (change)=\"onSetStartValue(startValue.value)\"\n />\n <input\n [formControl]=\"endValue\"\n matSliderEndThumb\n (change)=\"onSetEndValue(endValue.value)\"\n >\n </mat-slider>\n </ng-container>\n\n <ng-template #SINGLE>\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"0\"\n [max]=\"max\"\n [step]=\"divisions\"\n [discrete]=\"showValue\"\n [showTickMarks]=\"showDivisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n matSliderThumb\n [formControl]=\"endValue\"\n (change)=\"onSetStartValue(endValue.value)\"\n >\n </mat-slider>\n\n </ng-template>\n\n</div>\n" }]
127
+ }], ctorParameters: function () { return []; }, propDecorators: { min: [{
128
+ type: Input
129
+ }], max: [{
130
+ type: Input
131
+ }], showValue: [{
132
+ type: Input
133
+ }], showDivisions: [{
134
+ type: Input
135
+ }], divisions: [{
136
+ type: Input
137
+ }], minRequired: [{
138
+ type: Input
139
+ }], maxRequired: [{
140
+ type: Input
141
+ }], displayFunc: [{
142
+ type: Input
143
+ }] } });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0aW9uLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC9zcmMvbGliL2lucHV0LXNsaWRlci9yYW5nZS1zZWxlY3Rpb24taW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFuZ2Utc2VsZWN0aW9uLWlucHV0L3NyYy9saWIvaW5wdXQtc2xpZGVyL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQTJELFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFtQnBKLE1BQU0sT0FBTyw0QkFBNEI7SUFVdkMsSUFBYSxHQUFHLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUMvQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFHRCxJQUFhLEdBQUcsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJ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QUFDO2dCQUMzRCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7Z0JBQzNELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkNsQkgsMm1DQTZDQTs7NEZEekJhLDRCQUE0QjtrQkFqQnhDLFNBQVM7K0JBQ0UsMkJBQTJCLGFBRzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDOzRCQUMzRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLENBQUM7NEJBQzNELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzBFQVlZLEdBQUc7c0JBQWYsS0FBSztnQkFVTyxHQUFHO3NCQUFmLEtBQUs7Z0JBUUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdPLFdBQVc7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmFuZ2Utc2VsZWN0aW9uLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFuZ2VTZWxlY3Rpb25JbnB1dENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhbmdlU2VsZWN0aW9uSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUmFuZ2VTZWxlY3Rpb25JbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKVxuXG4gIGRvdWJsZVNsaWRlciA9IGZhbHNlXG5cbiAgc3RhcnRWYWx1ZSA9IHRoaXMuZmIuY29udHJvbCgwKVxuICBlbmRWYWx1ZSA9IHRoaXMuZmIuY29udHJvbCgwKVxuXG4gIF9taW4gPSAwXG4gIEBJbnB1dCgpIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9ICh2YWx1ZSkgPyB2YWx1ZSA6IDBcbiAgICB0aGlzLmRvdWJsZVNsaWRlciA9IHZhbHVlID4gLTEgPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIGdldCBtaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX21pblxuICB9XG5cbiAgX21heCA9IDBcbiAgQElucHV0KCkgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWUgPyB2YWx1ZSA6IDEwMFxuICB9XG5cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4XG4gIH1cblxuICBASW5wdXQoKSBzaG93VmFsdWUgPSBmYWxzZVxuICBASW5wdXQoKSBzaG93RGl2aXNpb25zID0gZmFsc2VcbiAgQElucHV0KCkgZGl2aXNpb25zID0gMFxuXG4gIEBJbnB1dCgpIG1pblJlcXVpcmVkID0gdGhpcy5taW5cbiAgQElucHV0KCkgbWF4UmVxdWlyZWQgPSB0aGlzLm1heFxuXG4gIF9kaXNwbGF5RnVuYzogYW55XG4gIEBJbnB1dCgpIHNldCBkaXNwbGF5RnVuYyh2YWx1ZTogKGRhdGE6IGFueSkgPT4gYW55KSB7XG4gICAgdGhpcy5fZGlzcGxheUZ1bmMgPSB2YWx1ZVxuICB9XG5cbiAgZ2V0IGRpc3BsYXlGdW5jKCkge1xuICAgIHJldHVybiAodGhpcy5fZGlzcGxheUZ1bmMpID8gdGhpcy5fZGlzcGxheUZ1bmMgOiAoKSA9PiB7fVxuICB9XG5cbiAgaXNPYmplY3QgPSAodmFsdWU6IGFueSkgPT4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG5cbiAgZGlzYWJsZWQgPSBmYWxzZVxuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fVxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7fVxuXG4gIHNsaWRlclZhbHVlID0geyBzdGFydDogMCwgZW5kOiAxMCB9XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuICB9XG5cbiAgb25TZXRTdGFydFZhbHVlKHZhbHVlOiBhbnkpIHtcblxuICAgIGlmKCF0aGlzLmRvdWJsZVNsaWRlcikge1xuXG4gICAgICB0aGlzLnNsaWRlclZhbHVlLmVuZCA9ICt2YWx1ZVxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnNsaWRlclZhbHVlLmVuZClcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUuc3RhcnQgPSArdmFsdWVcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zbGlkZXJWYWx1ZSlcblxuICAgIH1cblxuICB9XG5cbiAgb25TZXRFbmRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zbGlkZXJWYWx1ZS5lbmQgPSArdmFsdWVcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2xpZGVyVmFsdWUpXG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnl8bnVtYmVyKSB7XG5cbiAgICBpZih2YWx1ZSkge1xuXG4gICAgICBpZih0aGlzLmlzT2JqZWN0KHZhbHVlKSAmJiB0aGlzLmRvdWJsZVNsaWRlcikge1xuICAgICAgICB0aGlzLnNsaWRlclZhbHVlLnN0YXJ0ID0gdmFsdWUuc3RhcnQgfHwgMFxuICAgICAgICB0aGlzLnNsaWRlclZhbHVlLmVuZCA9IHZhbHVlLmVuZCB8fCAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNsaWRlclZhbHVlLmVuZCA9IHZhbHVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUuc3RhcnQgPSB0aGlzLnNsaWRlclZhbHVlLnN0YXJ0IDwgdGhpcy5taW4gPyB0aGlzLm1pbiA6IHRoaXMuc2xpZGVyVmFsdWUuc3RhcnRcbiAgICAgIHRoaXMuc2xpZGVyVmFsdWUuZW5kID0gdGhpcy5zbGlkZXJWYWx1ZS5lbmQgPCB0aGlzLm1heCA/IHRoaXMuc2xpZGVyVmFsdWUuZW5kIDogdGhpcy5tYXhcblxuICAgICAgdGhpcy5lbmRWYWx1ZS5wYXRjaFZhbHVlKHRoaXMuc2xpZGVyVmFsdWUuZW5kLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcbiAgICAgIHRoaXMuc3RhcnRWYWx1ZS5wYXRjaFZhbHVlKHRoaXMuc2xpZGVyVmFsdWUuc3RhcnQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuXG4gICAgfSBlbHNlIHtcblxuICAgICAgdGhpcy5zbGlkZXJWYWx1ZS5zdGFydCA9ICAwXG4gICAgICB0aGlzLnNsaWRlclZhbHVlLmVuZCA9ICAwXG5cbiAgICAgIHRoaXMuc3RhcnRWYWx1ZS5wYXRjaFZhbHVlKHRoaXMuc2xpZGVyVmFsdWUuc3RhcnQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgdGhpcy5lbmRWYWx1ZS5wYXRjaFZhbHVlKHRoaXMuc2xpZGVyVmFsdWUuZW5kLCB7IGVtaXRFdmVudDogZmFsc2UgfSlcblxuICAgIH1cblxuICB9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuXG4gICAgY29uc3QgaXNSZXF1aXJlZCA9IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgICBsZXQgZXJyb3JzID0geyAnbWluUmVxdWlyZWQnOiBmYWxzZSwgJ21heFJlcXVpcmVkJzogZmFsc2UsICd2YWx1ZVJlcXVpcmVkJzogZmFsc2UgfVxuXG4gICAgZXJyb3JzLnZhbHVlUmVxdWlyZWQgPSB0aGlzLnNsaWRlclZhbHVlLnN0YXJ0ID09PSAwIHx8IHRoaXMuc2xpZGVyVmFsdWUuZW5kID09PSAwID8gdHJ1ZSA6IGZhbHNlXG5cbiAgICBlcnJvcnMubWluUmVxdWlyZWQgPSB0aGlzLnNsaWRlclZhbHVlLnN0YXJ0IDwgdGhpcy5taW5SZXF1aXJlZCA/IHRydWUgOiBmYWxzZVxuICAgIGVycm9ycy5tYXhSZXF1aXJlZCA9IHRoaXMuc2xpZGVyVmFsdWUuZW5kID4gdGhpcy5tYXhSZXF1aXJlZCB8fCB0aGlzLnNsaWRlclZhbHVlLmVuZCA8IHRoaXMubWluUmVxdWlyZWQgPyB0cnVlIDogZmFsc2VcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZXJyb3JzKS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUgIT09IGZhbHNlKSlcblxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KXtcbiAgICAgIHRoaXMub25DaGFuZ2UgPSBmblxuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSl7XG4gICAgdGhpcy5vblRvdWNoID0gZm5cbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG4gIH1cblxufVxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnJlbTsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZG91YmxlU2xpZGVyOyBlbHNlIFNJTkdMRVwiPlxuICAgIDxtYXQtc2xpZGVyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgW21heF09XCJtYXhcIlxuICAgICAgW3Nob3dUaWNrTWFya3NdPVwic2hvd0RpdmlzaW9uc1wiXG4gICAgICBbZGlzY3JldGVdPVwic2hvd1ZhbHVlXCJcbiAgICAgIFtzdGVwXT1cImRpdmlzaW9uc1wiXG4gICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZ1bmNcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwic3RhcnRWYWx1ZVwiXG4gICAgICAgIG1hdFNsaWRlclN0YXJ0VGh1bWJcbiAgICAgICAgKGNoYW5nZSk9XCJvblNldFN0YXJ0VmFsdWUoc3RhcnRWYWx1ZS52YWx1ZSlcIlxuICAgICAgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kVmFsdWVcIlxuICAgICAgICBtYXRTbGlkZXJFbmRUaHVtYlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2V0RW5kVmFsdWUoZW5kVmFsdWUudmFsdWUpXCJcbiAgICAgID5cbiAgICA8L21hdC1zbGlkZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjU0lOR0xFPlxuICAgIDxtYXQtc2xpZGVyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW21pbl09XCIwXCJcbiAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgIFtzdGVwXT1cImRpdmlzaW9uc1wiXG4gICAgICBbZGlzY3JldGVdPVwic2hvd1ZhbHVlXCJcbiAgICAgIFtzaG93VGlja01hcmtzXT1cInNob3dEaXZpc2lvbnNcIlxuICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlGdW5jXCJcbiAgICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRTbGlkZXJUaHVtYlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZW5kVmFsdWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2V0U3RhcnRWYWx1ZShlbmRWYWx1ZS52YWx1ZSlcIlxuICAgICAgPlxuICAgIDwvbWF0LXNsaWRlcj5cblxuICA8L25nLXRlbXBsYXRlPlxuXG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,71 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { FormBuilder, Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/button";
7
+ import * as i4 from "@angular/material/form-field";
8
+ import * as i5 from "@angular/material/slide-toggle";
9
+ import * as i6 from "@angular/material/divider";
10
+ import * as i7 from "@angular/material/button-toggle";
11
+ import * as i8 from "../input-slider/range-selection-input.component";
12
+ export class RangeDemoComponent {
13
+ constructor() {
14
+ this.fb = inject(FormBuilder);
15
+ this.selectionControl_1 = this.fb.control(null);
16
+ this.selectionControl_2 = this.fb.control(null, Validators.required);
17
+ this.selectionControl_3 = this.fb.control(null, Validators.required);
18
+ this.changeDetection_1 = this.fb.control(null);
19
+ this.changeDetection_2 = this.fb.control(null);
20
+ this.changeDetection_3 = this.fb.control(null);
21
+ }
22
+ ngOnInit() {
23
+ this.selectionControl_1.valueChanges.subscribe(data => {
24
+ if (this.changeDetection_1.valid)
25
+ console.log('CHANGE:', data);
26
+ });
27
+ this.selectionControl_2.valueChanges.subscribe(data => {
28
+ if (this.changeDetection_2.valid)
29
+ console.log('CHANGE:', data);
30
+ });
31
+ this.selectionControl_3.valueChanges.subscribe(data => {
32
+ if (this.changeDetection_3.valid)
33
+ console.log('CHANGE:', data);
34
+ });
35
+ }
36
+ customLabel(value) {
37
+ return `${value}K`;
38
+ }
39
+ // DISABLE
40
+ onDisabled_1(disable) {
41
+ if (disable) {
42
+ this.selectionControl_1.disable();
43
+ }
44
+ else {
45
+ this.selectionControl_1.enable();
46
+ }
47
+ }
48
+ onDisabled_2(disable) {
49
+ if (disable) {
50
+ this.selectionControl_2.disable();
51
+ }
52
+ else {
53
+ this.selectionControl_2.enable();
54
+ }
55
+ }
56
+ onPerformPatch() {
57
+ this.selectionControl_1.patchValue(5);
58
+ this.selectionControl_2.patchValue({ start: 25, end: 50 });
59
+ this.selectionControl_3.patchValue({ start: 25, end: 50 });
60
+ }
61
+ nothingMethod(value) {
62
+ return value.toString();
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RangeDemoComponent, selector: "app-range-selection-input-demo", ngImport: i0, template: "<div style=\"display: flex;\">\n <h1>Slider FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n </div>\n </div>\n</div>\n\n<!-- <h3>No Data - Projection of Error</h3>\n\n<app-input-slider>\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-input-slider>\n\n<div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div> -->\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Range Selection - VALUE</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_1\"\n [max]=\"25\"\n [showValue]=\"showVal_1.checked\"\n [showDivisions]=\"showTicks_1.checked\"\n [divisions]=\"showTicks_1.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_1.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_1>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_1>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_1>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_1>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range 0 - 25<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n No label<br>\n No Validation Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_2\"\n [min]=\"0\"\n [max]=\"100\"\n [showValue]=\"showVal_2.checked\"\n [showDivisions]=\"showTicks_2.checked\"\n [divisions]=\"showTicks_2.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_2.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('valueRequired')\">Must have a Selection</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_2>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_2>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_2>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_2>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection with Min/Max Validation - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_3\"\n [min]=\"0\"\n [max]=\"100\"\n [minRequired]=\"10\"\n [maxRequired]=\"50\"\n [showValue]=\"showVal_3.checked\"\n [showDivisions]=\"showTicks_3.checked\"\n [divisions]=\"showTicks_3.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_3.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">Range must be greater then 10</mat-error>\n </div>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('maxRequired')\">Range must me less then 50</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_3>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_3>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_3>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_3>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required with Min > 10 and Max < 50<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.RangeSelectionInputComponent, selector: "app-range-selection-input", inputs: ["min", "max", "showValue", "showDivisions", "divisions", "minRequired", "maxRequired", "displayFunc"] }] }); }
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeDemoComponent, decorators: [{
68
+ type: Component,
69
+ args: [{ selector: 'app-range-selection-input-demo', template: "<div style=\"display: flex;\">\n <h1>Slider FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n </div>\n </div>\n</div>\n\n<!-- <h3>No Data - Projection of Error</h3>\n\n<app-input-slider>\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-input-slider>\n\n<div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div> -->\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Range Selection - VALUE</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_1\"\n [max]=\"25\"\n [showValue]=\"showVal_1.checked\"\n [showDivisions]=\"showTicks_1.checked\"\n [divisions]=\"showTicks_1.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_1.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_1>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_1>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_1>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_1>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range 0 - 25<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n No label<br>\n No Validation Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_2\"\n [min]=\"0\"\n [max]=\"100\"\n [showValue]=\"showVal_2.checked\"\n [showDivisions]=\"showTicks_2.checked\"\n [divisions]=\"showTicks_2.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_2.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('valueRequired')\">Must have a Selection</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_2>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_2>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_2>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_2>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection with Min/Max Validation - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_3\"\n [min]=\"0\"\n [max]=\"100\"\n [minRequired]=\"10\"\n [maxRequired]=\"50\"\n [showValue]=\"showVal_3.checked\"\n [showDivisions]=\"showTicks_3.checked\"\n [divisions]=\"showTicks_3.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_3.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">Range must be greater then 10</mat-error>\n </div>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('maxRequired')\">Range must me less then 50</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_3>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_3>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_3>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_3>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required with Min > 10 and Max < 50<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n" }]
70
+ }], ctorParameters: function () { return []; } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGVtby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yYW5nZS1zZWxlY3Rpb24taW5wdXQvc3JjL2xpYi9yYW5nZS1kZW1vL3JhbmdlLWRlbW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFuZ2Utc2VsZWN0aW9uLWlucHV0L3NyYy9saWIvcmFuZ2UtZGVtby9yYW5nZS1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QjtRQVpBLE9BQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFeEIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQWMsSUFBSSxDQUFDLENBQUE7UUFDdkQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQXNDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEcsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQXNDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEcsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQWEsSUFBSSxDQUFDLENBQUE7UUFDckQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQWEsSUFBSSxDQUFDLENBQUE7UUFDckQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQWEsSUFBSSxDQUFDLENBQUE7SUFJckMsQ0FBQztJQUVqQixRQUFRO1FBRU4sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsSUFBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSztnQkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BELElBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUQsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlELENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBRUQsVUFBVTtJQUNWLFlBQVksQ0FBQyxPQUFnQjtRQUUzQixJQUFHLE9BQU8sRUFBRTtZQUNWLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ2pDO0lBRUgsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFnQjtRQUUzQixJQUFHLE9BQU8sRUFBRTtZQUNWLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFBO1NBQ2pDO0lBRUgsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUN6QixDQUFDOytHQWpFVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixzRUNSL0IscXFMQWtKQTs7NEZEMUlhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJhbmdlLXNlbGVjdGlvbi1pbnB1dC1kZW1vJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhbmdlLWRlbW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yYW5nZS1kZW1vLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSYW5nZURlbW9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKVxuXG4gIHNlbGVjdGlvbkNvbnRyb2xfMSA9IHRoaXMuZmIuY29udHJvbDxudW1iZXJ8bnVsbD4obnVsbClcbiAgc2VsZWN0aW9uQ29udHJvbF8yID0gdGhpcy5mYi5jb250cm9sPHsgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIgfXxudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICBzZWxlY3Rpb25Db250cm9sXzMgPSB0aGlzLmZiLmNvbnRyb2w8eyBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciB9fG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG5cbiAgY2hhbmdlRGV0ZWN0aW9uXzEgPSB0aGlzLmZiLmNvbnRyb2w8YW55W118bnVsbD4obnVsbClcbiAgY2hhbmdlRGV0ZWN0aW9uXzIgPSB0aGlzLmZiLmNvbnRyb2w8YW55W118bnVsbD4obnVsbClcbiAgY2hhbmdlRGV0ZWN0aW9uXzMgPSB0aGlzLmZiLmNvbnRyb2w8YW55W118bnVsbD4obnVsbClcblxuXG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICBpZih0aGlzLmNoYW5nZURldGVjdGlvbl8xLnZhbGlkKSBjb25zb2xlLmxvZygnQ0hBTkdFOicsZGF0YSlcbiAgICB9KVxuXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGlmKHRoaXMuY2hhbmdlRGV0ZWN0aW9uXzIudmFsaWQpIGNvbnNvbGUubG9nKCdDSEFOR0U6JyxkYXRhKVxuICAgIH0pXG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYodGhpcy5jaGFuZ2VEZXRlY3Rpb25fMy52YWxpZCkgY29uc29sZS5sb2coJ0NIQU5HRTonLGRhdGEpXG4gICAgfSlcblxuICB9XG5cbiAgY3VzdG9tTGFiZWwodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3ZhbHVlfUtgO1xuICB9XG5cbiAgLy8gRElTQUJMRVxuICBvbkRpc2FibGVkXzEoZGlzYWJsZTogYm9vbGVhbikge1xuXG4gICAgaWYoZGlzYWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzEuZGlzYWJsZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8xLmVuYWJsZSgpXG4gICAgfVxuXG4gIH1cblxuICBvbkRpc2FibGVkXzIoZGlzYWJsZTogYm9vbGVhbikge1xuXG4gICAgaWYoZGlzYWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIuZGlzYWJsZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8yLmVuYWJsZSgpXG4gICAgfVxuXG4gIH1cblxuICBvblBlcmZvcm1QYXRjaCgpIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRyb2xfMS5wYXRjaFZhbHVlKDUpXG4gICAgdGhpcy5zZWxlY3Rpb25Db250cm9sXzIucGF0Y2hWYWx1ZSh7IHN0YXJ0OiAyNSwgZW5kOiA1MCB9KVxuICAgIHRoaXMuc2VsZWN0aW9uQ29udHJvbF8zLnBhdGNoVmFsdWUoeyBzdGFydDogMjUsIGVuZDogNTAgfSlcbiAgfVxuXG4gIG5vdGhpbmdNZXRob2QodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXG4gIH1cblxufVxuXG5cblxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gIDxoMT5TbGlkZXIgRm9ybUNvbnRyb2w8L2gxPlxuICA8ZGl2IHN0eWxlPVwiZmxleDoxOyB0ZXh0LWFsaWduOiByaWdodDtcIj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XCI+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKGNsaWNrKT1cIm9uUGVyZm9ybVBhdGNoKClcIj5QYXRjaDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gPGgzPk5vIERhdGEgLSBQcm9qZWN0aW9uIG9mIEVycm9yPC9oMz5cblxuPGFwcC1pbnB1dC1zbGlkZXI+XG4gIDxoMyBzdHlsZT1cImNvbG9yOiByZWQ7IG1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDA7XCI+Tm8gRGF0YTwvaDM+XG48L2FwcC1pbnB1dC1zbGlkZXI+XG5cbjxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAuNXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48L2Rpdj4gLS0+XG5cbjxkaXY+XG4gIDxoMyBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+U2luZ2xlIFJhbmdlIFNlbGVjdGlvbiAtIFZBTFVFPC9oMz5cblxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNlbGVjdGlvbkNvbnRyb2xfMS5yZXNldCgpXCI+UmVzZXQ8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxhcHAtcmFuZ2Utc2VsZWN0aW9uLWlucHV0XG4gICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGlvbkNvbnRyb2xfMVwiXG4gICAgW21heF09XCIyNVwiXG4gICAgW3Nob3dWYWx1ZV09XCJzaG93VmFsXzEuY2hlY2tlZFwiXG4gICAgW3Nob3dEaXZpc2lvbnNdPVwic2hvd1RpY2tzXzEuY2hlY2tlZFwiXG4gICAgW2RpdmlzaW9uc109XCJzaG93VGlja3NfMS5jaGVja2VkID8gNSA6IDBcIlxuICAgIFtkaXNwbGF5RnVuY109XCIobGFiZWxGb3JtYXRfMS5jaGVja2VkKSA/IGN1c3RvbUxhYmVsIDogbm90aGluZ01ldGhvZFwiXG4gID5cbiAgPC9hcHAtcmFuZ2Utc2VsZWN0aW9uLWlucHV0PlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtmb3JtQ29udHJvbF09XCJjaGFuZ2VEZXRlY3Rpb25fMVwiPkNoYW5nZSBEZXRlY3Rpb248L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2Rpc2FibGUxIChjaGFuZ2UpPVwib25EaXNhYmxlZF8xKGRpc2FibGUxLmNoZWNrZWQpXCI+RGlzYWJsZTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8c3BhbiBzdHlsZT1cImZsZXg6MVwiPjwvc3Bhbj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjc2hvd1ZhbF8xPlNob3cgVmFsdWU8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI3Nob3dUaWNrc18xPlNob3cgRGl2aXNpb25zPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNkaXZpc2lvbnNfMT5EaXZpc2lvbnM8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2xhYmVsRm9ybWF0XzE+TGFiZWwgRm9ybWF0PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJyZW07XCI+XG4gICAgUmFuZ2UgMCAtIDI1PGJyIC8+XG4gICAgU3RlcCBJbmNyZW1lbnQgaXMgc2V0IHRvIDUgb25seSB3aGVuIFNob3cgRGl2aXNpb25zID0gdHJ1ZTxicj5cbiAgICBObyBsYWJlbDxicj5cbiAgICBObyBWYWxpZGF0aW9uIFJlcXVpcmVkPGJyPlxuICAgIFZhbGlkIHt7IHNlbGVjdGlvbkNvbnRyb2xfMS52YWxpZCB9fTxicj5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAuNXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTtcIj5cbiAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdj5cblxuICA8aDMgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwO1wiPlN0YXJ0L0VuZCBSYW5nZSBTZWxlY3Rpb24gLSBPQkpFQ1Q8L2gzPlxuXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+PC9zcGFuPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwic2VsZWN0aW9uQ29udHJvbF8yLnJlc2V0KClcIj5SZXNldDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGFwcC1yYW5nZS1zZWxlY3Rpb24taW5wdXRcbiAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0aW9uQ29udHJvbF8yXCJcbiAgICBbbWluXT1cIjBcIlxuICAgIFttYXhdPVwiMTAwXCJcbiAgICBbc2hvd1ZhbHVlXT1cInNob3dWYWxfMi5jaGVja2VkXCJcbiAgICBbc2hvd0RpdmlzaW9uc109XCJzaG93VGlja3NfMi5jaGVja2VkXCJcbiAgICBbZGl2aXNpb25zXT1cInNob3dUaWNrc18yLmNoZWNrZWQgPyA1IDogMFwiXG4gICAgW2Rpc3BsYXlGdW5jXT1cIihsYWJlbEZvcm1hdF8yLmNoZWNrZWQpID8gY3VzdG9tTGFiZWwgOiBub3RoaW5nTWV0aG9kXCJcbiAgPlxuICA8L2FwcC1yYW5nZS1zZWxlY3Rpb24taW5wdXQ+XG4gIDxkaXYgKm5nSWY9XCJlcnJvcjIuY2hlY2tlZFwiPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWxlY3Rpb25Db250cm9sXzIuaGFzRXJyb3IoJ3ZhbHVlUmVxdWlyZWQnKVwiPk11c3QgaGF2ZSBhIFNlbGVjdGlvbjwvbWF0LWVycm9yPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMnJlbTsgbWFyZ2luLXRvcDogMnJlbTtcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZm9ybUNvbnRyb2xdPVwiY2hhbmdlRGV0ZWN0aW9uXzJcIj5DaGFuZ2UgRGV0ZWN0aW9uPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNlcnJvcjI+RGlzcGxheSBFcnJvcjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjZGlzYWJsZTIgKGNoYW5nZSk9XCJvbkRpc2FibGVkXzIoZGlzYWJsZTIuY2hlY2tlZClcIj5EaXNhYmxlPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxzcGFuIHN0eWxlPVwiZmxleDoxXCI+PC9zcGFuPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNzaG93VmFsXzI+U2hvdyBWYWx1ZTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjc2hvd1RpY2tzXzI+U2hvdyBEaXZpc2lvbnM8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2RpdmlzaW9uc18yPkRpdmlzaW9uczwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjbGFiZWxGb3JtYXRfMj5MYWJlbCBGb3JtYXQ8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnJlbTtcIj5cbiAgICBSYW5nZSBmcm9tIDAgLSAxMDA8YnIgLz5cbiAgICBTdGVwIEluY3JlbWVudCBpcyBzZXQgdG8gNSBvbmx5IHdoZW4gU2hvdyBEaXZpc2lvbnMgPSB0cnVlPGJyPlxuICAgIExhYmVsPGJyPlxuICAgIFZhbGlkYXRpb24gUmVxdWlyZWQ8YnI+XG4gICAgVmFsaWQge3sgc2VsZWN0aW9uQ29udHJvbF8yLnZhbGlkIH19PGJyPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IC41cmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtO1wiPlxuICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2PlxuXG4gIDxoMyBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDA7XCI+U3RhcnQvRW5kIFJhbmdlIFNlbGVjdGlvbiB3aXRoIE1pbi9NYXggVmFsaWRhdGlvbiAtIE9CSkVDVDwvaDM+XG5cbiAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzZWxlY3Rpb25Db250cm9sXzMucmVzZXQoKVwiPlJlc2V0PC9idXR0b24+XG4gIDwvZGl2PlxuICA8YXBwLXJhbmdlLXNlbGVjdGlvbi1pbnB1dFxuICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3Rpb25Db250cm9sXzNcIlxuICAgIFttaW5dPVwiMFwiXG4gICAgW21heF09XCIxMDBcIlxuICAgIFttaW5SZXF1aXJlZF09XCIxMFwiXG4gICAgW21heFJlcXVpcmVkXT1cIjUwXCJcbiAgICBbc2hvd1ZhbHVlXT1cInNob3dWYWxfMy5jaGVja2VkXCJcbiAgICBbc2hvd0RpdmlzaW9uc109XCJzaG93VGlja3NfMy5jaGVja2VkXCJcbiAgICBbZGl2aXNpb25zXT1cInNob3dUaWNrc18zLmNoZWNrZWQgPyA1IDogMFwiXG4gICAgW2Rpc3BsYXlGdW5jXT1cIihsYWJlbEZvcm1hdF8zLmNoZWNrZWQpID8gY3VzdG9tTGFiZWwgOiBub3RoaW5nTWV0aG9kXCJcbiAgPlxuICA8L2FwcC1yYW5nZS1zZWxlY3Rpb24taW5wdXQ+XG4gIDxkaXYgKm5nSWY9XCJlcnJvcjMuY2hlY2tlZFwiPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJzZWxlY3Rpb25Db250cm9sXzMuaGFzRXJyb3IoJ21pblJlcXVpcmVkJylcIj5SYW5nZSBtdXN0IGJlIGdyZWF0ZXIgdGhlbiAxMDwvbWF0LWVycm9yPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImVycm9yMy5jaGVja2VkXCI+XG4gICAgPG1hdC1lcnJvciAqbmdJZj1cInNlbGVjdGlvbkNvbnRyb2xfMy5oYXNFcnJvcignbWF4UmVxdWlyZWQnKVwiPlJhbmdlIG11c3QgbWUgbGVzcyB0aGVuIDUwPC9tYXQtZXJyb3I+XG4gIDwvZGl2PlxuICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAycmVtOyBtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtmb3JtQ29udHJvbF09XCJjaGFuZ2VEZXRlY3Rpb25fMlwiPkNoYW5nZSBEZXRlY3Rpb248L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI2Vycm9yMz5EaXNwbGF5IEVycm9yPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNkaXNhYmxlMyAoY2hhbmdlKT1cIm9uRGlzYWJsZWRfMihkaXNhYmxlMi5jaGVja2VkKVwiPkRpc2FibGU8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPHNwYW4gc3R5bGU9XCJmbGV4OjFcIj48L3NwYW4+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgI3Nob3dWYWxfMz5TaG93IFZhbHVlPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNzaG93VGlja3NfMz5TaG93IERpdmlzaW9uczwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSAjZGl2aXNpb25zXzM+RGl2aXNpb25zPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlICNsYWJlbEZvcm1hdF8zPkxhYmVsIEZvcm1hdDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycmVtO1wiPlxuICAgIFJhbmdlIGZyb20gMCAtIDEwMDxiciAvPlxuICAgIFN0ZXAgSW5jcmVtZW50IGlzIHNldCB0byA1IG9ubHkgd2hlbiBTaG93IERpdmlzaW9ucyA9IHRydWU8YnI+XG4gICAgTGFiZWw8YnI+XG4gICAgVmFsaWRhdGlvbiBSZXF1aXJlZCB3aXRoIE1pbiA+IDEwIGFuZCBNYXggPCA1MDxicj5cbiAgICBWYWxpZCB7eyBzZWxlY3Rpb25Db250cm9sXzMudmFsaWQgfX08YnI+XG4gIDwvZGl2PlxuICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogLjVyZW07IG1hcmdpbi1ib3R0b206IDFyZW07XCI+XG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { MatSliderModule } from '@angular/material/slider';
5
+ import { MatButtonModule } from '@angular/material/button';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
8
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
9
+ import { MatDividerModule } from '@angular/material/divider';
10
+ import { RangeDemoComponent } from './range-demo/range-demo.component';
11
+ import { RangeSelectionInputComponent } from './input-slider/range-selection-input.component';
12
+ import * as i0 from "@angular/core";
13
+ export class RangeSelectionInputModule {
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
15
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, declarations: [RangeSelectionInputComponent,
16
+ RangeDemoComponent], imports: [CommonModule,
17
+ FormsModule,
18
+ ReactiveFormsModule,
19
+ MatButtonModule,
20
+ MatFormFieldModule,
21
+ MatSliderModule,
22
+ MatSlideToggleModule,
23
+ MatDividerModule,
24
+ MatButtonToggleModule], exports: [RangeSelectionInputComponent,
25
+ RangeDemoComponent] }); }
26
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, imports: [CommonModule,
27
+ FormsModule,
28
+ ReactiveFormsModule,
29
+ MatButtonModule,
30
+ MatFormFieldModule,
31
+ MatSliderModule,
32
+ MatSlideToggleModule,
33
+ MatDividerModule,
34
+ MatButtonToggleModule] }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, decorators: [{
37
+ type: NgModule,
38
+ args: [{
39
+ imports: [
40
+ CommonModule,
41
+ FormsModule,
42
+ ReactiveFormsModule,
43
+ MatButtonModule,
44
+ MatFormFieldModule,
45
+ MatSliderModule,
46
+ MatSlideToggleModule,
47
+ MatDividerModule,
48
+ MatButtonToggleModule,
49
+ ],
50
+ declarations: [
51
+ RangeSelectionInputComponent,
52
+ RangeDemoComponent,
53
+ ],
54
+ exports: [
55
+ RangeSelectionInputComponent,
56
+ RangeDemoComponent
57
+ ]
58
+ }]
59
+ }] });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0aW9uLWlucHV0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC9zcmMvbGliL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0FBdUI5RixNQUFNLE9BQU8seUJBQXlCOytHQUF6Qix5QkFBeUI7Z0hBQXpCLHlCQUF5QixpQkFSbEMsNEJBQTRCO1lBQzVCLGtCQUFrQixhQVpsQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsZ0JBQWdCO1lBQ2hCLHFCQUFxQixhQU9yQiw0QkFBNEI7WUFDNUIsa0JBQWtCO2dIQUdULHlCQUF5QixZQW5CbEMsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQUNoQixxQkFBcUI7OzRGQVdaLHlCQUF5QjtrQkFyQnJDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3RCO29CQUNELFlBQVksRUFBRTt3QkFDWiw0QkFBNEI7d0JBQzVCLGtCQUFrQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDRCQUE0Qjt3QkFDNUIsa0JBQWtCO3FCQUNuQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0U2xpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5cbmltcG9ydCB7IFJhbmdlRGVtb0NvbXBvbmVudCB9IGZyb20gJy4vcmFuZ2UtZGVtby9yYW5nZS1kZW1vLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYW5nZVNlbGVjdGlvbklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9pbnB1dC1zbGlkZXIvcmFuZ2Utc2VsZWN0aW9uLWlucHV0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdFNsaWRlck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgUmFuZ2VTZWxlY3Rpb25JbnB1dENvbXBvbmVudCxcbiAgICBSYW5nZURlbW9Db21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBSYW5nZVNlbGVjdGlvbklucHV0Q29tcG9uZW50LFxuICAgIFJhbmdlRGVtb0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJhbmdlU2VsZWN0aW9uSW5wdXRNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Public API Surface of range-selection-input
3
+ */
4
+ export * from './lib/range-demo/range-demo.component';
5
+ export * from './lib/input-slider/range-selection-input.component';
6
+ export * from './lib/range-selection-input.module';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3JhbmdlLXNlbGVjdGlvbi1pbnB1dC9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxvREFBb0QsQ0FBQztBQUVuRSxjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiByYW5nZS1zZWxlY3Rpb24taW5wdXRcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYW5nZS1kZW1vL3JhbmdlLWRlbW8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lucHV0LXNsaWRlci9yYW5nZS1zZWxlY3Rpb24taW5wdXQuY29tcG9uZW50JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFuZ2Utc2VsZWN0aW9uLWlucHV0Lm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0aW9uLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvcmFuZ2Utc2VsZWN0aW9uLWlucHV0L3NyYy9yYW5nZS1zZWxlY3Rpb24taW5wdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,275 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, forwardRef, Component, Input, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { FormBuilder, Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, ReactiveFormsModule } from '@angular/forms';
5
+ import * as i1 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i3$1 from '@angular/material/button';
8
+ import { MatButtonModule } from '@angular/material/button';
9
+ import * as i4 from '@angular/material/form-field';
10
+ import { MatFormFieldModule } from '@angular/material/form-field';
11
+ import * as i5 from '@angular/material/slide-toggle';
12
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
+ import * as i6 from '@angular/material/divider';
14
+ import { MatDividerModule } from '@angular/material/divider';
15
+ import * as i7 from '@angular/material/button-toggle';
16
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
17
+ import * as i3 from '@angular/material/slider';
18
+ import { MatSliderModule } from '@angular/material/slider';
19
+
20
+ class RangeSelectionInputComponent {
21
+ set min(value) {
22
+ this._min = (value) ? value : 0;
23
+ this.doubleSlider = value > -1 ? true : false;
24
+ }
25
+ get min() {
26
+ return this._min;
27
+ }
28
+ set max(value) {
29
+ this._max = value ? value : 100;
30
+ }
31
+ get max() {
32
+ return this._max;
33
+ }
34
+ set displayFunc(value) {
35
+ this._displayFunc = value;
36
+ }
37
+ get displayFunc() {
38
+ return (this._displayFunc) ? this._displayFunc : () => { };
39
+ }
40
+ constructor() {
41
+ this.fb = inject(FormBuilder);
42
+ this.doubleSlider = false;
43
+ this.startValue = this.fb.control(0);
44
+ this.endValue = this.fb.control(0);
45
+ this._min = 0;
46
+ this._max = 0;
47
+ this.showValue = false;
48
+ this.showDivisions = false;
49
+ this.divisions = 0;
50
+ this.minRequired = this.min;
51
+ this.maxRequired = this.max;
52
+ this.isObject = (value) => typeof value === "object";
53
+ this.disabled = false;
54
+ this.onChange = () => { };
55
+ this.onTouch = () => { };
56
+ this.sliderValue = { start: 0, end: 10 };
57
+ }
58
+ ngOnInit() {
59
+ }
60
+ onSetStartValue(value) {
61
+ if (!this.doubleSlider) {
62
+ this.sliderValue.end = +value;
63
+ this.onChange(this.sliderValue.end);
64
+ }
65
+ else {
66
+ this.sliderValue.start = +value;
67
+ this.onChange(this.sliderValue);
68
+ }
69
+ }
70
+ onSetEndValue(value) {
71
+ this.sliderValue.end = +value;
72
+ this.onChange(this.sliderValue);
73
+ }
74
+ writeValue(value) {
75
+ if (value) {
76
+ if (this.isObject(value) && this.doubleSlider) {
77
+ this.sliderValue.start = value.start || 0;
78
+ this.sliderValue.end = value.end || 0;
79
+ }
80
+ else {
81
+ this.sliderValue.end = value;
82
+ }
83
+ this.sliderValue.start = this.sliderValue.start < this.min ? this.min : this.sliderValue.start;
84
+ this.sliderValue.end = this.sliderValue.end < this.max ? this.sliderValue.end : this.max;
85
+ this.endValue.patchValue(this.sliderValue.end, { emitEvent: false });
86
+ this.startValue.patchValue(this.sliderValue.start, { emitEvent: false });
87
+ }
88
+ else {
89
+ this.sliderValue.start = 0;
90
+ this.sliderValue.end = 0;
91
+ this.startValue.patchValue(this.sliderValue.start, { emitEvent: false });
92
+ this.endValue.patchValue(this.sliderValue.end, { emitEvent: false });
93
+ }
94
+ }
95
+ validate(control) {
96
+ const isRequired = control.hasValidator(Validators.required) ? true : false;
97
+ let errors = { 'minRequired': false, 'maxRequired': false, 'valueRequired': false };
98
+ errors.valueRequired = this.sliderValue.start === 0 || this.sliderValue.end === 0 ? true : false;
99
+ errors.minRequired = this.sliderValue.start < this.minRequired ? true : false;
100
+ errors.maxRequired = this.sliderValue.end > this.maxRequired || this.sliderValue.end < this.minRequired ? true : false;
101
+ return Object.fromEntries(Object.entries(errors).filter(([key, value]) => value !== false));
102
+ }
103
+ registerOnChange(fn) {
104
+ this.onChange = fn;
105
+ }
106
+ registerOnTouched(fn) {
107
+ this.onTouch = fn;
108
+ }
109
+ setDisabledState(isDisabled) {
110
+ this.disabled = isDisabled;
111
+ }
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RangeSelectionInputComponent, selector: "app-range-selection-input", inputs: { min: "min", max: "max", showValue: "showValue", showDivisions: "showDivisions", divisions: "divisions", minRequired: "minRequired", maxRequired: "maxRequired", displayFunc: "displayFunc" }, providers: [
114
+ {
115
+ provide: NG_VALUE_ACCESSOR,
116
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
117
+ multi: true
118
+ },
119
+ {
120
+ provide: NG_VALIDATORS,
121
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
122
+ multi: true
123
+ }
124
+ ], ngImport: i0, template: "<div style=\"display: flex; gap: 2rem; flex-direction: column;\">\n\n <ng-container *ngIf=\"doubleSlider; else SINGLE\">\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [showTickMarks]=\"showDivisions\"\n [discrete]=\"showValue\"\n [step]=\"divisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n [formControl]=\"startValue\"\n matSliderStartThumb\n (change)=\"onSetStartValue(startValue.value)\"\n />\n <input\n [formControl]=\"endValue\"\n matSliderEndThumb\n (change)=\"onSetEndValue(endValue.value)\"\n >\n </mat-slider>\n </ng-container>\n\n <ng-template #SINGLE>\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"0\"\n [max]=\"max\"\n [step]=\"divisions\"\n [discrete]=\"showValue\"\n [showTickMarks]=\"showDivisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n matSliderThumb\n [formControl]=\"endValue\"\n (change)=\"onSetStartValue(endValue.value)\"\n >\n </mat-slider>\n\n </ng-template>\n\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i3.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i3.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }] }); }
125
+ }
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputComponent, decorators: [{
127
+ type: Component,
128
+ args: [{ selector: 'app-range-selection-input', providers: [
129
+ {
130
+ provide: NG_VALUE_ACCESSOR,
131
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
132
+ multi: true
133
+ },
134
+ {
135
+ provide: NG_VALIDATORS,
136
+ useExisting: forwardRef(() => RangeSelectionInputComponent),
137
+ multi: true
138
+ }
139
+ ], template: "<div style=\"display: flex; gap: 2rem; flex-direction: column;\">\n\n <ng-container *ngIf=\"doubleSlider; else SINGLE\">\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [showTickMarks]=\"showDivisions\"\n [discrete]=\"showValue\"\n [step]=\"divisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n [formControl]=\"startValue\"\n matSliderStartThumb\n (change)=\"onSetStartValue(startValue.value)\"\n />\n <input\n [formControl]=\"endValue\"\n matSliderEndThumb\n (change)=\"onSetEndValue(endValue.value)\"\n >\n </mat-slider>\n </ng-container>\n\n <ng-template #SINGLE>\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"0\"\n [max]=\"max\"\n [step]=\"divisions\"\n [discrete]=\"showValue\"\n [showTickMarks]=\"showDivisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n matSliderThumb\n [formControl]=\"endValue\"\n (change)=\"onSetStartValue(endValue.value)\"\n >\n </mat-slider>\n\n </ng-template>\n\n</div>\n" }]
140
+ }], ctorParameters: function () { return []; }, propDecorators: { min: [{
141
+ type: Input
142
+ }], max: [{
143
+ type: Input
144
+ }], showValue: [{
145
+ type: Input
146
+ }], showDivisions: [{
147
+ type: Input
148
+ }], divisions: [{
149
+ type: Input
150
+ }], minRequired: [{
151
+ type: Input
152
+ }], maxRequired: [{
153
+ type: Input
154
+ }], displayFunc: [{
155
+ type: Input
156
+ }] } });
157
+
158
+ class RangeDemoComponent {
159
+ constructor() {
160
+ this.fb = inject(FormBuilder);
161
+ this.selectionControl_1 = this.fb.control(null);
162
+ this.selectionControl_2 = this.fb.control(null, Validators.required);
163
+ this.selectionControl_3 = this.fb.control(null, Validators.required);
164
+ this.changeDetection_1 = this.fb.control(null);
165
+ this.changeDetection_2 = this.fb.control(null);
166
+ this.changeDetection_3 = this.fb.control(null);
167
+ }
168
+ ngOnInit() {
169
+ this.selectionControl_1.valueChanges.subscribe(data => {
170
+ if (this.changeDetection_1.valid)
171
+ console.log('CHANGE:', data);
172
+ });
173
+ this.selectionControl_2.valueChanges.subscribe(data => {
174
+ if (this.changeDetection_2.valid)
175
+ console.log('CHANGE:', data);
176
+ });
177
+ this.selectionControl_3.valueChanges.subscribe(data => {
178
+ if (this.changeDetection_3.valid)
179
+ console.log('CHANGE:', data);
180
+ });
181
+ }
182
+ customLabel(value) {
183
+ return `${value}K`;
184
+ }
185
+ // DISABLE
186
+ onDisabled_1(disable) {
187
+ if (disable) {
188
+ this.selectionControl_1.disable();
189
+ }
190
+ else {
191
+ this.selectionControl_1.enable();
192
+ }
193
+ }
194
+ onDisabled_2(disable) {
195
+ if (disable) {
196
+ this.selectionControl_2.disable();
197
+ }
198
+ else {
199
+ this.selectionControl_2.enable();
200
+ }
201
+ }
202
+ onPerformPatch() {
203
+ this.selectionControl_1.patchValue(5);
204
+ this.selectionControl_2.patchValue({ start: 25, end: 50 });
205
+ this.selectionControl_3.patchValue({ start: 25, end: 50 });
206
+ }
207
+ nothingMethod(value) {
208
+ return value.toString();
209
+ }
210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RangeDemoComponent, selector: "app-range-selection-input-demo", ngImport: i0, template: "<div style=\"display: flex;\">\n <h1>Slider FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n </div>\n </div>\n</div>\n\n<!-- <h3>No Data - Projection of Error</h3>\n\n<app-input-slider>\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-input-slider>\n\n<div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div> -->\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Range Selection - VALUE</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_1\"\n [max]=\"25\"\n [showValue]=\"showVal_1.checked\"\n [showDivisions]=\"showTicks_1.checked\"\n [divisions]=\"showTicks_1.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_1.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_1>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_1>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_1>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_1>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range 0 - 25<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n No label<br>\n No Validation Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_2\"\n [min]=\"0\"\n [max]=\"100\"\n [showValue]=\"showVal_2.checked\"\n [showDivisions]=\"showTicks_2.checked\"\n [divisions]=\"showTicks_2.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_2.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('valueRequired')\">Must have a Selection</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_2>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_2>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_2>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_2>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection with Min/Max Validation - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_3\"\n [min]=\"0\"\n [max]=\"100\"\n [minRequired]=\"10\"\n [maxRequired]=\"50\"\n [showValue]=\"showVal_3.checked\"\n [showDivisions]=\"showTicks_3.checked\"\n [divisions]=\"showTicks_3.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_3.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">Range must be greater then 10</mat-error>\n </div>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('maxRequired')\">Range must me less then 50</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_3>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_3>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_3>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_3>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required with Min > 10 and Max < 50<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: RangeSelectionInputComponent, selector: "app-range-selection-input", inputs: ["min", "max", "showValue", "showDivisions", "divisions", "minRequired", "maxRequired", "displayFunc"] }] }); }
212
+ }
213
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeDemoComponent, decorators: [{
214
+ type: Component,
215
+ args: [{ selector: 'app-range-selection-input-demo', template: "<div style=\"display: flex;\">\n <h1>Slider FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n </div>\n </div>\n</div>\n\n<!-- <h3>No Data - Projection of Error</h3>\n\n<app-input-slider>\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-input-slider>\n\n<div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div> -->\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Range Selection - VALUE</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_1\"\n [max]=\"25\"\n [showValue]=\"showVal_1.checked\"\n [showDivisions]=\"showTicks_1.checked\"\n [divisions]=\"showTicks_1.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_1.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_1>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_1>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_1>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_1>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range 0 - 25<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n No label<br>\n No Validation Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_2\"\n [min]=\"0\"\n [max]=\"100\"\n [showValue]=\"showVal_2.checked\"\n [showDivisions]=\"showTicks_2.checked\"\n [divisions]=\"showTicks_2.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_2.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('valueRequired')\">Must have a Selection</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_2>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_2>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_2>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_2>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection with Min/Max Validation - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_3\"\n [min]=\"0\"\n [max]=\"100\"\n [minRequired]=\"10\"\n [maxRequired]=\"50\"\n [showValue]=\"showVal_3.checked\"\n [showDivisions]=\"showTicks_3.checked\"\n [divisions]=\"showTicks_3.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_3.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">Range must be greater then 10</mat-error>\n </div>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('maxRequired')\">Range must me less then 50</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_3>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_3>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_3>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_3>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required with Min > 10 and Max < 50<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n" }]
216
+ }], ctorParameters: function () { return []; } });
217
+
218
+ class RangeSelectionInputModule {
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
220
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, declarations: [RangeSelectionInputComponent,
221
+ RangeDemoComponent], imports: [CommonModule,
222
+ FormsModule,
223
+ ReactiveFormsModule,
224
+ MatButtonModule,
225
+ MatFormFieldModule,
226
+ MatSliderModule,
227
+ MatSlideToggleModule,
228
+ MatDividerModule,
229
+ MatButtonToggleModule], exports: [RangeSelectionInputComponent,
230
+ RangeDemoComponent] }); }
231
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, imports: [CommonModule,
232
+ FormsModule,
233
+ ReactiveFormsModule,
234
+ MatButtonModule,
235
+ MatFormFieldModule,
236
+ MatSliderModule,
237
+ MatSlideToggleModule,
238
+ MatDividerModule,
239
+ MatButtonToggleModule] }); }
240
+ }
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RangeSelectionInputModule, decorators: [{
242
+ type: NgModule,
243
+ args: [{
244
+ imports: [
245
+ CommonModule,
246
+ FormsModule,
247
+ ReactiveFormsModule,
248
+ MatButtonModule,
249
+ MatFormFieldModule,
250
+ MatSliderModule,
251
+ MatSlideToggleModule,
252
+ MatDividerModule,
253
+ MatButtonToggleModule,
254
+ ],
255
+ declarations: [
256
+ RangeSelectionInputComponent,
257
+ RangeDemoComponent,
258
+ ],
259
+ exports: [
260
+ RangeSelectionInputComponent,
261
+ RangeDemoComponent
262
+ ]
263
+ }]
264
+ }] });
265
+
266
+ /*
267
+ * Public API Surface of range-selection-input
268
+ */
269
+
270
+ /**
271
+ * Generated bundle index. Do not edit.
272
+ */
273
+
274
+ export { RangeDemoComponent, RangeSelectionInputComponent, RangeSelectionInputModule };
275
+ //# sourceMappingURL=range-selection-input.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range-selection-input.mjs","sources":["../../../projects/range-selection-input/src/lib/input-slider/range-selection-input.component.ts","../../../projects/range-selection-input/src/lib/input-slider/range-selection-input.component.html","../../../projects/range-selection-input/src/lib/range-demo/range-demo.component.ts","../../../projects/range-selection-input/src/lib/range-demo/range-demo.component.html","../../../projects/range-selection-input/src/lib/range-selection-input.module.ts","../../../projects/range-selection-input/src/public-api.ts","../../../projects/range-selection-input/src/range-selection-input.ts"],"sourcesContent":["import { Component, Input, OnInit, forwardRef, inject } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, ControlValueAccessor, AbstractControl, ValidationErrors, Validators, FormBuilder } from '@angular/forms';\n\n@Component({\n selector: 'app-range-selection-input',\n templateUrl: './range-selection-input.component.html',\n styleUrls: ['./range-selection-input.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeSelectionInputComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RangeSelectionInputComponent),\n multi: true\n }\n ]\n})\nexport class RangeSelectionInputComponent implements OnInit, ControlValueAccessor {\n\n fb = inject(FormBuilder)\n\n doubleSlider = false\n\n startValue = this.fb.control(0)\n endValue = this.fb.control(0)\n\n _min = 0\n @Input() set min(value: number) {\n this._min = (value) ? value : 0\n this.doubleSlider = value > -1 ? true : false\n }\n\n get min() {\n return this._min\n }\n\n _max = 0\n @Input() set max(value: number) {\n this._max = value ? value : 100\n }\n\n get max() {\n return this._max\n }\n\n @Input() showValue = false\n @Input() showDivisions = false\n @Input() divisions = 0\n\n @Input() minRequired = this.min\n @Input() maxRequired = this.max\n\n _displayFunc: any\n @Input() set displayFunc(value: (data: any) => any) {\n this._displayFunc = value\n }\n\n get displayFunc() {\n return (this._displayFunc) ? this._displayFunc : () => {}\n }\n\n isObject = (value: any) => typeof value === \"object\"\n\n disabled = false\n\n onChange: any = () => {}\n onTouch: any = () => {}\n\n sliderValue = { start: 0, end: 10 }\n\n constructor() { }\n\n ngOnInit() {\n\n }\n\n onSetStartValue(value: any) {\n\n if(!this.doubleSlider) {\n\n this.sliderValue.end = +value\n this.onChange(this.sliderValue.end)\n\n } else {\n\n this.sliderValue.start = +value\n this.onChange(this.sliderValue)\n\n }\n\n }\n\n onSetEndValue(value: any) {\n this.sliderValue.end = +value\n this.onChange(this.sliderValue)\n }\n\n writeValue(value: any|number) {\n\n if(value) {\n\n if(this.isObject(value) && this.doubleSlider) {\n this.sliderValue.start = value.start || 0\n this.sliderValue.end = value.end || 0\n } else {\n this.sliderValue.end = value\n }\n\n this.sliderValue.start = this.sliderValue.start < this.min ? this.min : this.sliderValue.start\n this.sliderValue.end = this.sliderValue.end < this.max ? this.sliderValue.end : this.max\n\n this.endValue.patchValue(this.sliderValue.end, { emitEvent: false })\n this.startValue.patchValue(this.sliderValue.start, { emitEvent: false })\n\n } else {\n\n this.sliderValue.start = 0\n this.sliderValue.end = 0\n\n this.startValue.patchValue(this.sliderValue.start, { emitEvent: false })\n this.endValue.patchValue(this.sliderValue.end, { emitEvent: false })\n\n }\n\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n\n const isRequired = control.hasValidator(Validators.required) ? true : false\n\n let errors = { 'minRequired': false, 'maxRequired': false, 'valueRequired': false }\n\n errors.valueRequired = this.sliderValue.start === 0 || this.sliderValue.end === 0 ? true : false\n\n errors.minRequired = this.sliderValue.start < this.minRequired ? true : false\n errors.maxRequired = this.sliderValue.end > this.maxRequired || this.sliderValue.end < this.minRequired ? true : false\n\n return Object.fromEntries(Object.entries(errors).filter(([key, value]) => value !== false))\n\n }\n\n registerOnChange(fn: any){\n this.onChange = fn\n }\n\n registerOnTouched(fn: any){\n this.onTouch = fn\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled\n }\n\n}\n","<div style=\"display: flex; gap: 2rem; flex-direction: column;\">\n\n <ng-container *ngIf=\"doubleSlider; else SINGLE\">\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"min\"\n [max]=\"max\"\n [showTickMarks]=\"showDivisions\"\n [discrete]=\"showValue\"\n [step]=\"divisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n [formControl]=\"startValue\"\n matSliderStartThumb\n (change)=\"onSetStartValue(startValue.value)\"\n />\n <input\n [formControl]=\"endValue\"\n matSliderEndThumb\n (change)=\"onSetEndValue(endValue.value)\"\n >\n </mat-slider>\n </ng-container>\n\n <ng-template #SINGLE>\n <mat-slider\n [disabled]=\"disabled\"\n [min]=\"0\"\n [max]=\"max\"\n [step]=\"divisions\"\n [discrete]=\"showValue\"\n [showTickMarks]=\"showDivisions\"\n [displayWith]=\"displayFunc\"\n >\n <input\n matSliderThumb\n [formControl]=\"endValue\"\n (change)=\"onSetStartValue(endValue.value)\"\n >\n </mat-slider>\n\n </ng-template>\n\n</div>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'app-range-selection-input-demo',\n templateUrl: './range-demo.component.html',\n styleUrls: ['./range-demo.component.css']\n})\nexport class RangeDemoComponent implements OnInit {\n\n fb = inject(FormBuilder)\n\n selectionControl_1 = this.fb.control<number|null>(null)\n selectionControl_2 = this.fb.control<{ start: number, end: number }|null>(null, Validators.required)\n selectionControl_3 = this.fb.control<{ start: number, end: number }|null>(null, Validators.required)\n\n changeDetection_1 = this.fb.control<any[]|null>(null)\n changeDetection_2 = this.fb.control<any[]|null>(null)\n changeDetection_3 = this.fb.control<any[]|null>(null)\n\n\n\n constructor() { }\n\n ngOnInit() {\n\n this.selectionControl_1.valueChanges.subscribe(data => {\n if(this.changeDetection_1.valid) console.log('CHANGE:',data)\n })\n\n this.selectionControl_2.valueChanges.subscribe(data => {\n if(this.changeDetection_2.valid) console.log('CHANGE:',data)\n })\n\n this.selectionControl_3.valueChanges.subscribe(data => {\n if(this.changeDetection_3.valid) console.log('CHANGE:',data)\n })\n\n }\n\n customLabel(value: number): string {\n return `${value}K`;\n }\n\n // DISABLE\n onDisabled_1(disable: boolean) {\n\n if(disable) {\n this.selectionControl_1.disable()\n } else {\n this.selectionControl_1.enable()\n }\n\n }\n\n onDisabled_2(disable: boolean) {\n\n if(disable) {\n this.selectionControl_2.disable()\n } else {\n this.selectionControl_2.enable()\n }\n\n }\n\n onPerformPatch() {\n this.selectionControl_1.patchValue(5)\n this.selectionControl_2.patchValue({ start: 25, end: 50 })\n this.selectionControl_3.patchValue({ start: 25, end: 50 })\n }\n\n nothingMethod(value: number) {\n return value.toString()\n }\n\n}\n\n\n\n","<div style=\"display: flex;\">\n <h1>Slider FormControl</h1>\n <div style=\"flex:1; text-align: right;\">\n <div style=\"display: flex; gap: 2rem; flex-direction: row-reverse;\">\n <mat-button-toggle (click)=\"onPerformPatch()\">Patch</mat-button-toggle>\n </div>\n </div>\n</div>\n\n<!-- <h3>No Data - Projection of Error</h3>\n\n<app-input-slider>\n <h3 style=\"color: red; margin-top: 0; margin-bottom: 0;\">No Data</h3>\n</app-input-slider>\n\n<div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n</div> -->\n\n<div>\n <h3 style=\"margin-bottom: 0;\">Single Range Selection - VALUE</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_1.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_1\"\n [max]=\"25\"\n [showValue]=\"showVal_1.checked\"\n [showDivisions]=\"showTicks_1.checked\"\n [divisions]=\"showTicks_1.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_1.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_1\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #disable1 (change)=\"onDisabled_1(disable1.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_1>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_1>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_1>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_1>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range 0 - 25<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n No label<br>\n No Validation Required<br>\n Valid {{ selectionControl_1.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_2.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_2\"\n [min]=\"0\"\n [max]=\"100\"\n [showValue]=\"showVal_2.checked\"\n [showDivisions]=\"showTicks_2.checked\"\n [divisions]=\"showTicks_2.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_2.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error2.checked\">\n <mat-error *ngIf=\"selectionControl_2.hasError('valueRequired')\">Must have a Selection</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error2>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable2 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_2>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_2>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_2>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_2>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required<br>\n Valid {{ selectionControl_2.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n\n<div>\n\n <h3 style=\"margin-bottom: 0;\">Start/End Range Selection with Min/Max Validation - OBJECT</h3>\n\n <div style=\"display: flex;\">\n <span style=\"flex:1\"></span>\n <button mat-button (click)=\"selectionControl_3.reset()\">Reset</button>\n </div>\n <app-range-selection-input\n [formControl]=\"selectionControl_3\"\n [min]=\"0\"\n [max]=\"100\"\n [minRequired]=\"10\"\n [maxRequired]=\"50\"\n [showValue]=\"showVal_3.checked\"\n [showDivisions]=\"showTicks_3.checked\"\n [divisions]=\"showTicks_3.checked ? 5 : 0\"\n [displayFunc]=\"(labelFormat_3.checked) ? customLabel : nothingMethod\"\n >\n </app-range-selection-input>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('minRequired')\">Range must be greater then 10</mat-error>\n </div>\n <div *ngIf=\"error3.checked\">\n <mat-error *ngIf=\"selectionControl_3.hasError('maxRequired')\">Range must me less then 50</mat-error>\n </div>\n <div style=\"display: flex; gap: 2rem; margin-top: 2rem;\">\n <mat-slide-toggle [formControl]=\"changeDetection_2\">Change Detection</mat-slide-toggle>\n <mat-slide-toggle #error3>Display Error</mat-slide-toggle>\n <mat-slide-toggle #disable3 (change)=\"onDisabled_2(disable2.checked)\">Disable</mat-slide-toggle>\n <span style=\"flex:1\"></span>\n <mat-slide-toggle #showVal_3>Show Value</mat-slide-toggle>\n <mat-slide-toggle #showTicks_3>Show Divisions</mat-slide-toggle>\n <mat-slide-toggle #divisions_3>Divisions</mat-slide-toggle>\n <mat-slide-toggle #labelFormat_3>Label Format</mat-slide-toggle>\n </div>\n <div style=\"margin-top: 2rem;\">\n Range from 0 - 100<br />\n Step Increment is set to 5 only when Show Divisions = true<br>\n Label<br>\n Validation Required with Min > 10 and Max < 50<br>\n Valid {{ selectionControl_3.valid }}<br>\n </div>\n <div style=\"margin-top: .5rem; margin-bottom: 1rem;\">\n <mat-divider></mat-divider>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\n\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { RangeDemoComponent } from './range-demo/range-demo.component';\nimport { RangeSelectionInputComponent } from './input-slider/range-selection-input.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatSliderModule,\n MatSlideToggleModule,\n MatDividerModule,\n MatButtonToggleModule,\n ],\n declarations: [\n RangeSelectionInputComponent,\n RangeDemoComponent,\n ],\n exports: [\n RangeSelectionInputComponent,\n RangeDemoComponent\n ]\n})\nexport class RangeSelectionInputModule { }\n","/*\n * Public API Surface of range-selection-input\n */\n\nexport * from './lib/range-demo/range-demo.component';\nexport * from './lib/input-slider/range-selection-input.component';\n\nexport * from './lib/range-selection-input.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i8.RangeSelectionInputComponent"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="range-selection-input" />
5
+ export * from './public-api';
@@ -0,0 +1,42 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { ControlValueAccessor, AbstractControl, ValidationErrors, FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RangeSelectionInputComponent implements OnInit, ControlValueAccessor {
5
+ fb: FormBuilder;
6
+ doubleSlider: boolean;
7
+ startValue: import("@angular/forms").FormControl<number | null>;
8
+ endValue: import("@angular/forms").FormControl<number | null>;
9
+ _min: number;
10
+ set min(value: number);
11
+ get min(): number;
12
+ _max: number;
13
+ set max(value: number);
14
+ get max(): number;
15
+ showValue: boolean;
16
+ showDivisions: boolean;
17
+ divisions: number;
18
+ minRequired: number;
19
+ maxRequired: number;
20
+ _displayFunc: any;
21
+ set displayFunc(value: (data: any) => any);
22
+ get displayFunc(): (data: any) => any;
23
+ isObject: (value: any) => boolean;
24
+ disabled: boolean;
25
+ onChange: any;
26
+ onTouch: any;
27
+ sliderValue: {
28
+ start: number;
29
+ end: number;
30
+ };
31
+ constructor();
32
+ ngOnInit(): void;
33
+ onSetStartValue(value: any): void;
34
+ onSetEndValue(value: any): void;
35
+ writeValue(value: any | number): void;
36
+ validate(control: AbstractControl): ValidationErrors | null;
37
+ registerOnChange(fn: any): void;
38
+ registerOnTouched(fn: any): void;
39
+ setDisabledState(isDisabled: boolean): void;
40
+ static ɵfac: i0.ɵɵFactoryDeclaration<RangeSelectionInputComponent, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<RangeSelectionInputComponent, "app-range-selection-input", never, { "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "showValue": { "alias": "showValue"; "required": false; }; "showDivisions": { "alias": "showDivisions"; "required": false; }; "divisions": { "alias": "divisions"; "required": false; }; "minRequired": { "alias": "minRequired"; "required": false; }; "maxRequired": { "alias": "maxRequired"; "required": false; }; "displayFunc": { "alias": "displayFunc"; "required": false; }; }, {}, never, never, false, never>;
42
+ }
@@ -0,0 +1,27 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FormBuilder } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RangeDemoComponent implements OnInit {
5
+ fb: FormBuilder;
6
+ selectionControl_1: import("@angular/forms").FormControl<number | null>;
7
+ selectionControl_2: import("@angular/forms").FormControl<{
8
+ start: number;
9
+ end: number;
10
+ } | null>;
11
+ selectionControl_3: import("@angular/forms").FormControl<{
12
+ start: number;
13
+ end: number;
14
+ } | null>;
15
+ changeDetection_1: import("@angular/forms").FormControl<any[] | null>;
16
+ changeDetection_2: import("@angular/forms").FormControl<any[] | null>;
17
+ changeDetection_3: import("@angular/forms").FormControl<any[] | null>;
18
+ constructor();
19
+ ngOnInit(): void;
20
+ customLabel(value: number): string;
21
+ onDisabled_1(disable: boolean): void;
22
+ onDisabled_2(disable: boolean): void;
23
+ onPerformPatch(): void;
24
+ nothingMethod(value: number): string;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<RangeDemoComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<RangeDemoComponent, "app-range-selection-input-demo", never, {}, {}, never, never, false, never>;
27
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./input-slider/range-selection-input.component";
3
+ import * as i2 from "./range-demo/range-demo.component";
4
+ import * as i3 from "@angular/common";
5
+ import * as i4 from "@angular/forms";
6
+ import * as i5 from "@angular/material/button";
7
+ import * as i6 from "@angular/material/form-field";
8
+ import * as i7 from "@angular/material/slider";
9
+ import * as i8 from "@angular/material/slide-toggle";
10
+ import * as i9 from "@angular/material/divider";
11
+ import * as i10 from "@angular/material/button-toggle";
12
+ export declare class RangeSelectionInputModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<RangeSelectionInputModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<RangeSelectionInputModule, [typeof i1.RangeSelectionInputComponent, typeof i2.RangeDemoComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.MatButtonModule, typeof i6.MatFormFieldModule, typeof i7.MatSliderModule, typeof i8.MatSlideToggleModule, typeof i9.MatDividerModule, typeof i10.MatButtonToggleModule], [typeof i1.RangeSelectionInputComponent, typeof i2.RangeDemoComponent]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<RangeSelectionInputModule>;
16
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "range-selection-input",
3
+ "version": "15.0.2",
4
+ "peerDependencies": {
5
+ "@angular/common": "^15.2.0",
6
+ "@angular/core": "^15.2.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.3.0"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/range-selection-input.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/range-selection-input.mjs",
21
+ "esm": "./esm2022/range-selection-input.mjs",
22
+ "default": "./fesm2022/range-selection-input.mjs"
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,3 @@
1
+ export * from './lib/range-demo/range-demo.component';
2
+ export * from './lib/input-slider/range-selection-input.component';
3
+ export * from './lib/range-selection-input.module';
Binary file