@ngx-formly/material 6.3.12 → 7.0.0-alpha.1
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 +1 -0
- package/checkbox/checkbox.config.d.ts +2 -0
- package/checkbox/checkbox.type.d.ts +1 -1
- package/checkbox/public_api.d.ts +1 -0
- package/datepicker/datepicker.config.d.ts +2 -0
- package/datepicker/datepicker.type.d.ts +1 -1
- package/datepicker/public_api.d.ts +1 -0
- package/esm2022/checkbox/checkbox.config.mjs +17 -0
- package/esm2022/checkbox/checkbox.module.mjs +36 -0
- package/esm2022/checkbox/checkbox.type.mjs +113 -0
- package/esm2022/checkbox/public_api.mjs +4 -0
- package/esm2022/datepicker/datepicker.config.mjs +13 -0
- package/esm2022/datepicker/datepicker.module.mjs +40 -0
- package/esm2022/datepicker/datepicker.type.mjs +153 -0
- package/esm2022/datepicker/public_api.mjs +4 -0
- package/esm2022/form-field/field.type.mjs +142 -0
- package/esm2022/form-field/form-field.config.mjs +12 -0
- package/esm2022/form-field/form-field.module.mjs +23 -0
- package/esm2022/form-field/form-field.wrapper.mjs +159 -0
- package/esm2022/form-field/public_api.mjs +4 -0
- package/esm2022/input/input.config.mjs +32 -0
- package/esm2022/input/input.module.mjs +36 -0
- package/{esm2020 → esm2022}/input/input.type.mjs +8 -8
- package/esm2022/input/public_api.mjs +4 -0
- package/esm2022/lib/material.config.mjs +19 -0
- package/esm2022/lib/ui-material.mjs +4 -0
- package/esm2022/lib/ui-material.module.mjs +41 -0
- package/esm2022/multicheckbox/multicheckbox.config.mjs +13 -0
- package/esm2022/multicheckbox/multicheckbox.module.mjs +40 -0
- package/esm2022/multicheckbox/multicheckbox.type.mjs +85 -0
- package/esm2022/multicheckbox/public_api.mjs +4 -0
- package/esm2022/native-select/native-select.config.mjs +13 -0
- package/esm2022/native-select/native-select.module.mjs +40 -0
- package/{esm2020 → esm2022}/native-select/native-select.type.mjs +11 -11
- package/esm2022/native-select/public_api.mjs +4 -0
- package/esm2022/radio/public_api.mjs +4 -0
- package/esm2022/radio/radio.config.mjs +13 -0
- package/esm2022/radio/radio.module.mjs +40 -0
- package/esm2022/radio/radio.type.mjs +89 -0
- package/esm2022/select/public_api.mjs +4 -0
- package/esm2022/select/select.config.mjs +14 -0
- package/esm2022/select/select.module.mjs +44 -0
- package/esm2022/select/select.type.mjs +164 -0
- package/esm2022/slider/public_api.mjs +4 -0
- package/esm2022/slider/slider.config.mjs +13 -0
- package/esm2022/slider/slider.module.mjs +43 -0
- package/esm2022/slider/slider.type.mjs +67 -0
- package/esm2022/textarea/public_api.mjs +4 -0
- package/esm2022/textarea/textarea.config.mjs +13 -0
- package/esm2022/textarea/textarea.module.mjs +36 -0
- package/{esm2020 → esm2022}/textarea/textarea.type.mjs +12 -12
- package/esm2022/toggle/public_api.mjs +4 -0
- package/esm2022/toggle/toggle.config.mjs +13 -0
- package/esm2022/toggle/toggle.module.mjs +36 -0
- package/{esm2020 → esm2022}/toggle/toggle.type.mjs +8 -8
- package/{fesm2015 → fesm2022}/ngx-formly-material-checkbox.mjs +41 -51
- package/fesm2022/ngx-formly-material-checkbox.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-material-datepicker.mjs +38 -44
- package/fesm2022/ngx-formly-material-datepicker.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-material-form-field.mjs +35 -50
- package/fesm2022/ngx-formly-material-form-field.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-input.mjs +151 -0
- package/fesm2022/ngx-formly-material-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-material-multicheckbox.mjs +37 -43
- package/fesm2022/ngx-formly-material-multicheckbox.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-native-select.mjs +128 -0
- package/fesm2022/ngx-formly-material-native-select.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-radio.mjs +140 -0
- package/fesm2022/ngx-formly-material-radio.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-material-select.mjs +44 -51
- package/fesm2022/ngx-formly-material-select.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-slider.mjs +123 -0
- package/fesm2022/ngx-formly-material-slider.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-textarea.mjs +125 -0
- package/fesm2022/ngx-formly-material-textarea.mjs.map +1 -0
- package/fesm2022/ngx-formly-material-toggle.mjs +111 -0
- package/fesm2022/ngx-formly-material-toggle.mjs.map +1 -0
- package/fesm2022/ngx-formly-material.mjs +65 -0
- package/fesm2022/ngx-formly-material.mjs.map +1 -0
- package/form-field/field.type.d.ts +1 -1
- package/form-field/form-field.config.d.ts +2 -0
- package/form-field/form-field.wrapper.d.ts +1 -1
- package/form-field/public_api.d.ts +1 -0
- package/input/input.config.d.ts +2 -0
- package/input/input.type.d.ts +1 -1
- package/input/public_api.d.ts +1 -0
- package/lib/material.config.d.ts +1 -0
- package/lib/ui-material.d.ts +1 -0
- package/multicheckbox/multicheckbox.config.d.ts +2 -0
- package/multicheckbox/multicheckbox.type.d.ts +1 -1
- package/multicheckbox/public_api.d.ts +1 -0
- package/native-select/native-select.config.d.ts +2 -0
- package/native-select/native-select.type.d.ts +1 -1
- package/native-select/public_api.d.ts +1 -0
- package/package.json +53 -81
- package/radio/public_api.d.ts +1 -0
- package/radio/radio.config.d.ts +2 -0
- package/radio/radio.type.d.ts +1 -1
- package/select/public_api.d.ts +1 -0
- package/select/select.config.d.ts +2 -0
- package/select/select.type.d.ts +1 -1
- package/slider/public_api.d.ts +3 -4
- package/slider/slider.config.d.ts +2 -0
- package/slider/slider.module.d.ts +7 -9
- package/slider/slider.type.d.ts +5 -15
- package/textarea/public_api.d.ts +1 -0
- package/textarea/textarea.config.d.ts +2 -0
- package/textarea/textarea.type.d.ts +1 -1
- package/toggle/public_api.d.ts +1 -0
- package/toggle/toggle.config.d.ts +2 -0
- package/toggle/toggle.type.d.ts +1 -1
- package/checkbox/package.json +0 -10
- package/datepicker/package.json +0 -10
- package/esm2020/checkbox/checkbox.module.mjs +0 -61
- package/esm2020/checkbox/checkbox.type.mjs +0 -113
- package/esm2020/checkbox/public_api.mjs +0 -3
- package/esm2020/datepicker/datepicker.module.mjs +0 -57
- package/esm2020/datepicker/datepicker.type.mjs +0 -153
- package/esm2020/datepicker/public_api.mjs +0 -3
- package/esm2020/form-field/field.type.mjs +0 -142
- package/esm2020/form-field/form-field.module.mjs +0 -48
- package/esm2020/form-field/form-field.wrapper.mjs +0 -159
- package/esm2020/form-field/public_api.mjs +0 -3
- package/esm2020/input/input.module.mjs +0 -91
- package/esm2020/input/public_api.mjs +0 -3
- package/esm2020/lib/ui-material.mjs +0 -3
- package/esm2020/lib/ui-material.module.mjs +0 -43
- package/esm2020/multicheckbox/multicheckbox.module.mjs +0 -57
- package/esm2020/multicheckbox/multicheckbox.type.mjs +0 -85
- package/esm2020/multicheckbox/public_api.mjs +0 -3
- package/esm2020/native-select/native-select.module.mjs +0 -57
- package/esm2020/native-select/public_api.mjs +0 -3
- package/esm2020/radio/public_api.mjs +0 -3
- package/esm2020/radio/radio.module.mjs +0 -57
- package/esm2020/radio/radio.type.mjs +0 -89
- package/esm2020/select/public_api.mjs +0 -3
- package/esm2020/select/select.module.mjs +0 -63
- package/esm2020/select/select.type.mjs +0 -164
- package/esm2020/slider/public_api.mjs +0 -7
- package/esm2020/slider/slider-input.mjs +0 -466
- package/esm2020/slider/slider-interface.mjs +0 -15
- package/esm2020/slider/slider-mdc.type.mjs +0 -97
- package/esm2020/slider/slider.module.mjs +0 -65
- package/esm2020/slider/slider.type.mjs +0 -80
- package/esm2020/textarea/public_api.mjs +0 -3
- package/esm2020/textarea/textarea.module.mjs +0 -53
- package/esm2020/toggle/public_api.mjs +0 -3
- package/esm2020/toggle/toggle.module.mjs +0 -53
- package/fesm2015/ngx-formly-material-checkbox.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-datepicker.mjs +0 -214
- package/fesm2015/ngx-formly-material-datepicker.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-form-field.mjs +0 -351
- package/fesm2015/ngx-formly-material-form-field.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-input.mjs +0 -176
- package/fesm2015/ngx-formly-material-input.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-multicheckbox.mjs +0 -143
- package/fesm2015/ngx-formly-material-multicheckbox.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-native-select.mjs +0 -134
- package/fesm2015/ngx-formly-material-native-select.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-radio.mjs +0 -146
- package/fesm2015/ngx-formly-material-radio.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-select.mjs +0 -230
- package/fesm2015/ngx-formly-material-select.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-slider.mjs +0 -712
- package/fesm2015/ngx-formly-material-slider.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-textarea.mjs +0 -131
- package/fesm2015/ngx-formly-material-textarea.mjs.map +0 -1
- package/fesm2015/ngx-formly-material-toggle.mjs +0 -117
- package/fesm2015/ngx-formly-material-toggle.mjs.map +0 -1
- package/fesm2015/ngx-formly-material.mjs +0 -55
- package/fesm2015/ngx-formly-material.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-checkbox.mjs +0 -175
- package/fesm2020/ngx-formly-material-checkbox.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-datepicker.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-form-field.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-input.mjs +0 -176
- package/fesm2020/ngx-formly-material-input.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-multicheckbox.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-native-select.mjs +0 -134
- package/fesm2020/ngx-formly-material-native-select.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-radio.mjs +0 -146
- package/fesm2020/ngx-formly-material-radio.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-select.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-slider.mjs +0 -708
- package/fesm2020/ngx-formly-material-slider.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-textarea.mjs +0 -131
- package/fesm2020/ngx-formly-material-textarea.mjs.map +0 -1
- package/fesm2020/ngx-formly-material-toggle.mjs +0 -117
- package/fesm2020/ngx-formly-material-toggle.mjs.map +0 -1
- package/fesm2020/ngx-formly-material.mjs +0 -55
- package/fesm2020/ngx-formly-material.mjs.map +0 -1
- package/form-field/package.json +0 -10
- package/input/package.json +0 -10
- package/multicheckbox/package.json +0 -10
- package/native-select/package.json +0 -10
- package/radio/package.json +0 -10
- package/select/package.json +0 -10
- package/slider/package.json +0 -10
- package/slider/slider-input.d.ts +0 -180
- package/slider/slider-interface.d.ts +0 -138
- package/slider/slider-mdc.type.d.ts +0 -13
- package/textarea/package.json +0 -10
- package/toggle/package.json +0 -10
- /package/checkbox/{ngx-formly-material-checkbox.d.ts → index.d.ts} +0 -0
- /package/datepicker/{ngx-formly-material-datepicker.d.ts → index.d.ts} +0 -0
- /package/{esm2020 → esm2022}/checkbox/ngx-formly-material-checkbox.mjs +0 -0
- /package/{esm2020 → esm2022}/datepicker/ngx-formly-material-datepicker.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/ngx-formly-material-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/input/ngx-formly-material-input.mjs +0 -0
- /package/{esm2020 → esm2022}/multicheckbox/ngx-formly-material-multicheckbox.mjs +0 -0
- /package/{esm2020 → esm2022}/native-select/ngx-formly-material-native-select.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-formly-material.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/radio/ngx-formly-material-radio.mjs +0 -0
- /package/{esm2020 → esm2022}/select/ngx-formly-material-select.mjs +0 -0
- /package/{esm2020 → esm2022}/slider/ngx-formly-material-slider.mjs +0 -0
- /package/{esm2020 → esm2022}/textarea/ngx-formly-material-textarea.mjs +0 -0
- /package/{esm2020 → esm2022}/toggle/ngx-formly-material-toggle.mjs +0 -0
- /package/form-field/{ngx-formly-material-form-field.d.ts → index.d.ts} +0 -0
- /package/{ngx-formly-material.d.ts → index.d.ts} +0 -0
- /package/input/{ngx-formly-material-input.d.ts → index.d.ts} +0 -0
- /package/multicheckbox/{ngx-formly-material-multicheckbox.d.ts → index.d.ts} +0 -0
- /package/native-select/{ngx-formly-material-native-select.d.ts → index.d.ts} +0 -0
- /package/radio/{ngx-formly-material-radio.d.ts → index.d.ts} +0 -0
- /package/select/{ngx-formly-material-select.d.ts → index.d.ts} +0 -0
- /package/slider/{ngx-formly-material-slider.d.ts → index.d.ts} +0 -0
- /package/textarea/{ngx-formly-material-textarea.d.ts → index.d.ts} +0 -0
- /package/toggle/{ngx-formly-material-toggle.d.ts → index.d.ts} +0 -0
|
@@ -1,466 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
|
|
9
|
-
import { Directive, EventEmitter, forwardRef, Inject, Input, Output, } from '@angular/core';
|
|
10
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
11
|
-
import { MatSlider } from '@angular/material/slider';
|
|
12
|
-
import { VERSION } from '@angular/material/core';
|
|
13
|
-
import { Subject } from 'rxjs';
|
|
14
|
-
import { MAT_SLIDER_THUMB } from './slider-interface';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
class Signal {
|
|
17
|
-
constructor(value) {
|
|
18
|
-
this.value = value;
|
|
19
|
-
}
|
|
20
|
-
set(value) {
|
|
21
|
-
this.value = value;
|
|
22
|
-
}
|
|
23
|
-
update(updateFn) {
|
|
24
|
-
this.set(updateFn(this.value));
|
|
25
|
-
}
|
|
26
|
-
asReadonly() {
|
|
27
|
-
return this;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Provider that allows the slider thumb to register as a ControlValueAccessor.
|
|
32
|
-
* @docs-private
|
|
33
|
-
*/
|
|
34
|
-
export const MAT_SLIDER_THUMB_VALUE_ACCESSOR = {
|
|
35
|
-
provide: NG_VALUE_ACCESSOR,
|
|
36
|
-
useExisting: forwardRef(() => MatSliderThumb),
|
|
37
|
-
multi: true,
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Directive that adds slider-specific behaviors to an input element inside `<mat-slider>`.
|
|
41
|
-
* Up to two may be placed inside of a `<mat-slider>`.
|
|
42
|
-
*
|
|
43
|
-
* If one is used, the selector `matSliderThumb` must be used, and the outcome will be a normal
|
|
44
|
-
* slider. If two are used, the selectors `matSliderStartThumb` and `matSliderEndThumb` must be
|
|
45
|
-
* used, and the outcome will be a range slider with two slider thumbs.
|
|
46
|
-
* @ignore
|
|
47
|
-
*/
|
|
48
|
-
export class MatSliderThumb {
|
|
49
|
-
constructor(_ngZone, _elementRef, _cdr, _slider) {
|
|
50
|
-
this._ngZone = _ngZone;
|
|
51
|
-
this._elementRef = _elementRef;
|
|
52
|
-
this._cdr = _cdr;
|
|
53
|
-
this._slider = _slider;
|
|
54
|
-
/** Event emitted when the `value` is changed. */
|
|
55
|
-
this.valueChange = new EventEmitter();
|
|
56
|
-
/** Event emitted when the slider thumb starts being dragged. */
|
|
57
|
-
this.dragStart = new EventEmitter();
|
|
58
|
-
/** Event emitted when the slider thumb stops being dragged. */
|
|
59
|
-
this.dragEnd = new EventEmitter();
|
|
60
|
-
/**
|
|
61
|
-
* Indicates whether this thumb is the start or end thumb.
|
|
62
|
-
* @docs-private
|
|
63
|
-
*/
|
|
64
|
-
this.thumbPosition = 2 /* END */;
|
|
65
|
-
/** The aria-valuetext string representation of the input's value. */
|
|
66
|
-
this._valuetext = +VERSION.major >= 18 ? new Signal('') : '';
|
|
67
|
-
/** The radius of a native html slider's knob. */
|
|
68
|
-
this._knobRadius = 8;
|
|
69
|
-
/** Whether user's cursor is currently in a mouse down state on the input. */
|
|
70
|
-
this._isActive = false;
|
|
71
|
-
/** Whether the input is currently focused (either by tab or after clicking). */
|
|
72
|
-
this._isFocused = false;
|
|
73
|
-
/**
|
|
74
|
-
* Whether the initial value has been set.
|
|
75
|
-
* This exists because the initial value cannot be immediately set because the min and max
|
|
76
|
-
* must first be relayed from the parent MatSlider component, which can only happen later
|
|
77
|
-
* in the component lifecycle.
|
|
78
|
-
*/
|
|
79
|
-
this._hasSetInitialValue = false;
|
|
80
|
-
/** Emits when the component is destroyed. */
|
|
81
|
-
this._destroyed = new Subject();
|
|
82
|
-
/**
|
|
83
|
-
* Indicates whether UI updates should be skipped.
|
|
84
|
-
*
|
|
85
|
-
* This flag is used to avoid flickering
|
|
86
|
-
* when correcting values on pointer up/down.
|
|
87
|
-
*/
|
|
88
|
-
this._skipUIUpdate = false;
|
|
89
|
-
/** Callback called when the slider input value changes. */
|
|
90
|
-
this._onChangeFn = () => { };
|
|
91
|
-
/** Callback called when the slider input has been touched. */
|
|
92
|
-
this._onTouchedFn = () => { };
|
|
93
|
-
this._hostElement = _elementRef.nativeElement;
|
|
94
|
-
this._onPointerDown = this._onPointerDown.bind(this);
|
|
95
|
-
this._onPointerMove = this._onPointerMove.bind(this);
|
|
96
|
-
this._onPointerUp = this._onPointerUp.bind(this);
|
|
97
|
-
this._ngZone.runOutsideAngular(() => {
|
|
98
|
-
this._hostElement.addEventListener('pointerdown', this._onPointerDown);
|
|
99
|
-
this._hostElement.addEventListener('pointermove', this._onPointerMove);
|
|
100
|
-
this._hostElement.addEventListener('pointerup', this._onPointerUp);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
get value() {
|
|
104
|
-
return coerceNumberProperty(this._hostElement.value);
|
|
105
|
-
}
|
|
106
|
-
set value(v) {
|
|
107
|
-
const val = coerceNumberProperty(v).toString();
|
|
108
|
-
if (!this._hasSetInitialValue) {
|
|
109
|
-
this._initialValue = val;
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
if (this._isActive) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
this._hostElement.value = val;
|
|
116
|
-
this._updateThumbUIByValue();
|
|
117
|
-
this._slider._onValueChange(this);
|
|
118
|
-
this._cdr.detectChanges();
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* The current translateX in px of the slider visual thumb.
|
|
122
|
-
* @docs-private
|
|
123
|
-
*/
|
|
124
|
-
get translateX() {
|
|
125
|
-
if (this._slider.min >= this._slider.max) {
|
|
126
|
-
this._translateX = 0;
|
|
127
|
-
return this._translateX;
|
|
128
|
-
}
|
|
129
|
-
if (this._translateX === undefined) {
|
|
130
|
-
this._translateX = this._calcTranslateXByValue();
|
|
131
|
-
}
|
|
132
|
-
return this._translateX;
|
|
133
|
-
}
|
|
134
|
-
set translateX(v) {
|
|
135
|
-
this._translateX = v;
|
|
136
|
-
}
|
|
137
|
-
/** @docs-private */
|
|
138
|
-
get min() {
|
|
139
|
-
return coerceNumberProperty(this._hostElement.min);
|
|
140
|
-
}
|
|
141
|
-
set min(v) {
|
|
142
|
-
this._hostElement.min = coerceNumberProperty(v).toString();
|
|
143
|
-
this._cdr.detectChanges();
|
|
144
|
-
}
|
|
145
|
-
/** @docs-private */
|
|
146
|
-
get max() {
|
|
147
|
-
return coerceNumberProperty(this._hostElement.max);
|
|
148
|
-
}
|
|
149
|
-
set max(v) {
|
|
150
|
-
this._hostElement.max = coerceNumberProperty(v).toString();
|
|
151
|
-
this._cdr.detectChanges();
|
|
152
|
-
}
|
|
153
|
-
get step() {
|
|
154
|
-
return coerceNumberProperty(this._hostElement.step);
|
|
155
|
-
}
|
|
156
|
-
set step(v) {
|
|
157
|
-
this._hostElement.step = coerceNumberProperty(v).toString();
|
|
158
|
-
this._cdr.detectChanges();
|
|
159
|
-
}
|
|
160
|
-
/** @docs-private */
|
|
161
|
-
get disabled() {
|
|
162
|
-
return coerceBooleanProperty(this._hostElement.disabled);
|
|
163
|
-
}
|
|
164
|
-
set disabled(v) {
|
|
165
|
-
this._hostElement.disabled = coerceBooleanProperty(v);
|
|
166
|
-
this._cdr.detectChanges();
|
|
167
|
-
if (this._slider.disabled !== this.disabled) {
|
|
168
|
-
this._slider.disabled = this.disabled;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
/** The percentage of the slider that coincides with the value. */
|
|
172
|
-
get percentage() {
|
|
173
|
-
if (this._slider.min >= this._slider.max) {
|
|
174
|
-
return this._slider._isRtl ? 1 : 0;
|
|
175
|
-
}
|
|
176
|
-
return (this.value - this._slider.min) / (this._slider.max - this._slider.min);
|
|
177
|
-
}
|
|
178
|
-
/** @docs-private */
|
|
179
|
-
get fillPercentage() {
|
|
180
|
-
if (!this._slider._cachedWidth) {
|
|
181
|
-
return this._slider._isRtl ? 1 : 0;
|
|
182
|
-
}
|
|
183
|
-
if (this._translateX === 0) {
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
186
|
-
return this.translateX / this._slider._cachedWidth;
|
|
187
|
-
}
|
|
188
|
-
get valuetext() {
|
|
189
|
-
return +VERSION.major >= 18 ? this._valuetext.value : this._valuetext;
|
|
190
|
-
}
|
|
191
|
-
/** Used to relay updates to _isFocused to the slider visual thumbs. */
|
|
192
|
-
_setIsFocused(v) {
|
|
193
|
-
this._isFocused = v;
|
|
194
|
-
}
|
|
195
|
-
ngOnDestroy() {
|
|
196
|
-
this._hostElement.removeEventListener('pointerdown', this._onPointerDown);
|
|
197
|
-
this._hostElement.removeEventListener('pointermove', this._onPointerMove);
|
|
198
|
-
this._hostElement.removeEventListener('pointerup', this._onPointerUp);
|
|
199
|
-
this._destroyed.next();
|
|
200
|
-
this._destroyed.complete();
|
|
201
|
-
this.dragStart.complete();
|
|
202
|
-
this.dragEnd.complete();
|
|
203
|
-
}
|
|
204
|
-
/** @docs-private */
|
|
205
|
-
initProps() {
|
|
206
|
-
this._updateWidthInactive();
|
|
207
|
-
// If this or the parent slider is disabled, just make everything disabled.
|
|
208
|
-
if (this.disabled !== this._slider.disabled) {
|
|
209
|
-
// The MatSlider setter for disabled will relay this and disable both inputs.
|
|
210
|
-
this._slider.disabled = true;
|
|
211
|
-
}
|
|
212
|
-
this.step = this._slider.step;
|
|
213
|
-
this.min = this._slider.min;
|
|
214
|
-
this.max = this._slider.max;
|
|
215
|
-
this._initValue();
|
|
216
|
-
}
|
|
217
|
-
/** @docs-private */
|
|
218
|
-
initUI() {
|
|
219
|
-
this._updateThumbUIByValue();
|
|
220
|
-
}
|
|
221
|
-
_initValue() {
|
|
222
|
-
this._hasSetInitialValue = true;
|
|
223
|
-
if (this._initialValue === undefined) {
|
|
224
|
-
this.value = this._getDefaultValue();
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
this._hostElement.value = this._initialValue;
|
|
228
|
-
this._updateThumbUIByValue();
|
|
229
|
-
this._slider._onValueChange(this);
|
|
230
|
-
this._cdr.detectChanges();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
_getDefaultValue() {
|
|
234
|
-
return this.min;
|
|
235
|
-
}
|
|
236
|
-
_onBlur() {
|
|
237
|
-
this._setIsFocused(false);
|
|
238
|
-
this._onTouchedFn();
|
|
239
|
-
}
|
|
240
|
-
_onFocus() {
|
|
241
|
-
this._setIsFocused(true);
|
|
242
|
-
}
|
|
243
|
-
_onChange() {
|
|
244
|
-
this.valueChange.emit(this.value);
|
|
245
|
-
// only used to handle the edge case where user
|
|
246
|
-
// mousedown on the slider then uses arrow keys.
|
|
247
|
-
if (this._isActive) {
|
|
248
|
-
this._updateThumbUIByValue({ withAnimation: true });
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
_onInput() {
|
|
252
|
-
this._onChangeFn(this.value);
|
|
253
|
-
// handles arrowing and updating the value when
|
|
254
|
-
// a step is defined.
|
|
255
|
-
if (this._slider.step || !this._isActive) {
|
|
256
|
-
this._updateThumbUIByValue({ withAnimation: true });
|
|
257
|
-
}
|
|
258
|
-
this._slider._onValueChange(this);
|
|
259
|
-
}
|
|
260
|
-
_onNgControlValueChange() {
|
|
261
|
-
// only used to handle when the value change
|
|
262
|
-
// originates outside of the slider.
|
|
263
|
-
if (!this._isActive || !this._isFocused) {
|
|
264
|
-
this._slider._onValueChange(this);
|
|
265
|
-
this._updateThumbUIByValue();
|
|
266
|
-
}
|
|
267
|
-
this._slider.disabled = this._formControl.disabled;
|
|
268
|
-
}
|
|
269
|
-
_onPointerDown(event) {
|
|
270
|
-
if (this.disabled || event.button !== 0) {
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
this._isActive = true;
|
|
274
|
-
this._setIsFocused(true);
|
|
275
|
-
this._updateWidthActive();
|
|
276
|
-
this._slider._updateDimensions();
|
|
277
|
-
// Does nothing if a step is defined because we
|
|
278
|
-
// want the value to snap to the values on input.
|
|
279
|
-
if (!this._slider.step) {
|
|
280
|
-
this._updateThumbUIByPointerEvent(event, { withAnimation: true });
|
|
281
|
-
}
|
|
282
|
-
if (!this.disabled) {
|
|
283
|
-
this._handleValueCorrection(event);
|
|
284
|
-
this.dragStart.emit({ source: this, parent: this._slider, value: this.value });
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Corrects the value of the slider on pointer up/down.
|
|
289
|
-
*
|
|
290
|
-
* Called on pointer down and up because the value is set based
|
|
291
|
-
* on the inactive width instead of the active width.
|
|
292
|
-
*/
|
|
293
|
-
_handleValueCorrection(event) {
|
|
294
|
-
// Don't update the UI with the current value! The value on pointerdown
|
|
295
|
-
// and pointerup is calculated in the split second before the input(s)
|
|
296
|
-
// resize. See _updateWidthInactive() and _updateWidthActive() for more
|
|
297
|
-
// details.
|
|
298
|
-
this._skipUIUpdate = true;
|
|
299
|
-
// Note that this function gets triggered before the actual value of the
|
|
300
|
-
// slider is updated. This means if we were to set the value here, it
|
|
301
|
-
// would immediately be overwritten. Using setTimeout ensures the setting
|
|
302
|
-
// of the value happens after the value has been updated by the
|
|
303
|
-
// pointerdown event.
|
|
304
|
-
setTimeout(() => {
|
|
305
|
-
this._skipUIUpdate = false;
|
|
306
|
-
this._fixValue(event);
|
|
307
|
-
}, 0);
|
|
308
|
-
}
|
|
309
|
-
/** Corrects the value of the slider based on the pointer event's position. */
|
|
310
|
-
_fixValue(event) {
|
|
311
|
-
const xPos = event.clientX - this._slider._cachedLeft;
|
|
312
|
-
const width = this._slider._cachedWidth;
|
|
313
|
-
const step = this._slider.step === 0 ? 1 : this._slider.step;
|
|
314
|
-
const numSteps = Math.floor((this._slider.max - this._slider.min) / step);
|
|
315
|
-
const percentage = this._slider._isRtl ? 1 - xPos / width : xPos / width;
|
|
316
|
-
// To ensure the percentage is rounded to the necessary number of decimals.
|
|
317
|
-
const fixedPercentage = Math.round(percentage * numSteps) / numSteps;
|
|
318
|
-
const impreciseValue = fixedPercentage * (this._slider.max - this._slider.min) + this._slider.min;
|
|
319
|
-
const value = Math.round(impreciseValue / step) * step;
|
|
320
|
-
const prevValue = this.value;
|
|
321
|
-
if (value === prevValue) {
|
|
322
|
-
// Because we prevented UI updates, if it turns out that the race
|
|
323
|
-
// condition didn't happen and the value is already correct, we
|
|
324
|
-
// have to apply the ui updates now.
|
|
325
|
-
this._slider._onValueChange(this);
|
|
326
|
-
this._slider.step > 0
|
|
327
|
-
? this._updateThumbUIByValue()
|
|
328
|
-
: this._updateThumbUIByPointerEvent(event, { withAnimation: this._slider._hasAnimation });
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
this.value = value;
|
|
332
|
-
this.valueChange.emit(this.value);
|
|
333
|
-
this._onChangeFn(this.value);
|
|
334
|
-
this._slider._onValueChange(this);
|
|
335
|
-
this._slider.step > 0
|
|
336
|
-
? this._updateThumbUIByValue()
|
|
337
|
-
: this._updateThumbUIByPointerEvent(event, { withAnimation: this._slider._hasAnimation });
|
|
338
|
-
}
|
|
339
|
-
_onPointerMove(event) {
|
|
340
|
-
// Again, does nothing if a step is defined because
|
|
341
|
-
// we want the value to snap to the values on input.
|
|
342
|
-
if (!this._slider.step && this._isActive) {
|
|
343
|
-
this._updateThumbUIByPointerEvent(event);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
_onPointerUp() {
|
|
347
|
-
if (this._isActive) {
|
|
348
|
-
this._isActive = false;
|
|
349
|
-
this.dragEnd.emit({ source: this, parent: this._slider, value: this.value });
|
|
350
|
-
setTimeout(() => this._updateWidthInactive());
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
_clamp(v) {
|
|
354
|
-
return Math.max(Math.min(v, this._slider._cachedWidth), 0);
|
|
355
|
-
}
|
|
356
|
-
_calcTranslateXByValue() {
|
|
357
|
-
if (this._slider._isRtl) {
|
|
358
|
-
return (1 - this.percentage) * this._slider._cachedWidth;
|
|
359
|
-
}
|
|
360
|
-
return this.percentage * this._slider._cachedWidth;
|
|
361
|
-
}
|
|
362
|
-
_calcTranslateXByPointerEvent(event) {
|
|
363
|
-
return event.clientX - this._slider._cachedLeft;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Used to set the slider width to the correct
|
|
367
|
-
* dimensions while the user is dragging.
|
|
368
|
-
*/
|
|
369
|
-
_updateWidthActive() {
|
|
370
|
-
this._hostElement.style.padding = `0 ${this._slider._inputPadding}px`;
|
|
371
|
-
this._hostElement.style.width = `calc(100% + ${this._slider._inputPadding}px)`;
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Sets the slider input to disproportionate dimensions to allow for touch
|
|
375
|
-
* events to be captured on touch devices.
|
|
376
|
-
*/
|
|
377
|
-
_updateWidthInactive() {
|
|
378
|
-
this._hostElement.style.padding = '0px';
|
|
379
|
-
this._hostElement.style.width = 'calc(100% + 48px)';
|
|
380
|
-
this._hostElement.style.left = '-24px';
|
|
381
|
-
}
|
|
382
|
-
_updateThumbUIByValue(options) {
|
|
383
|
-
this.translateX = this._clamp(this._calcTranslateXByValue());
|
|
384
|
-
this._updateThumbUI(options);
|
|
385
|
-
}
|
|
386
|
-
_updateThumbUIByPointerEvent(event, options) {
|
|
387
|
-
this.translateX = this._clamp(this._calcTranslateXByPointerEvent(event));
|
|
388
|
-
this._updateThumbUI(options);
|
|
389
|
-
}
|
|
390
|
-
_updateThumbUI(options) {
|
|
391
|
-
this._slider._setTransition(!!options?.withAnimation);
|
|
392
|
-
this._slider._onTranslateXChange(this);
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Sets the input's value.
|
|
396
|
-
* @param value The new value of the input
|
|
397
|
-
* @docs-private
|
|
398
|
-
*/
|
|
399
|
-
writeValue(value) {
|
|
400
|
-
this.value = value;
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Registers a callback to be invoked when the input's value changes from user input.
|
|
404
|
-
* @param fn The callback to register
|
|
405
|
-
* @docs-private
|
|
406
|
-
*/
|
|
407
|
-
registerOnChange(fn) {
|
|
408
|
-
this._onChangeFn = fn;
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Registers a callback to be invoked when the input is blurred by the user.
|
|
412
|
-
* @param fn The callback to register
|
|
413
|
-
* @docs-private
|
|
414
|
-
*/
|
|
415
|
-
registerOnTouched(fn) {
|
|
416
|
-
this._onTouchedFn = fn;
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Sets the disabled state of the slider.
|
|
420
|
-
* @param isDisabled The new disabled state
|
|
421
|
-
* @docs-private
|
|
422
|
-
*/
|
|
423
|
-
setDisabledState(isDisabled) {
|
|
424
|
-
this.disabled = isDisabled;
|
|
425
|
-
}
|
|
426
|
-
focus() {
|
|
427
|
-
this._hostElement.focus();
|
|
428
|
-
}
|
|
429
|
-
blur() {
|
|
430
|
-
this._hostElement.blur();
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
MatSliderThumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MatSliderThumb, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: MatSlider }], target: i0.ɵɵFactoryTarget.Directive });
|
|
434
|
-
MatSliderThumb.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: MatSliderThumb, selector: "input[matSliderThumb]", inputs: { value: "value" }, outputs: { valueChange: "valueChange", dragStart: "dragStart", dragEnd: "dragEnd" }, host: { attributes: { "type": "range" }, listeners: { "change": "_onChange()", "input": "_onInput()", "blur": "_onBlur()", "focus": "_onFocus()" }, properties: { "attr.aria-valuetext": "valuetext" }, classAttribute: "mdc-slider__input" }, providers: [MAT_SLIDER_THUMB_VALUE_ACCESSOR, { provide: MAT_SLIDER_THUMB, useExisting: MatSliderThumb }], exportAs: ["matSliderThumb"], ngImport: i0 });
|
|
435
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MatSliderThumb, decorators: [{
|
|
436
|
-
type: Directive,
|
|
437
|
-
args: [{
|
|
438
|
-
// eslint-disable-next-line
|
|
439
|
-
selector: 'input[matSliderThumb]',
|
|
440
|
-
exportAs: 'matSliderThumb',
|
|
441
|
-
host: {
|
|
442
|
-
class: 'mdc-slider__input',
|
|
443
|
-
type: 'range',
|
|
444
|
-
'[attr.aria-valuetext]': 'valuetext',
|
|
445
|
-
'(change)': '_onChange()',
|
|
446
|
-
'(input)': '_onInput()',
|
|
447
|
-
// TODO(wagnermaciel): Consider using a global event listener instead.
|
|
448
|
-
// Reason: I have found a semi-consistent way to mouse up without triggering this event.
|
|
449
|
-
'(blur)': '_onBlur()',
|
|
450
|
-
'(focus)': '_onFocus()',
|
|
451
|
-
},
|
|
452
|
-
providers: [MAT_SLIDER_THUMB_VALUE_ACCESSOR, { provide: MAT_SLIDER_THUMB, useExisting: MatSliderThumb }],
|
|
453
|
-
}]
|
|
454
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
455
|
-
type: Inject,
|
|
456
|
-
args: [MatSlider]
|
|
457
|
-
}] }]; }, propDecorators: { value: [{
|
|
458
|
-
type: Input
|
|
459
|
-
}], valueChange: [{
|
|
460
|
-
type: Output
|
|
461
|
-
}], dragStart: [{
|
|
462
|
-
type: Output
|
|
463
|
-
}], dragEnd: [{
|
|
464
|
-
type: Output
|
|
465
|
-
}] } });
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3VpL21hdGVyaWFsL3NsaWRlci9zcmMvc2xpZGVyLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQThELGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRWxILE1BQU0sTUFBTTtJQUNWLFlBQW1CLEtBQVE7UUFBUixVQUFLLEdBQUwsS0FBSyxDQUFHO0lBQUcsQ0FBQztJQUMvQixHQUFHLENBQUMsS0FBUTtRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLENBQUMsUUFBeUI7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFRO0lBQ2xELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FB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QixFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDekc7OzBCQTJLSSxNQUFNOzJCQUFDLFNBQVM7NENBeEtmLEtBQUs7c0JBRFIsS0FBSztnQkFtQmEsV0FBVztzQkFBN0IsTUFBTTtnQkFHWSxTQUFTO3NCQUEzQixNQUFNO2dCQUdZLE9BQU87c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNsaWRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlcic7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBfTWF0VGh1bWIsIE1hdFNsaWRlckRyYWdFdmVudCwgX01hdFNsaWRlciwgX01hdFNsaWRlclRodW1iLCBNQVRfU0xJREVSX1RIVU1CIH0gZnJvbSAnLi9zbGlkZXItaW50ZXJmYWNlJztcblxuY2xhc3MgU2lnbmFsPFQ+IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBUKSB7fVxuICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbiAgdXBkYXRlKHVwZGF0ZUZuOiAodmFsdWU6IFQpID0+IFQpOiB2b2lkIHtcbiAgICB0aGlzLnNldCh1cGRhdGVGbih0aGlzLnZhbHVlKSk7XG4gIH1cbiAgYXNSZWFkb25seSgpOiBTaWduYWw8VD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXIgdGhhdCBhbGxvd3MgdGhlIHNsaWRlciB0aHVtYiB0byByZWdpc3RlciBhcyBhIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgTUFUX1NMSURFUl9USFVNQl9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0U2xpZGVyVGh1bWIpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbi8qKlxuICogRGlyZWN0aXZlIHRoYXQgYWRkcyBzbGlkZXItc3BlY2lmaWMgYmVoYXZpb3JzIHRvIGFuIGlucHV0IGVsZW1lbnQgaW5zaWRlIGA8bWF0LXNsaWRlcj5gLlxuICogVXAgdG8gdHdvIG1heSBiZSBwbGFjZWQgaW5zaWRlIG9mIGEgYDxtYXQtc2xpZGVyPmAuXG4gKlxuICogSWYgb25lIGlzIHVzZWQsIHRoZSBzZWxlY3RvciBgbWF0U2xpZGVyVGh1bWJgIG11c3QgYmUgdXNlZCwgYW5kIHRoZSBvdXRjb21lIHdpbGwgYmUgYSBub3JtYWxcbiAqIHNsaWRlci4gSWYgdHdvIGFyZSB1c2VkLCB0aGUgc2VsZWN0b3JzIGBtYXRTbGlkZXJTdGFydFRodW1iYCBhbmQgYG1hdFNsaWRlckVuZFRodW1iYCBtdXN0IGJlXG4gKiB1c2VkLCBhbmQgdGhlIG91dGNvbWUgd2lsbCBiZSBhIHJhbmdlIHNsaWRlciB3aXRoIHR3byBzbGlkZXIgdGh1bWJzLlxuICogQGlnbm9yZVxuICovXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHNlbGVjdG9yOiAnaW5wdXRbbWF0U2xpZGVyVGh1bWJdJyxcbiAgZXhwb3J0QXM6ICdtYXRTbGlkZXJUaHVtYicsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ21kYy1zbGlkZXJfX2lucHV0JyxcbiAgICB0eXBlOiAncmFuZ2UnLFxuICAgICdbYXR0ci5hcmlhLXZhbHVldGV4dF0nOiAndmFsdWV0ZXh0JyxcbiAgICAnKGNoYW5nZSknOiAnX29uQ2hhbmdlKCknLFxuICAgICcoaW5wdXQpJzogJ19vbklucHV0KCknLFxuICAgIC8vIFRPRE8od2FnbmVybWFjaWVsKTogQ29uc2lkZXIgdXNpbmcgYSBnbG9iYWwgZXZlbnQgbGlzdGVuZXIgaW5zdGVhZC5cbiAgICAvLyBSZWFzb246IEkgaGF2ZSBmb3VuZCBhIHNlbWktY29uc2lzdGVudCB3YXkgdG8gbW91c2UgdXAgd2l0aG91dCB0cmlnZ2VyaW5nIHRoaXMgZXZlbnQuXG4gICAgJyhibHVyKSc6ICdfb25CbHVyKCknLFxuICAgICcoZm9jdXMpJzogJ19vbkZvY3VzKCknLFxuICB9LFxuICBwcm92aWRlcnM6IFtNQVRfU0xJREVSX1RIVU1CX1ZBTFVFX0FDQ0VTU09SLCB7IHByb3ZpZGU6IE1BVF9TTElERVJfVEhVTUIsIHVzZUV4aXN0aW5nOiBNYXRTbGlkZXJUaHVtYiB9XSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0U2xpZGVyVGh1bWIgaW1wbGVtZW50cyBfTWF0U2xpZGVyVGh1bWIsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5faG9zdEVsZW1lbnQudmFsdWUpO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBOdW1iZXJJbnB1dCkge1xuICAgIGNvbnN0IHZhbCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHYpLnRvU3RyaW5nKCk7XG4gICAgaWYgKCF0aGlzLl9oYXNTZXRJbml0aWFsVmFsdWUpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZSA9IHZhbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2hvc3RFbGVtZW50LnZhbHVlID0gdmFsO1xuICAgIHRoaXMuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKCk7XG4gICAgdGhpcy5fc2xpZGVyLl9vblZhbHVlQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYHZhbHVlYCBpcyBjaGFuZ2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2xpZGVyIHRodW1iIHN0YXJ0cyBiZWluZyBkcmFnZ2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZ1N0YXJ0OiBFdmVudEVtaXR0ZXI8TWF0U2xpZGVyRHJhZ0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TWF0U2xpZGVyRHJhZ0V2ZW50PigpO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNsaWRlciB0aHVtYiBzdG9wcyBiZWluZyBkcmFnZ2VkLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZ0VuZDogRXZlbnRFbWl0dGVyPE1hdFNsaWRlckRyYWdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1hdFNsaWRlckRyYWdFdmVudD4oKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdHJhbnNsYXRlWCBpbiBweCBvZiB0aGUgc2xpZGVyIHZpc3VhbCB0aHVtYi5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgZ2V0IHRyYW5zbGF0ZVgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fc2xpZGVyLm1pbiA+PSB0aGlzLl9zbGlkZXIubWF4KSB7XG4gICAgICB0aGlzLl90cmFuc2xhdGVYID0gMDtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVYO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdHJhbnNsYXRlWCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl90cmFuc2xhdGVYID0gdGhpcy5fY2FsY1RyYW5zbGF0ZVhCeVZhbHVlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVYO1xuICB9XG4gIHNldCB0cmFuc2xhdGVYKHY6IG51bWJlcikge1xuICAgIHRoaXMuX3RyYW5zbGF0ZVggPSB2O1xuICB9XG4gIHByaXZhdGUgX3RyYW5zbGF0ZVg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0aHVtYiBpcyB0aGUgc3RhcnQgb3IgZW5kIHRodW1iLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICB0aHVtYlBvc2l0aW9uOiBfTWF0VGh1bWIgPSBfTWF0VGh1bWIuRU5EO1xuXG4gIC8qKiBAZG9jcy1wcml2YXRlICovXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodGhpcy5faG9zdEVsZW1lbnQubWluKTtcbiAgfVxuICBzZXQgbWluKHY6IE51bWJlcklucHV0KSB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQubWluID0gY29lcmNlTnVtYmVyUHJvcGVydHkodikudG9TdHJpbmcoKTtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh0aGlzLl9ob3N0RWxlbWVudC5tYXgpO1xuICB9XG4gIHNldCBtYXgodjogTnVtYmVySW5wdXQpIHtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5tYXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KS50b1N0cmluZygpO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh0aGlzLl9ob3N0RWxlbWVudC5zdGVwKTtcbiAgfVxuICBzZXQgc3RlcCh2OiBOdW1iZXJJbnB1dCkge1xuICAgIHRoaXMuX2hvc3RFbGVtZW50LnN0ZXAgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KS50b1N0cmluZygpO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLl9ob3N0RWxlbWVudC5kaXNhYmxlZCk7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHY6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2hvc3RFbGVtZW50LmRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5fc2xpZGVyLmRpc2FibGVkICE9PSB0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9zbGlkZXIuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgc2xpZGVyIHRoYXQgY29pbmNpZGVzIHdpdGggdGhlIHZhbHVlLiAqL1xuICBnZXQgcGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9zbGlkZXIubWluID49IHRoaXMuX3NsaWRlci5tYXgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zbGlkZXIuX2lzUnRsID8gMSA6IDA7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy52YWx1ZSAtIHRoaXMuX3NsaWRlci5taW4pIC8gKHRoaXMuX3NsaWRlci5tYXggLSB0aGlzLl9zbGlkZXIubWluKTtcbiAgfVxuXG4gIC8qKiBAZG9jcy1wcml2YXRlICovXG4gIGdldCBmaWxsUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NsaWRlci5faXNSdGwgPyAxIDogMDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RyYW5zbGF0ZVggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVYIC8gdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aDtcbiAgfVxuXG4gIC8qKiBUaGUgaG9zdCBuYXRpdmUgSFRNTCBpbnB1dCBlbGVtZW50LiAqL1xuICBfaG9zdEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgLyoqIFRoZSBhcmlhLXZhbHVldGV4dCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0J3MgdmFsdWUuICovXG4gIF92YWx1ZXRleHQ6IGFueSA9ICtWRVJTSU9OLm1ham9yID49IDE4ID8gbmV3IFNpZ25hbCgnJykgOiAnJztcblxuICBnZXQgdmFsdWV0ZXh0KCkge1xuICAgIHJldHVybiArVkVSU0lPTi5tYWpvciA+PSAxOCA/IHRoaXMuX3ZhbHVldGV4dC52YWx1ZSA6IHRoaXMuX3ZhbHVldGV4dDtcbiAgfVxuXG4gIC8qKiBUaGUgcmFkaXVzIG9mIGEgbmF0aXZlIGh0bWwgc2xpZGVyJ3Mga25vYi4gKi9cbiAgX2tub2JSYWRpdXM6IG51bWJlciA9IDg7XG5cbiAgLyoqIFdoZXRoZXIgdXNlcidzIGN1cnNvciBpcyBjdXJyZW50bHkgaW4gYSBtb3VzZSBkb3duIHN0YXRlIG9uIHRoZSBpbnB1dC4gKi9cbiAgX2lzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGN1cnJlbnRseSBmb2N1c2VkIChlaXRoZXIgYnkgdGFiIG9yIGFmdGVyIGNsaWNraW5nKS4gKi9cbiAgX2lzRm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIHJlbGF5IHVwZGF0ZXMgdG8gX2lzRm9jdXNlZCB0byB0aGUgc2xpZGVyIHZpc3VhbCB0aHVtYnMuICovXG4gIHByaXZhdGUgX3NldElzRm9jdXNlZCh2OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNGb2N1c2VkID0gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbml0aWFsIHZhbHVlIGhhcyBiZWVuIHNldC5cbiAgICogVGhpcyBleGlzdHMgYmVjYXVzZSB0aGUgaW5pdGlhbCB2YWx1ZSBjYW5ub3QgYmUgaW1tZWRpYXRlbHkgc2V0IGJlY2F1c2UgdGhlIG1pbiBhbmQgbWF4XG4gICAqIG11c3QgZmlyc3QgYmUgcmVsYXllZCBmcm9tIHRoZSBwYXJlbnQgTWF0U2xpZGVyIGNvbXBvbmVudCwgd2hpY2ggY2FuIG9ubHkgaGFwcGVuIGxhdGVyXG4gICAqIGluIHRoZSBjb21wb25lbnQgbGlmZWN5Y2xlLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFzU2V0SW5pdGlhbFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS4gKi9cbiAgX2luaXRpYWxWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBEZWZpbmVkIHdoZW4gYSB1c2VyIGlzIHVzaW5nIGEgZm9ybSBjb250cm9sIHRvIG1hbmFnZSBzbGlkZXIgdmFsdWUgJiB2YWxpZGF0aW9uLiAqL1xuICBwcml2YXRlIF9mb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgVUkgdXBkYXRlcyBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICpcbiAgICogVGhpcyBmbGFnIGlzIHVzZWQgdG8gYXZvaWQgZmxpY2tlcmluZ1xuICAgKiB3aGVuIGNvcnJlY3RpbmcgdmFsdWVzIG9uIHBvaW50ZXIgdXAvZG93bi5cbiAgICovXG4gIF9za2lwVUlVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHNsaWRlciBpbnB1dCB2YWx1ZSBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbkNoYW5nZUZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIC8qKiBDYWxsYmFjayBjYWxsZWQgd2hlbiB0aGUgc2xpZGVyIGlucHV0IGhhcyBiZWVuIHRvdWNoZWQuICovXG4gIHByaXZhdGUgX29uVG91Y2hlZEZuOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgX25nWm9uZTogTmdab25lLFxuICAgIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoTWF0U2xpZGVyKSBwcm90ZWN0ZWQgX3NsaWRlcjogX01hdFNsaWRlcixcbiAgKSB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQgPSBfZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuX29uUG9pbnRlckRvd24gPSB0aGlzLl9vblBvaW50ZXJEb3duLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb25Qb2ludGVyTW92ZSA9IHRoaXMuX29uUG9pbnRlck1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9vblBvaW50ZXJVcCA9IHRoaXMuX29uUG9pbnRlclVwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2hvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgdGhpcy5fb25Qb2ludGVyRG93bik7XG4gICAgICB0aGlzLl9ob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpO1xuICAgICAgdGhpcy5faG9zdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5fb25Qb2ludGVyVXApO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLl9vblBvaW50ZXJEb3duKTtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIHRoaXMuX29uUG9pbnRlck1vdmUpO1xuICAgIHRoaXMuX2hvc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMuX29uUG9pbnRlclVwKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kcmFnRW5kLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICBpbml0UHJvcHMoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlV2lkdGhJbmFjdGl2ZSgpO1xuXG4gICAgLy8gSWYgdGhpcyBvciB0aGUgcGFyZW50IHNsaWRlciBpcyBkaXNhYmxlZCwganVzdCBtYWtlIGV2ZXJ5dGhpbmcgZGlzYWJsZWQuXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHRoaXMuX3NsaWRlci5kaXNhYmxlZCkge1xuICAgICAgLy8gVGhlIE1hdFNsaWRlciBzZXR0ZXIgZm9yIGRpc2FibGVkIHdpbGwgcmVsYXkgdGhpcyBhbmQgZGlzYWJsZSBib3RoIGlucHV0cy5cbiAgICAgIHRoaXMuX3NsaWRlci5kaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGVwID0gdGhpcy5fc2xpZGVyLnN0ZXA7XG4gICAgdGhpcy5taW4gPSB0aGlzLl9zbGlkZXIubWluO1xuICAgIHRoaXMubWF4ID0gdGhpcy5fc2xpZGVyLm1heDtcbiAgICB0aGlzLl9pbml0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKiBAZG9jcy1wcml2YXRlICovXG4gIGluaXRVSSgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpO1xuICB9XG5cbiAgX2luaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9oYXNTZXRJbml0aWFsVmFsdWUgPSB0cnVlO1xuICAgIGlmICh0aGlzLl9pbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX2dldERlZmF1bHRWYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ob3N0RWxlbWVudC52YWx1ZSA9IHRoaXMuX2luaXRpYWxWYWx1ZTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKCk7XG4gICAgICB0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXREZWZhdWx0VmFsdWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5taW47XG4gIH1cblxuICBfb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldElzRm9jdXNlZChmYWxzZSk7XG4gICAgdGhpcy5fb25Ub3VjaGVkRm4oKTtcbiAgfVxuXG4gIF9vbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldElzRm9jdXNlZCh0cnVlKTtcbiAgfVxuXG4gIF9vbkNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgLy8gb25seSB1c2VkIHRvIGhhbmRsZSB0aGUgZWRnZSBjYXNlIHdoZXJlIHVzZXJcbiAgICAvLyBtb3VzZWRvd24gb24gdGhlIHNsaWRlciB0aGVuIHVzZXMgYXJyb3cga2V5cy5cbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKHsgd2l0aEFuaW1hdGlvbjogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBfb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUZuKHRoaXMudmFsdWUpO1xuICAgIC8vIGhhbmRsZXMgYXJyb3dpbmcgYW5kIHVwZGF0aW5nIHRoZSB2YWx1ZSB3aGVuXG4gICAgLy8gYSBzdGVwIGlzIGRlZmluZWQuXG4gICAgaWYgKHRoaXMuX3NsaWRlci5zdGVwIHx8ICF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoeyB3aXRoQW5pbWF0aW9uOiB0cnVlIH0pO1xuICAgIH1cbiAgICB0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyk7XG4gIH1cblxuICBfb25OZ0NvbnRyb2xWYWx1ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBvbmx5IHVzZWQgdG8gaGFuZGxlIHdoZW4gdGhlIHZhbHVlIGNoYW5nZVxuICAgIC8vIG9yaWdpbmF0ZXMgb3V0c2lkZSBvZiB0aGUgc2xpZGVyLlxuICAgIGlmICghdGhpcy5faXNBY3RpdmUgfHwgIXRoaXMuX2lzRm9jdXNlZCkge1xuICAgICAgdGhpcy5fc2xpZGVyLl9vblZhbHVlQ2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy5fdXBkYXRlVGh1bWJVSUJ5VmFsdWUoKTtcbiAgICB9XG4gICAgdGhpcy5fc2xpZGVyLmRpc2FibGVkID0gdGhpcy5fZm9ybUNvbnRyb2whLmRpc2FibGVkO1xuICB9XG5cbiAgX29uUG9pbnRlckRvd24oZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRJc0ZvY3VzZWQodHJ1ZSk7XG4gICAgdGhpcy5fdXBkYXRlV2lkdGhBY3RpdmUoKTtcbiAgICB0aGlzLl9zbGlkZXIuX3VwZGF0ZURpbWVuc2lvbnMoKTtcblxuICAgIC8vIERvZXMgbm90aGluZyBpZiBhIHN0ZXAgaXMgZGVmaW5lZCBiZWNhdXNlIHdlXG4gICAgLy8gd2FudCB0aGUgdmFsdWUgdG8gc25hcCB0byB0aGUgdmFsdWVzIG9uIGlucHV0LlxuICAgIGlmICghdGhpcy5fc2xpZGVyLnN0ZXApIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVRodW1iVUlCeVBvaW50ZXJFdmVudChldmVudCwgeyB3aXRoQW5pbWF0aW9uOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5faGFuZGxlVmFsdWVDb3JyZWN0aW9uKGV2ZW50KTtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQoeyBzb3VyY2U6IHRoaXMsIHBhcmVudDogdGhpcy5fc2xpZGVyLCB2YWx1ZTogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29ycmVjdHMgdGhlIHZhbHVlIG9mIHRoZSBzbGlkZXIgb24gcG9pbnRlciB1cC9kb3duLlxuICAgKlxuICAgKiBDYWxsZWQgb24gcG9pbnRlciBkb3duIGFuZCB1cCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBzZXQgYmFzZWRcbiAgICogb24gdGhlIGluYWN0aXZlIHdpZHRoIGluc3RlYWQgb2YgdGhlIGFjdGl2ZSB3aWR0aC5cbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZVZhbHVlQ29ycmVjdGlvbihldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBVSSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlISBUaGUgdmFsdWUgb24gcG9pbnRlcmRvd25cbiAgICAvLyBhbmQgcG9pbnRlcnVwIGlzIGNhbGN1bGF0ZWQgaW4gdGhlIHNwbGl0IHNlY29uZCBiZWZvcmUgdGhlIGlucHV0KHMpXG4gICAgLy8gcmVzaXplLiBTZWUgX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKSBhbmQgX3VwZGF0ZVdpZHRoQWN0aXZlKCkgZm9yIG1vcmVcbiAgICAvLyBkZXRhaWxzLlxuICAgIHRoaXMuX3NraXBVSVVwZGF0ZSA9IHRydWU7XG5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXRzIHRyaWdnZXJlZCBiZWZvcmUgdGhlIGFjdHVhbCB2YWx1ZSBvZiB0aGVcbiAgICAvLyBzbGlkZXIgaXMgdXBkYXRlZC4gVGhpcyBtZWFucyBpZiB3ZSB3ZXJlIHRvIHNldCB0aGUgdmFsdWUgaGVyZSwgaXRcbiAgICAvLyB3b3VsZCBpbW1lZGlhdGVseSBiZSBvdmVyd3JpdHRlbi4gVXNpbmcgc2V0VGltZW91dCBlbnN1cmVzIHRoZSBzZXR0aW5nXG4gICAgLy8gb2YgdGhlIHZhbHVlIGhhcHBlbnMgYWZ0ZXIgdGhlIHZhbHVlIGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGhlXG4gICAgLy8gcG9pbnRlcmRvd24gZXZlbnQuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9za2lwVUlVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZpeFZhbHVlKGV2ZW50KTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKiBDb3JyZWN0cyB0aGUgdmFsdWUgb2YgdGhlIHNsaWRlciBiYXNlZCBvbiB0aGUgcG9pbnRlciBldmVudCdzIHBvc2l0aW9uLiAqL1xuICBfZml4VmFsdWUoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHhQb3MgPSBldmVudC5jbGllbnRYIC0gdGhpcy5fc2xpZGVyLl9jYWNoZWRMZWZ0O1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aDtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5fc2xpZGVyLnN0ZXAgPT09IDAgPyAxIDogdGhpcy5fc2xpZGVyLnN0ZXA7XG4gICAgY29uc3QgbnVtU3RlcHMgPSBNYXRoLmZsb29yKCh0aGlzLl9zbGlkZXIubWF4IC0gdGhpcy5fc2xpZGVyLm1pbikgLyBzdGVwKTtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5fc2xpZGVyLl9pc1J0bCA/IDEgLSB4UG9zIC8gd2lkdGggOiB4UG9zIC8gd2lkdGg7XG5cbiAgICAvLyBUbyBlbnN1cmUgdGhlIHBlcmNlbnRhZ2UgaXMgcm91bmRlZCB0byB0aGUgbmVjZXNzYXJ5IG51bWJlciBvZiBkZWNpbWFscy5cbiAgICBjb25zdCBmaXhlZFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKHBlcmNlbnRhZ2UgKiBudW1TdGVwcykgLyBudW1TdGVwcztcblxuICAgIGNvbnN0IGltcHJlY2lzZVZhbHVlID0gZml4ZWRQZXJjZW50YWdlICogKHRoaXMuX3NsaWRlci5tYXggLSB0aGlzLl9zbGlkZXIubWluKSArIHRoaXMuX3NsaWRlci5taW47XG4gICAgY29uc3QgdmFsdWUgPSBNYXRoLnJvdW5kKGltcHJlY2lzZVZhbHVlIC8gc3RlcCkgKiBzdGVwO1xuICAgIGNvbnN0IHByZXZWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09IHByZXZWYWx1ZSkge1xuICAgICAgLy8gQmVjYXVzZSB3ZSBwcmV2ZW50ZWQgVUkgdXBkYXRlcywgaWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlIHJhY2VcbiAgICAgIC8vIGNvbmRpdGlvbiBkaWRuJ3QgaGFwcGVuIGFuZCB0aGUgdmFsdWUgaXMgYWxyZWFkeSBjb3JyZWN0LCB3ZVxuICAgICAgLy8gaGF2ZSB0byBhcHBseSB0aGUgdWkgdXBkYXRlcyBub3cuXG4gICAgICB0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLl9zbGlkZXIuc3RlcCA+IDBcbiAgICAgICAgPyB0aGlzLl91cGRhdGVUaHVtYlVJQnlWYWx1ZSgpXG4gICAgICAgIDogdGhpcy5fdXBkYXRlVGh1bWJVSUJ5UG9pbnRlckV2ZW50KGV2ZW50LCB7IHdpdGhBbmltYXRpb246IHRoaXMuX3NsaWRlci5faGFzQW5pbWF0aW9uIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5fb25DaGFuZ2VGbih0aGlzLnZhbHVlKTtcbiAgICB0aGlzLl9zbGlkZXIuX29uVmFsdWVDaGFuZ2UodGhpcyk7XG4gICAgdGhpcy5fc2xpZGVyLnN0ZXAgPiAwXG4gICAgICA/IHRoaXMuX3VwZGF0ZVRodW1iVUlCeVZhbHVlKClcbiAgICAgIDogdGhpcy5fdXBkYXRlVGh1bWJVSUJ5UG9pbnRlckV2ZW50KGV2ZW50LCB7IHdpdGhBbmltYXRpb246IHRoaXMuX3NsaWRlci5faGFzQW5pbWF0aW9uIH0pO1xuICB9XG5cbiAgX29uUG9pbnRlck1vdmUoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIC8vIEFnYWluLCBkb2VzIG5vdGhpbmcgaWYgYSBzdGVwIGlzIGRlZmluZWQgYmVjYXVzZVxuICAgIC8vIHdlIHdhbnQgdGhlIHZhbHVlIHRvIHNuYXAgdG8gdGhlIHZhbHVlcyBvbiBpbnB1dC5cbiAgICBpZiAoIXRoaXMuX3NsaWRlci5zdGVwICYmIHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICB0aGlzLl91cGRhdGVUaHVtYlVJQnlQb2ludGVyRXZlbnQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIF9vblBvaW50ZXJVcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWdFbmQuZW1pdCh7IHNvdXJjZTogdGhpcywgcGFyZW50OiB0aGlzLl9zbGlkZXIsIHZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl91cGRhdGVXaWR0aEluYWN0aXZlKCkpO1xuICAgIH1cbiAgfVxuXG4gIF9jbGFtcCh2OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbih2LCB0aGlzLl9zbGlkZXIuX2NhY2hlZFdpZHRoKSwgMCk7XG4gIH1cblxuICBfY2FsY1RyYW5zbGF0ZVhCeVZhbHVlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX3NsaWRlci5faXNSdGwpIHtcbiAgICAgIHJldHVybiAoMSAtIHRoaXMucGVyY2VudGFnZSkgKiB0aGlzLl9zbGlkZXIuX2NhY2hlZFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wZXJjZW50YWdlICogdGhpcy5fc2xpZGVyLl9jYWNoZWRXaWR0aDtcbiAgfVxuXG4gIF9jYWxjVHJhbnNsYXRlWEJ5UG9pbnRlckV2ZW50KGV2ZW50OiBQb2ludGVyRXZlbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBldmVudC5jbGllbnRYIC0gdGhpcy5fc2xpZGVyLl9jYWNoZWRMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHRoZSBzbGlkZXIgd2lkdGggdG8gdGhlIGNvcnJlY3RcbiAgICogZGltZW5zaW9ucyB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy5cbiAgICovXG4gIF91cGRhdGVXaWR0aEFjdGl2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5wYWRkaW5nID0gYDAgJHt0aGlzLl9zbGlkZXIuX2lucHV0UGFkZGluZ31weGA7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgY2FsYygxMDAlICsgJHt0aGlzLl9zbGlkZXIuX2lucHV0UGFkZGluZ31weClgO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNsaWRlciBpbnB1dCB0byBkaXNwcm9wb3J0aW9uYXRlIGRpbWVuc2lvbnMgdG8gYWxsb3cgZm9yIHRvdWNoXG4gICAqIGV2ZW50cyB0byBiZSBjYXB0dXJlZCBvbiB0b3VjaCBkZXZpY2VzLlxuICAgKi9cbiAgX3VwZGF0ZVdpZHRoSW5hY3RpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcwcHgnO1xuICAgIHRoaXMuX2hvc3RFbGVtZW50LnN0eWxlLndpZHRoID0gJ2NhbGMoMTAwJSArIDQ4cHgpJztcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5zdHlsZS5sZWZ0ID0gJy0yNHB4JztcbiAgfVxuXG4gIF91cGRhdGVUaHVtYlVJQnlWYWx1ZShvcHRpb25zPzogeyB3aXRoQW5pbWF0aW9uOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVggPSB0aGlzLl9jbGFtcCh0aGlzLl9jYWxjVHJhbnNsYXRlWEJ5VmFsdWUoKSk7XG4gICAgdGhpcy5fdXBkYXRlVGh1bWJVSShvcHRpb25zKTtcbiAgfVxuXG4gIF91cGRhdGVUaHVtYlVJQnlQb2ludGVyRXZlbnQoZXZlbnQ6IFBvaW50ZXJFdmVudCwgb3B0aW9ucz86IHsgd2l0aEFuaW1hdGlvbjogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2xhdGVYID0gdGhpcy5fY2xhbXAodGhpcy5fY2FsY1RyYW5zbGF0ZVhCeVBvaW50ZXJFdmVudChldmVudCkpO1xuICAgIHRoaXMuX3VwZGF0ZVRodW1iVUkob3B0aW9ucyk7XG4gIH1cblxuICBfdXBkYXRlVGh1bWJVSShvcHRpb25zPzogeyB3aXRoQW5pbWF0aW9uOiBib29sZWFuIH0pIHtcbiAgICB0aGlzLl9zbGlkZXIuX3NldFRyYW5zaXRpb24oISFvcHRpb25zPy53aXRoQW5pbWF0aW9uKTtcbiAgICB0aGlzLl9zbGlkZXIuX29uVHJhbnNsYXRlWENoYW5nZSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnB1dCdzIHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBvZiB0aGUgaW5wdXRcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgaW5wdXQncyB2YWx1ZSBjaGFuZ2VzIGZyb20gdXNlciBpbnB1dC5cbiAgICogQHBhcmFtIGZuIFRoZSBjYWxsYmFjayB0byByZWdpc3RlclxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUZuID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBpbnB1dCBpcyBibHVycmVkIGJ5IHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gZm4gVGhlIGNhbGxiYWNrIHRvIHJlZ2lzdGVyXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRGbiA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBzbGlkZXIuXG4gICAqIEBwYXJhbSBpc0Rpc2FibGVkIFRoZSBuZXcgZGlzYWJsZWQgc3RhdGVcbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLl9ob3N0RWxlbWVudC5ibHVyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { InjectionToken } from '@angular/core';
|
|
9
|
-
/**
|
|
10
|
-
* Injection token that can be used to query for a `MatSliderThumb`.
|
|
11
|
-
* Used primarily to avoid circular imports.
|
|
12
|
-
* @docs-private
|
|
13
|
-
*/
|
|
14
|
-
export const MAT_SLIDER_THUMB = new InjectionToken('_MatSliderThumb');
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy91aS9tYXRlcmlhbC9zbGlkZXIvc3JjL3NsaWRlci1pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVkvQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQUssaUJBQWlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmlwcGxlR2xvYmFsT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuXG4vKipcbiAqIFRodW1iIHR5cGVzOiByYW5nZSBzbGlkZXIgaGFzIHR3byB0aHVtYnMgKFNUQVJULCBFTkQpIHdoZXJlYXMgc2luZ2xlIHBvaW50XG4gKiBzbGlkZXIgb25seSBoYXMgb25lIHRodW1iIChFTkQpLlxuICovXG5leHBvcnQgY29uc3QgZW51bSBfTWF0VGh1bWIge1xuICBTVEFSVCA9IDEsXG4gIEVORCA9IDIsXG59XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gcXVlcnkgZm9yIGEgYE1hdFNsaWRlclRodW1iYC5cbiAqIFVzZWQgcHJpbWFyaWx5IHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydHMuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBNQVRfU0xJREVSX1RIVU1CID0gbmV3IEluamVjdGlvblRva2VuPHt9PignX01hdFNsaWRlclRodW1iJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRyYWcgZXZlbnQgZW1pdHRlZCBieSB0aGUgTWF0U2xpZGVyIGNvbXBvbmVudC5cbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXRTbGlkZXJEcmFnRXZlbnQge1xuICAvKiogVGhlIE1hdFNsaWRlclRodW1iIHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aC4gKi9cbiAgc291cmNlOiBfTWF0U2xpZGVyVGh1bWI7XG5cbiAgLyoqIFRoZSBNYXRTbGlkZXIgdGhhdCB3YXMgaW50ZXJhY3RlZCB3aXRoLiAqL1xuICBwYXJlbnQ6IF9NYXRTbGlkZXI7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzbGlkZXIuICovXG4gIHZhbHVlOiBudW1iZXI7XG59XG5cbi8qKiBAaWdub3JlICovXG5leHBvcnQgaW50ZXJmYWNlIF9NYXRTbGlkZXIge1xuICAvKiogR2V0cyB0aGUgc2xpZGVyIHRodW1iIGlucHV0IG9mIHRoZSBnaXZlbiB0aHVtYiBwb3NpdGlvbi4gKi9cbiAgX2dldElucHV0KHRodW1iUG9zaXRpb246IF9NYXRUaHVtYik6IF9NYXRTbGlkZXJUaHVtYiB8IHVuZGVmaW5lZDtcblxuICAvKiogVGhlIG1pbmltdW0gdmFsdWUgdGhhdCB0aGUgc2xpZGVyIGNhbiBoYXZlLiAqL1xuICBtaW46IG51bWJlcjtcblxuICAvKiogVGhlIG1heGltdW0gdmFsdWUgdGhhdCB0aGUgc2xpZGVyIGNhbiBoYXZlLiAqL1xuICBtYXg6IG51bWJlcjtcblxuICAvKiogVGhlIGFtb3VudCB0aGF0IHNsaWRlciB2YWx1ZXMgY2FuIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuICovXG4gIHN0ZXA6IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgc2xpZGVyIGlzIGRpc2FibGVkLiAqL1xuICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgc2xpZGVyIGlzIGEgcmFuZ2Ugc2xpZGVyLiAqL1xuICBfaXNSYW5nZTogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgc2xpZGVyIGlzIHJ0bC4gKi9cbiAgX2lzUnRsOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgc3RvcmVkIHdpZHRoIG9mIHRoZSBob3N0IGVsZW1lbnQncyBib3VuZGluZyBjbGllbnQgcmVjdC4gKi9cbiAgX2NhY2hlZFdpZHRoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBzdG9yZWQgd2lkdGggb2YgdGhlIGhvc3QgZWxlbWVudCdzIGJvdW5kaW5nIGNsaWVudCByZWN0LiAqL1xuICBfY2FjaGVkTGVmdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFkZGluZyBvZiB0aGUgbmF0aXZlIHNsaWRlciBpbnB1dC4gVGhpcyBpcyBhZGRlZCBpbiBvcmRlciB0byBtYWtlIHRoZSByZWdpb24gd2hlcmUgdGhlXG4gICAqIHRodW1iIHJpcHBsZSBleHRlbmRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2xpZGVyIHRyYWNrIGNsaWNrYWJsZS5cbiAgICovXG4gIF9pbnB1dFBhZGRpbmc6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9mZnNldCByZXByZXNlbnRzIGxlZnQgbW9zdCB0cmFuc2xhdGVYIG9mIHRoZSBzbGlkZXIga25vYi4gSW52ZXJzZWx5LFxuICAgKiAoc2xpZGVyIHdpZHRoIC0gb2Zmc2V0KSA9IHRoZSByaWdodCBtb3N0IHRyYW5zbGF0ZVggb2YgdGhlIHNsaWRlciBrbm9iLlxuICAgKlxuICAgKiBOb3RlOlxuICAgKiAgICAqIFRoZSBuYXRpdmUgc2xpZGVyIGtub2IgZGlmZmVycyBmcm9tIHRoZSB2aXN1YWwgc2xpZGVyLiBJdCdzIGtub2IgY2Fubm90IHNsaWRlIHBhc3RcbiAgICogICAgICB0aGUgZW5kIG9mIHRoZSB0cmFjayBBVCBBTEwuXG4gICAqICAgICogVGhlIHZpc3VhbCBzbGlkZXIga25vYiBDQU4gc2xpZGUgcGFzdCB0aGUgZW5kIG9mIHRoZSB0cmFjayBzbGlnaHRseS4gSXQncyBrbm9iIGNhbiBzbGlkZVxuICAgKiAgICAgIHBhc3QgdGhlIGVuZCBvZiB0aGUgdHJhY2sgc3VjaCB0aGF0IGl0J3MgY2VudGVyIGxpbmVzIHVwIHdpdGggdGhlIGVuZCBvZiB0aGUgdHJhY2suXG4gICAqL1xuICBfaW5wdXRPZmZzZXQ6IG51bWJlcjtcblxuICAvKiogVGhlIHJhZGl1cyBvZiB0aGUgdmlzdWFsIHNsaWRlcidzIHJpcHBsZS4gKi9cbiAgX3JpcHBsZVJhZGl1czogbnVtYmVyO1xuXG4gIC8qKiBUaGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIGBtYXRSaXBwbGVgIGluc3RhbmNlcy4gKi9cbiAgcmVhZG9ubHkgX2dsb2JhbFJpcHBsZU9wdGlvbnM/OiBSaXBwbGVHbG9iYWxPcHRpb25zO1xuXG4gIC8qKiBXaGV0aGVyIGFuaW1hdGlvbnMgaGF2ZSBiZWVuIGRpc2FibGVkLiAqL1xuICBfbm9vcEFuaW1hdGlvbnM6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBzbGlkZXIgc2hvdWxkIHVzZSBhbmltYXRpb25zLiAqL1xuICBfaGFzQW5pbWF0aW9uOiBib29sZWFuO1xuXG4gIC8qKiBUcmlnZ2VycyBVSSB1cGRhdGVzIHRoYXQgYXJlIG5lZWRlZCBhZnRlciBhIHNsaWRlciBpbnB1dCB2YWx1ZSBoYXMgY2hhbmdlZC4gKi9cbiAgX29uVmFsdWVDaGFuZ2U6IChzb3VyY2U6IF9NYXRTbGlkZXJUaHVtYikgPT4gdm9pZDtcblxuICAvKiogVHJpZ2dlcnMgVUkgdXBkYXRlcyB0aGF0IGFyZSBuZWVkZWQgYWZ0ZXIgdGhlIHNsaWRlciB0aHVtYiBwb3NpdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgX29uVHJhbnNsYXRlWENoYW5nZTogKHNvdXJjZTogX01hdFNsaWRlclRodW1iKSA9PiB2b2lkO1xuXG4gIC8qKiBVcGRhdGVzIHRoZSBzdG9yZWQgc2xpZGVyIGRpbWVuc2lvbnMgdXNpbmcgdGhlIGN1cnJlbnQgYm91bmRpbmcgY2xpZW50IHJlY3QuICovXG4gIF91cGRhdGVEaW1lbnNpb25zOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBVc2VkIHRvIHNldCB0aGUgdHJhbnNpdGlvbiBkdXJhdGlvbiBmb3IgdGh1bWIgYW5kIHRyYWNrIGFuaW1hdGlvbnMuICovXG4gIF9zZXRUcmFuc2l0aW9uOiAod2l0aEFuaW1hdGlvbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuLyoqIEBpZ25vcmUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgX01hdFNsaWRlclRodW1iIHtcbiAgLyoqIFRoZSBtaW5pbXVtIHZhbHVlIHRoYXQgdGhlIHNsaWRlciBjYW4gaGF2ZS4gKi9cbiAgbWluOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgdGhlIHNsaWRlciBjYW4gaGF2ZS4gKi9cbiAgbWF4OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBhbW91bnQgdGhhdCBzbGlkZXIgdmFsdWVzIGNhbiBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LiAqL1xuICBzdGVwOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgc2xpZGVyIGlucHV0LiAqL1xuICB2YWx1ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgY3VycmVudCB0cmFuc2xhdGVYIGluIHB4IG9mIHRoZSBzbGlkZXIgdmlzdWFsIHRodW1iLiAqL1xuICB0cmFuc2xhdGVYOiBudW1iZXI7XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdGh1bWIgaXMgdGhlIHN0YXJ0IG9yIGVuZCB0aHVtYi4gKi9cbiAgdGh1bWJQb3NpdGlvbjogX01hdFRodW1iO1xuXG4gIC8qKiBTaW1pbGFyIHRvIHBlcmNlbnRhZ2UgYnV0IGNhbGN1YWx0ZWQgdXNpbmcgdHJhbnNsYXRlWCByZWxhdGl2ZSB0byB0aGUgdG90YWwgdHJhY2sgd2lkdGguICovXG4gIGZpbGxQZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNsaWRlciBpcyBkaXNhYmxlZC4gKi9cbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBob3N0IG5hdGl2ZSBIVE1MIGlucHV0IGVsZW1lbnQuICovXG4gIF9ob3N0RWxlbWVudDogSFRNTElucHV0RWxlbWVudDtcblxuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaXMgY3VycmVudGx5IGZvY3VzZWQgKGVpdGhlciBieSB0YWIgb3IgYWZ0ZXIgY2xpY2tpbmcpLiAqL1xuICBfaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgYXJpYS12YWx1ZXRleHQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dCdzIHZhbHVlLiAqL1xuICBfdmFsdWV0ZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIFVJIHVwZGF0ZXMgc2hvdWxkIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIFRoaXMgZmxhZyBpcyB1c2VkIHRvIGF2b2lkIGZsaWNrZXJpbmdcbiAgICogd2hlbiBjb3JyZWN0aW5nIHZhbHVlcyBvbiBwb2ludGVyIHVwL2Rvd24uXG4gICAqL1xuICBfc2tpcFVJVXBkYXRlOiBib29sZWFuO1xuXG4gIC8qKiBIYW5kbGVzIHRoZSBpbml0aWFsaXphdGlvbiBvZiBwcm9wZXJ0aWVzIGZvciB0aGUgc2xpZGVyIGlucHV0LiAqL1xuICBpbml0UHJvcHM6ICgpID0+IHZvaWQ7XG5cbiAgLyoqIEhhbmRsZXMgVUkgaW5pdGlhbGl6YXRpb24gY29udHJvbGxlZCBieSB0aGlzIHNsaWRlciBpbnB1dC4gKi9cbiAgaW5pdFVJOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBDYWxjdWxhdGVzIHRoZSB2aXN1YWwgdGh1bWIncyB0cmFuc2xhdGVYIGJhc2VkIG9uIHRoZSBzbGlkZXIgaW5wdXQncyBjdXJyZW50IHZhbHVlLiAqL1xuICBfY2FsY1RyYW5zbGF0ZVhCeVZhbHVlOiAoKSA9PiBudW1iZXI7XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIHZpc3VhbCB0aHVtYiBiYXNlZCBvbiB0aGUgc2xpZGVyIGlucHV0J3MgY3VycmVudCB2YWx1ZS4gKi9cbiAgX3VwZGF0ZVRodW1iVUlCeVZhbHVlOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzbGlkZXIgaW5wdXQgdG8gZGlzcHJvcG9ydGlvbmF0ZSBkaW1lbnNpb25zIHRvIGFsbG93IGZvciB0b3VjaFxuICAgKiBldmVudHMgdG8gYmUgY2FwdHVyZWQgb24gdG91Y2ggZGV2aWNlcy5cbiAgICovXG4gIF91cGRhdGVXaWR0aEluYWN0aXZlOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNldCB0aGUgc2xpZGVyIHdpZHRoIHRvIHRoZSBjb3JyZWN0XG4gICAqIGRpbWVuc2lvbnMgd2hpbGUgdGhlIHVzZXIgaXMgZHJhZ2dpbmcuXG4gICAqL1xuICBfdXBkYXRlV2lkdGhBY3RpdmU6ICgpID0+IHZvaWQ7XG59XG4iXX0=
|