@skyux/autonumeric 8.7.2 → 9.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/documentation.json +32 -32
- package/{esm2020 → esm2022}/lib/modules/autonumeric/autonumeric-options-provider.mjs +4 -4
- package/esm2022/lib/modules/autonumeric/autonumeric.directive.mjs +198 -0
- package/{esm2020 → esm2022}/lib/modules/autonumeric/autonumeric.module.mjs +5 -5
- package/fesm2022/skyux-autonumeric.mjs +241 -0
- package/{fesm2015 → fesm2022}/skyux-autonumeric.mjs.map +1 -1
- package/lib/modules/autonumeric/autonumeric.directive.d.ts +1 -1
- package/package.json +8 -14
- package/esm2020/lib/modules/autonumeric/autonumeric.directive.mjs +0 -183
- package/fesm2015/skyux-autonumeric.mjs +0 -227
- package/fesm2020/skyux-autonumeric.mjs +0 -226
- package/fesm2020/skyux-autonumeric.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/autonumeric/autonumeric-options.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-autonumeric.mjs +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, forwardRef, Directive, Input, HostListener, NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import AutoNumeric from 'autonumeric';
|
|
6
|
+
import { Subject, fromEvent } from 'rxjs';
|
|
7
|
+
import { takeUntil } from 'rxjs/operators';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Provides options to the underlying [AutoNumeric library](https://github.com/autoNumeric/autoNumeric).
|
|
11
|
+
* This can set global options on multiple input fields.
|
|
12
|
+
*/
|
|
13
|
+
class SkyAutonumericOptionsProvider {
|
|
14
|
+
/**
|
|
15
|
+
* The value for a settings object to pass to the AutoNumeric library.
|
|
16
|
+
* This overrides any default options specified by the `skyAutonumeric` attribute.
|
|
17
|
+
*/
|
|
18
|
+
getConfig() {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericOptionsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
22
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericOptionsProvider, providedIn: 'root' }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericOptionsProvider, decorators: [{
|
|
25
|
+
type: Injectable,
|
|
26
|
+
args: [{
|
|
27
|
+
providedIn: 'root',
|
|
28
|
+
}]
|
|
29
|
+
}] });
|
|
30
|
+
|
|
31
|
+
const SKY_AUTONUMERIC_VALUE_ACCESSOR = {
|
|
32
|
+
provide: NG_VALUE_ACCESSOR,
|
|
33
|
+
useExisting: forwardRef(() => SkyAutonumericDirective),
|
|
34
|
+
multi: true,
|
|
35
|
+
};
|
|
36
|
+
const SKY_AUTONUMERIC_VALIDATOR = {
|
|
37
|
+
provide: NG_VALIDATORS,
|
|
38
|
+
useExisting: forwardRef(() => SkyAutonumericDirective),
|
|
39
|
+
multi: true,
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Wraps the [autoNumeric utility](https://github.com/autoNumeric/autoNumeric) to format
|
|
43
|
+
* any type of number, including currency.
|
|
44
|
+
*/
|
|
45
|
+
class SkyAutonumericDirective {
|
|
46
|
+
/**
|
|
47
|
+
* Assigns the name of a property from `SkyAutonumericOptionsProvider`.
|
|
48
|
+
*/
|
|
49
|
+
set skyAutonumeric(value) {
|
|
50
|
+
this.#autonumericOptions = this.#mergeOptions(value);
|
|
51
|
+
this.#updateAutonumericInstance();
|
|
52
|
+
}
|
|
53
|
+
#autonumericInstance;
|
|
54
|
+
#autonumericOptions;
|
|
55
|
+
#control;
|
|
56
|
+
#isFirstChange;
|
|
57
|
+
#value;
|
|
58
|
+
#ngUnsubscribe;
|
|
59
|
+
#elementRef;
|
|
60
|
+
#globalConfig;
|
|
61
|
+
#renderer;
|
|
62
|
+
#changeDetector;
|
|
63
|
+
constructor(elementRef, globalConfig, renderer, changeDetector) {
|
|
64
|
+
/**
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
this.skyAutonumericFormChangesUnformatted = false;
|
|
68
|
+
this.#isFirstChange = true;
|
|
69
|
+
this.#ngUnsubscribe = new Subject();
|
|
70
|
+
// istanbul ignore next
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars
|
|
72
|
+
this.#onChange = (_) => { };
|
|
73
|
+
// istanbul ignore next
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
75
|
+
this.#onTouched = () => { };
|
|
76
|
+
this.#elementRef = elementRef;
|
|
77
|
+
this.#globalConfig = globalConfig;
|
|
78
|
+
this.#renderer = renderer;
|
|
79
|
+
this.#changeDetector = changeDetector;
|
|
80
|
+
this.#autonumericInstance = new AutoNumeric(elementRef.nativeElement);
|
|
81
|
+
}
|
|
82
|
+
ngOnInit() {
|
|
83
|
+
// Ensure that we set the global config even if no local config has been given.
|
|
84
|
+
if (!this.#autonumericOptions) {
|
|
85
|
+
this.#autonumericOptions = this.#globalConfig.getConfig();
|
|
86
|
+
}
|
|
87
|
+
this.#updateAutonumericInstance();
|
|
88
|
+
fromEvent(this.#elementRef.nativeElement, 'input')
|
|
89
|
+
.pipe(takeUntil(this.#ngUnsubscribe))
|
|
90
|
+
.subscribe(() => {
|
|
91
|
+
const numericValue = this.#getNumericValue();
|
|
92
|
+
/* istanbul ignore else */
|
|
93
|
+
if (this.#value !== numericValue) {
|
|
94
|
+
this.#value = numericValue;
|
|
95
|
+
this.#onChange(numericValue);
|
|
96
|
+
}
|
|
97
|
+
/* istanbul ignore else */
|
|
98
|
+
if (this.#control && !this.#control.dirty) {
|
|
99
|
+
this.#control.markAsDirty();
|
|
100
|
+
}
|
|
101
|
+
this.#changeDetector.markForCheck();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
ngOnDestroy() {
|
|
105
|
+
this.#ngUnsubscribe.next();
|
|
106
|
+
this.#ngUnsubscribe.complete();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Implemented as part of ControlValueAccessor.
|
|
110
|
+
*/
|
|
111
|
+
setDisabledState(value) {
|
|
112
|
+
this.#renderer.setProperty(this.#elementRef.nativeElement, 'disabled', value);
|
|
113
|
+
}
|
|
114
|
+
writeValue(value) {
|
|
115
|
+
if (this.#value !== value) {
|
|
116
|
+
this.#value = value;
|
|
117
|
+
this.#onChange(value);
|
|
118
|
+
// Mark the control as "pristine" if it is initialized with a value.
|
|
119
|
+
if (this.#isFirstChange && this.#control && this.#value !== null) {
|
|
120
|
+
this.#isFirstChange = false;
|
|
121
|
+
this.#control.markAsPristine();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (typeof value === 'number') {
|
|
125
|
+
if (this.skyAutonumericFormChangesUnformatted) {
|
|
126
|
+
this.#autonumericInstance.setUnformatted(value);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.#autonumericInstance.set(value);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.#autonumericInstance.clear();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
validate(control) {
|
|
137
|
+
const noErrors = null;
|
|
138
|
+
if (!this.#control) {
|
|
139
|
+
this.#control = control;
|
|
140
|
+
}
|
|
141
|
+
if (control.value === null || control.value === undefined) {
|
|
142
|
+
return noErrors;
|
|
143
|
+
}
|
|
144
|
+
if (typeof control.value !== 'number') {
|
|
145
|
+
return {
|
|
146
|
+
notTypeOfNumber: { value: control.value },
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return noErrors;
|
|
150
|
+
}
|
|
151
|
+
registerOnChange(fn) {
|
|
152
|
+
this.#onChange = fn;
|
|
153
|
+
}
|
|
154
|
+
registerOnTouched(fn) {
|
|
155
|
+
this.#onTouched = fn;
|
|
156
|
+
}
|
|
157
|
+
onBlur() {
|
|
158
|
+
this.#onTouched();
|
|
159
|
+
}
|
|
160
|
+
#getNumericValue() {
|
|
161
|
+
const inputValue = this.#getInputValue();
|
|
162
|
+
const numericValue = this.#autonumericInstance.getNumber();
|
|
163
|
+
return inputValue &&
|
|
164
|
+
!this.#isInputValueTheCurrencySymbol(inputValue) &&
|
|
165
|
+
typeof numericValue === 'number'
|
|
166
|
+
? numericValue
|
|
167
|
+
: undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Due to AutoNumeric's hover logic - when AutoNumeric has a currency symbol, the value
|
|
171
|
+
* that we get back on empty fields will be the currency symbol.
|
|
172
|
+
* The following logic ensures that we don't accidentally set
|
|
173
|
+
* a form value when the only input was the programmatically-added currency symbol.
|
|
174
|
+
*/
|
|
175
|
+
#isInputValueTheCurrencySymbol(inputValue) {
|
|
176
|
+
/* istanbul ignore next */
|
|
177
|
+
const currencySymbol = (this.#autonumericOptions?.currencySymbol ?? '').trim();
|
|
178
|
+
return !!currencySymbol && inputValue === currencySymbol;
|
|
179
|
+
}
|
|
180
|
+
#getInputValue() {
|
|
181
|
+
return this.#elementRef.nativeElement.value;
|
|
182
|
+
}
|
|
183
|
+
#updateAutonumericInstance() {
|
|
184
|
+
this.#autonumericInstance.update(this.#autonumericOptions);
|
|
185
|
+
}
|
|
186
|
+
#mergeOptions(value) {
|
|
187
|
+
const globalOptions = this.#globalConfig.getConfig();
|
|
188
|
+
let newOptions;
|
|
189
|
+
if (typeof value === 'string') {
|
|
190
|
+
const predefinedOptions = AutoNumeric.getPredefinedOptions();
|
|
191
|
+
newOptions = predefinedOptions[value];
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
newOptions = value;
|
|
195
|
+
}
|
|
196
|
+
return Object.assign({}, globalOptions, newOptions);
|
|
197
|
+
}
|
|
198
|
+
// istanbul ignore next
|
|
199
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars
|
|
200
|
+
#onChange;
|
|
201
|
+
// istanbul ignore next
|
|
202
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
203
|
+
#onTouched;
|
|
204
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericDirective, deps: [{ token: i0.ElementRef }, { token: SkyAutonumericOptionsProvider }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
205
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: SkyAutonumericDirective, selector: "input[skyAutonumeric]", inputs: { skyAutonumeric: "skyAutonumeric", skyAutonumericFormChangesUnformatted: "skyAutonumericFormChangesUnformatted" }, host: { listeners: { "blur": "onBlur()" } }, providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR], ngImport: i0 }); }
|
|
206
|
+
}
|
|
207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericDirective, decorators: [{
|
|
208
|
+
type: Directive,
|
|
209
|
+
args: [{
|
|
210
|
+
selector: 'input[skyAutonumeric]',
|
|
211
|
+
providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR],
|
|
212
|
+
}]
|
|
213
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: SkyAutonumericOptionsProvider }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { skyAutonumeric: [{
|
|
214
|
+
type: Input
|
|
215
|
+
}], skyAutonumericFormChangesUnformatted: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], onBlur: [{
|
|
218
|
+
type: HostListener,
|
|
219
|
+
args: ['blur']
|
|
220
|
+
}] } });
|
|
221
|
+
|
|
222
|
+
class SkyAutonumericModule {
|
|
223
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
224
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericModule, declarations: [SkyAutonumericDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule], exports: [SkyAutonumericDirective] }); }
|
|
225
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericModule, imports: [CommonModule, FormsModule, ReactiveFormsModule] }); }
|
|
226
|
+
}
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SkyAutonumericModule, decorators: [{
|
|
228
|
+
type: NgModule,
|
|
229
|
+
args: [{
|
|
230
|
+
declarations: [SkyAutonumericDirective],
|
|
231
|
+
imports: [CommonModule, FormsModule, ReactiveFormsModule],
|
|
232
|
+
exports: [SkyAutonumericDirective],
|
|
233
|
+
}]
|
|
234
|
+
}] });
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Generated bundle index. Do not edit.
|
|
238
|
+
*/
|
|
239
|
+
|
|
240
|
+
export { SkyAutonumericModule, SkyAutonumericOptionsProvider, SkyAutonumericDirective as λ1 };
|
|
241
|
+
//# sourceMappingURL=skyux-autonumeric.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skyux-autonumeric.mjs","sources":["../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric-options-provider.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.directive.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.module.ts","../../../../../libs/components/autonumeric/src/skyux-autonumeric.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\n\n/**\n * Provides options to the underlying [AutoNumeric library](https://github.com/autoNumeric/autoNumeric).\n * This can set global options on multiple input fields.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAutonumericOptionsProvider {\n /**\n * The value for a settings object to pass to the AutoNumeric library.\n * This overrides any default options specified by the `skyAutonumeric` attribute.\n */\n public getConfig(): SkyAutonumericOptions {\n return {};\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport AutoNumeric from 'autonumeric';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\nimport { SkyAutonumericOptionsProvider } from './autonumeric-options-provider';\n\nconst SKY_AUTONUMERIC_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutonumericDirective),\n multi: true,\n};\n\nconst SKY_AUTONUMERIC_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutonumericDirective),\n multi: true,\n};\n\n/**\n * Wraps the [autoNumeric utility](https://github.com/autoNumeric/autoNumeric) to format\n * any type of number, including currency.\n */\n@Directive({\n selector: 'input[skyAutonumeric]',\n providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR],\n})\nexport class SkyAutonumericDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * Assigns the name of a property from `SkyAutonumericOptionsProvider`.\n */\n @Input()\n public set skyAutonumeric(value: SkyAutonumericOptions | undefined) {\n this.#autonumericOptions = this.#mergeOptions(value);\n this.#updateAutonumericInstance();\n }\n\n /**\n * @internal\n */\n @Input()\n public skyAutonumericFormChangesUnformatted: boolean | undefined = false;\n\n #autonumericInstance: AutoNumeric;\n #autonumericOptions: SkyAutonumericOptions | undefined;\n #control: AbstractControl | undefined;\n #isFirstChange = true;\n #value: number | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #elementRef: ElementRef;\n #globalConfig: SkyAutonumericOptionsProvider;\n #renderer: Renderer2;\n #changeDetector: ChangeDetectorRef;\n\n constructor(\n elementRef: ElementRef,\n globalConfig: SkyAutonumericOptionsProvider,\n renderer: Renderer2,\n changeDetector: ChangeDetectorRef\n ) {\n this.#elementRef = elementRef;\n this.#globalConfig = globalConfig;\n this.#renderer = renderer;\n this.#changeDetector = changeDetector;\n\n this.#autonumericInstance = new AutoNumeric(elementRef.nativeElement);\n }\n\n public ngOnInit(): void {\n // Ensure that we set the global config even if no local config has been given.\n if (!this.#autonumericOptions) {\n this.#autonumericOptions = this.#globalConfig.getConfig();\n }\n this.#updateAutonumericInstance();\n\n fromEvent(this.#elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n const numericValue: number | undefined = this.#getNumericValue();\n\n /* istanbul ignore else */\n if (this.#value !== numericValue) {\n this.#value = numericValue;\n this.#onChange(numericValue);\n }\n\n /* istanbul ignore else */\n if (this.#control && !this.#control.dirty) {\n this.#control.markAsDirty();\n }\n\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(value: boolean): void {\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value\n );\n }\n\n public writeValue(value: number | undefined): void {\n if (this.#value !== value) {\n this.#value = value;\n this.#onChange(value);\n\n // Mark the control as \"pristine\" if it is initialized with a value.\n if (this.#isFirstChange && this.#control && this.#value !== null) {\n this.#isFirstChange = false;\n this.#control.markAsPristine();\n }\n }\n\n if (typeof value === 'number') {\n if (this.skyAutonumericFormChangesUnformatted) {\n this.#autonumericInstance.setUnformatted(value);\n } else {\n this.#autonumericInstance.set(value);\n }\n } else {\n this.#autonumericInstance.clear();\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const noErrors = null;\n\n if (!this.#control) {\n this.#control = control;\n }\n\n if (control.value === null || control.value === undefined) {\n return noErrors;\n }\n\n if (typeof control.value !== 'number') {\n return {\n notTypeOfNumber: { value: control.value },\n };\n }\n\n return noErrors;\n }\n\n public registerOnChange(fn: (value: number | undefined) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this.#onTouched();\n }\n\n #getNumericValue(): number | undefined {\n const inputValue = this.#getInputValue();\n const numericValue = this.#autonumericInstance.getNumber();\n return inputValue &&\n !this.#isInputValueTheCurrencySymbol(inputValue) &&\n typeof numericValue === 'number'\n ? numericValue\n : undefined;\n }\n\n /**\n * Due to AutoNumeric's hover logic - when AutoNumeric has a currency symbol, the value\n * that we get back on empty fields will be the currency symbol.\n * The following logic ensures that we don't accidentally set\n * a form value when the only input was the programmatically-added currency symbol.\n */\n #isInputValueTheCurrencySymbol(inputValue: string): boolean {\n /* istanbul ignore next */\n const currencySymbol = (\n (this.#autonumericOptions as AutoNumeric.Options)?.currencySymbol ?? ''\n ).trim();\n return !!currencySymbol && inputValue === currencySymbol;\n }\n\n #getInputValue(): string {\n return this.#elementRef.nativeElement.value;\n }\n\n #updateAutonumericInstance(): void {\n this.#autonumericInstance.update(\n this.#autonumericOptions as AutoNumeric.Options\n );\n }\n\n #mergeOptions(\n value: SkyAutonumericOptions | undefined\n ): SkyAutonumericOptions {\n const globalOptions: SkyAutonumericOptions = this.#globalConfig.getConfig();\n\n let newOptions: SkyAutonumericOptions | undefined;\n if (typeof value === 'string') {\n const predefinedOptions = AutoNumeric.getPredefinedOptions();\n newOptions = predefinedOptions[\n value as keyof AutoNumeric.Options\n ] as AutoNumeric.Options;\n } else {\n newOptions = value;\n }\n\n return Object.assign({}, globalOptions, newOptions);\n }\n\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars\n #onChange = (_: number | undefined) => {};\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched = () => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { SkyAutonumericDirective } from './autonumeric.directive';\n\n@NgModule({\n declarations: [SkyAutonumericDirective],\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n exports: [SkyAutonumericDirective],\n})\nexport class SkyAutonumericModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyAutonumericOptionsProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skyux-autonumeric.mjs","sources":["../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric-options-provider.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.directive.ts","../../../../../libs/components/autonumeric/src/lib/modules/autonumeric/autonumeric.module.ts","../../../../../libs/components/autonumeric/src/skyux-autonumeric.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\n\n/**\n * Provides options to the underlying [AutoNumeric library](https://github.com/autoNumeric/autoNumeric).\n * This can set global options on multiple input fields.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAutonumericOptionsProvider {\n /**\n * The value for a settings object to pass to the AutoNumeric library.\n * This overrides any default options specified by the `skyAutonumeric` attribute.\n */\n public getConfig(): SkyAutonumericOptions {\n return {};\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport AutoNumeric from 'autonumeric';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutonumericOptions } from './autonumeric-options';\nimport { SkyAutonumericOptionsProvider } from './autonumeric-options-provider';\n\nconst SKY_AUTONUMERIC_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutonumericDirective),\n multi: true,\n};\n\nconst SKY_AUTONUMERIC_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutonumericDirective),\n multi: true,\n};\n\n/**\n * Wraps the [autoNumeric utility](https://github.com/autoNumeric/autoNumeric) to format\n * any type of number, including currency.\n */\n@Directive({\n selector: 'input[skyAutonumeric]',\n providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR],\n})\nexport class SkyAutonumericDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * Assigns the name of a property from `SkyAutonumericOptionsProvider`.\n */\n @Input()\n public set skyAutonumeric(value: SkyAutonumericOptions | undefined) {\n this.#autonumericOptions = this.#mergeOptions(value);\n this.#updateAutonumericInstance();\n }\n\n /**\n * @internal\n */\n @Input()\n public skyAutonumericFormChangesUnformatted: boolean | undefined = false;\n\n #autonumericInstance: AutoNumeric;\n #autonumericOptions: SkyAutonumericOptions | undefined;\n #control: AbstractControl | undefined;\n #isFirstChange = true;\n #value: number | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #elementRef: ElementRef;\n #globalConfig: SkyAutonumericOptionsProvider;\n #renderer: Renderer2;\n #changeDetector: ChangeDetectorRef;\n\n constructor(\n elementRef: ElementRef,\n globalConfig: SkyAutonumericOptionsProvider,\n renderer: Renderer2,\n changeDetector: ChangeDetectorRef\n ) {\n this.#elementRef = elementRef;\n this.#globalConfig = globalConfig;\n this.#renderer = renderer;\n this.#changeDetector = changeDetector;\n\n this.#autonumericInstance = new AutoNumeric(elementRef.nativeElement);\n }\n\n public ngOnInit(): void {\n // Ensure that we set the global config even if no local config has been given.\n if (!this.#autonumericOptions) {\n this.#autonumericOptions = this.#globalConfig.getConfig();\n }\n this.#updateAutonumericInstance();\n\n fromEvent(this.#elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n const numericValue: number | undefined = this.#getNumericValue();\n\n /* istanbul ignore else */\n if (this.#value !== numericValue) {\n this.#value = numericValue;\n this.#onChange(numericValue);\n }\n\n /* istanbul ignore else */\n if (this.#control && !this.#control.dirty) {\n this.#control.markAsDirty();\n }\n\n this.#changeDetector.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * Implemented as part of ControlValueAccessor.\n */\n public setDisabledState(value: boolean): void {\n this.#renderer.setProperty(\n this.#elementRef.nativeElement,\n 'disabled',\n value\n );\n }\n\n public writeValue(value: number | undefined): void {\n if (this.#value !== value) {\n this.#value = value;\n this.#onChange(value);\n\n // Mark the control as \"pristine\" if it is initialized with a value.\n if (this.#isFirstChange && this.#control && this.#value !== null) {\n this.#isFirstChange = false;\n this.#control.markAsPristine();\n }\n }\n\n if (typeof value === 'number') {\n if (this.skyAutonumericFormChangesUnformatted) {\n this.#autonumericInstance.setUnformatted(value);\n } else {\n this.#autonumericInstance.set(value);\n }\n } else {\n this.#autonumericInstance.clear();\n }\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const noErrors = null;\n\n if (!this.#control) {\n this.#control = control;\n }\n\n if (control.value === null || control.value === undefined) {\n return noErrors;\n }\n\n if (typeof control.value !== 'number') {\n return {\n notTypeOfNumber: { value: control.value },\n };\n }\n\n return noErrors;\n }\n\n public registerOnChange(fn: (value: number | undefined) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this.#onTouched();\n }\n\n #getNumericValue(): number | undefined {\n const inputValue = this.#getInputValue();\n const numericValue = this.#autonumericInstance.getNumber();\n return inputValue &&\n !this.#isInputValueTheCurrencySymbol(inputValue) &&\n typeof numericValue === 'number'\n ? numericValue\n : undefined;\n }\n\n /**\n * Due to AutoNumeric's hover logic - when AutoNumeric has a currency symbol, the value\n * that we get back on empty fields will be the currency symbol.\n * The following logic ensures that we don't accidentally set\n * a form value when the only input was the programmatically-added currency symbol.\n */\n #isInputValueTheCurrencySymbol(inputValue: string): boolean {\n /* istanbul ignore next */\n const currencySymbol = (\n (this.#autonumericOptions as AutoNumeric.Options)?.currencySymbol ?? ''\n ).trim();\n return !!currencySymbol && inputValue === currencySymbol;\n }\n\n #getInputValue(): string {\n return this.#elementRef.nativeElement.value;\n }\n\n #updateAutonumericInstance(): void {\n this.#autonumericInstance.update(\n this.#autonumericOptions as AutoNumeric.Options\n );\n }\n\n #mergeOptions(\n value: SkyAutonumericOptions | undefined\n ): SkyAutonumericOptions {\n const globalOptions: SkyAutonumericOptions = this.#globalConfig.getConfig();\n\n let newOptions: SkyAutonumericOptions | undefined;\n if (typeof value === 'string') {\n const predefinedOptions = AutoNumeric.getPredefinedOptions();\n newOptions = predefinedOptions[\n value as keyof AutoNumeric.Options\n ] as AutoNumeric.Options;\n } else {\n newOptions = value;\n }\n\n return Object.assign({}, globalOptions, newOptions);\n }\n\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars\n #onChange = (_: number | undefined) => {};\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched = () => {};\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { SkyAutonumericDirective } from './autonumeric.directive';\n\n@NgModule({\n declarations: [SkyAutonumericDirective],\n imports: [CommonModule, FormsModule, ReactiveFormsModule],\n exports: [SkyAutonumericDirective],\n})\nexport class SkyAutonumericModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyAutonumericOptionsProvider"],"mappings":"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"}
|
|
@@ -30,5 +30,5 @@ export declare class SkyAutonumericDirective implements OnInit, OnDestroy, Contr
|
|
|
30
30
|
registerOnTouched(fn: () => void): void;
|
|
31
31
|
onBlur(): void;
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<SkyAutonumericDirective, never>;
|
|
33
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<SkyAutonumericDirective, "input[skyAutonumeric]", never, { "skyAutonumeric": "skyAutonumeric"; "skyAutonumericFormChangesUnformatted": "skyAutonumericFormChangesUnformatted"; }, {}, never, never, false, never>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<SkyAutonumericDirective, "input[skyAutonumeric]", never, { "skyAutonumeric": { "alias": "skyAutonumeric"; "required": false; }; "skyAutonumericFormChangesUnformatted": { "alias": "skyAutonumericFormChangesUnformatted"; "required": false; }; }, {}, never, never, false, never>;
|
|
34
34
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyux/autonumeric",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-alpha.1",
|
|
4
4
|
"author": "Blackbaud, Inc.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"blackbaud",
|
|
@@ -21,30 +21,24 @@
|
|
|
21
21
|
},
|
|
22
22
|
".": {
|
|
23
23
|
"types": "./index.d.ts",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"node": "./fesm2015/skyux-autonumeric.mjs",
|
|
28
|
-
"default": "./fesm2020/skyux-autonumeric.mjs"
|
|
24
|
+
"esm2022": "./esm2022/skyux-autonumeric.mjs",
|
|
25
|
+
"esm": "./esm2022/skyux-autonumeric.mjs",
|
|
26
|
+
"default": "./fesm2022/skyux-autonumeric.mjs"
|
|
29
27
|
},
|
|
30
28
|
"./documentation.json": {
|
|
31
29
|
"default": "./documentation.json"
|
|
32
30
|
}
|
|
33
31
|
},
|
|
34
32
|
"peerDependencies": {
|
|
35
|
-
"@angular/common": "^
|
|
36
|
-
"@angular/core": "^
|
|
37
|
-
"@angular/forms": "^
|
|
33
|
+
"@angular/common": "^16.1.7",
|
|
34
|
+
"@angular/core": "^16.1.7",
|
|
35
|
+
"@angular/forms": "^16.1.7",
|
|
38
36
|
"autonumeric": "^4.8.1"
|
|
39
37
|
},
|
|
40
38
|
"dependencies": {
|
|
41
39
|
"tslib": "^2.5.0"
|
|
42
40
|
},
|
|
43
|
-
"module": "
|
|
44
|
-
"es2020": "fesm2020/skyux-autonumeric.mjs",
|
|
45
|
-
"esm2020": "esm2020/skyux-autonumeric.mjs",
|
|
46
|
-
"fesm2020": "fesm2020/skyux-autonumeric.mjs",
|
|
47
|
-
"fesm2015": "fesm2015/skyux-autonumeric.mjs",
|
|
41
|
+
"module": "fesm2022/skyux-autonumeric.mjs",
|
|
48
42
|
"typings": "index.d.ts",
|
|
49
43
|
"sideEffects": false
|
|
50
44
|
}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
var _SkyAutonumericDirective_instances, _SkyAutonumericDirective_autonumericInstance, _SkyAutonumericDirective_autonumericOptions, _SkyAutonumericDirective_control, _SkyAutonumericDirective_isFirstChange, _SkyAutonumericDirective_value, _SkyAutonumericDirective_ngUnsubscribe, _SkyAutonumericDirective_elementRef, _SkyAutonumericDirective_globalConfig, _SkyAutonumericDirective_renderer, _SkyAutonumericDirective_changeDetector, _SkyAutonumericDirective_getNumericValue, _SkyAutonumericDirective_isInputValueTheCurrencySymbol, _SkyAutonumericDirective_getInputValue, _SkyAutonumericDirective_updateAutonumericInstance, _SkyAutonumericDirective_mergeOptions, _SkyAutonumericDirective_onChange, _SkyAutonumericDirective_onTouched;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { Directive, HostListener, Input, forwardRef, } from '@angular/core';
|
|
4
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
5
|
-
import AutoNumeric from 'autonumeric';
|
|
6
|
-
import { Subject, fromEvent } from 'rxjs';
|
|
7
|
-
import { takeUntil } from 'rxjs/operators';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./autonumeric-options-provider";
|
|
10
|
-
const SKY_AUTONUMERIC_VALUE_ACCESSOR = {
|
|
11
|
-
provide: NG_VALUE_ACCESSOR,
|
|
12
|
-
useExisting: forwardRef(() => SkyAutonumericDirective),
|
|
13
|
-
multi: true,
|
|
14
|
-
};
|
|
15
|
-
const SKY_AUTONUMERIC_VALIDATOR = {
|
|
16
|
-
provide: NG_VALIDATORS,
|
|
17
|
-
useExisting: forwardRef(() => SkyAutonumericDirective),
|
|
18
|
-
multi: true,
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Wraps the [autoNumeric utility](https://github.com/autoNumeric/autoNumeric) to format
|
|
22
|
-
* any type of number, including currency.
|
|
23
|
-
*/
|
|
24
|
-
export class SkyAutonumericDirective {
|
|
25
|
-
/**
|
|
26
|
-
* Assigns the name of a property from `SkyAutonumericOptionsProvider`.
|
|
27
|
-
*/
|
|
28
|
-
set skyAutonumeric(value) {
|
|
29
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_autonumericOptions, __classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_mergeOptions).call(this, value), "f");
|
|
30
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_updateAutonumericInstance).call(this);
|
|
31
|
-
}
|
|
32
|
-
constructor(elementRef, globalConfig, renderer, changeDetector) {
|
|
33
|
-
_SkyAutonumericDirective_instances.add(this);
|
|
34
|
-
/**
|
|
35
|
-
* @internal
|
|
36
|
-
*/
|
|
37
|
-
this.skyAutonumericFormChangesUnformatted = false;
|
|
38
|
-
_SkyAutonumericDirective_autonumericInstance.set(this, void 0);
|
|
39
|
-
_SkyAutonumericDirective_autonumericOptions.set(this, void 0);
|
|
40
|
-
_SkyAutonumericDirective_control.set(this, void 0);
|
|
41
|
-
_SkyAutonumericDirective_isFirstChange.set(this, true);
|
|
42
|
-
_SkyAutonumericDirective_value.set(this, void 0);
|
|
43
|
-
_SkyAutonumericDirective_ngUnsubscribe.set(this, new Subject());
|
|
44
|
-
_SkyAutonumericDirective_elementRef.set(this, void 0);
|
|
45
|
-
_SkyAutonumericDirective_globalConfig.set(this, void 0);
|
|
46
|
-
_SkyAutonumericDirective_renderer.set(this, void 0);
|
|
47
|
-
_SkyAutonumericDirective_changeDetector.set(this, void 0);
|
|
48
|
-
// istanbul ignore next
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function , @typescript-eslint/no-unused-vars
|
|
50
|
-
_SkyAutonumericDirective_onChange.set(this, (_) => { });
|
|
51
|
-
// istanbul ignore next
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
53
|
-
_SkyAutonumericDirective_onTouched.set(this, () => { });
|
|
54
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_elementRef, elementRef, "f");
|
|
55
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_globalConfig, globalConfig, "f");
|
|
56
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_renderer, renderer, "f");
|
|
57
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_changeDetector, changeDetector, "f");
|
|
58
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_autonumericInstance, new AutoNumeric(elementRef.nativeElement), "f");
|
|
59
|
-
}
|
|
60
|
-
ngOnInit() {
|
|
61
|
-
// Ensure that we set the global config even if no local config has been given.
|
|
62
|
-
if (!__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericOptions, "f")) {
|
|
63
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_autonumericOptions, __classPrivateFieldGet(this, _SkyAutonumericDirective_globalConfig, "f").getConfig(), "f");
|
|
64
|
-
}
|
|
65
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_updateAutonumericInstance).call(this);
|
|
66
|
-
fromEvent(__classPrivateFieldGet(this, _SkyAutonumericDirective_elementRef, "f").nativeElement, 'input')
|
|
67
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyAutonumericDirective_ngUnsubscribe, "f")))
|
|
68
|
-
.subscribe(() => {
|
|
69
|
-
const numericValue = __classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_getNumericValue).call(this);
|
|
70
|
-
/* istanbul ignore else */
|
|
71
|
-
if (__classPrivateFieldGet(this, _SkyAutonumericDirective_value, "f") !== numericValue) {
|
|
72
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_value, numericValue, "f");
|
|
73
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_onChange, "f").call(this, numericValue);
|
|
74
|
-
}
|
|
75
|
-
/* istanbul ignore else */
|
|
76
|
-
if (__classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f") && !__classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f").dirty) {
|
|
77
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f").markAsDirty();
|
|
78
|
-
}
|
|
79
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_changeDetector, "f").markForCheck();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
ngOnDestroy() {
|
|
83
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_ngUnsubscribe, "f").next();
|
|
84
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_ngUnsubscribe, "f").complete();
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Implemented as part of ControlValueAccessor.
|
|
88
|
-
*/
|
|
89
|
-
setDisabledState(value) {
|
|
90
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyAutonumericDirective_elementRef, "f").nativeElement, 'disabled', value);
|
|
91
|
-
}
|
|
92
|
-
writeValue(value) {
|
|
93
|
-
if (__classPrivateFieldGet(this, _SkyAutonumericDirective_value, "f") !== value) {
|
|
94
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_value, value, "f");
|
|
95
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_onChange, "f").call(this, value);
|
|
96
|
-
// Mark the control as "pristine" if it is initialized with a value.
|
|
97
|
-
if (__classPrivateFieldGet(this, _SkyAutonumericDirective_isFirstChange, "f") && __classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f") && __classPrivateFieldGet(this, _SkyAutonumericDirective_value, "f") !== null) {
|
|
98
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_isFirstChange, false, "f");
|
|
99
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f").markAsPristine();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (typeof value === 'number') {
|
|
103
|
-
if (this.skyAutonumericFormChangesUnformatted) {
|
|
104
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericInstance, "f").setUnformatted(value);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericInstance, "f").set(value);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericInstance, "f").clear();
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
validate(control) {
|
|
115
|
-
const noErrors = null;
|
|
116
|
-
if (!__classPrivateFieldGet(this, _SkyAutonumericDirective_control, "f")) {
|
|
117
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_control, control, "f");
|
|
118
|
-
}
|
|
119
|
-
if (control.value === null || control.value === undefined) {
|
|
120
|
-
return noErrors;
|
|
121
|
-
}
|
|
122
|
-
if (typeof control.value !== 'number') {
|
|
123
|
-
return {
|
|
124
|
-
notTypeOfNumber: { value: control.value },
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
return noErrors;
|
|
128
|
-
}
|
|
129
|
-
registerOnChange(fn) {
|
|
130
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_onChange, fn, "f");
|
|
131
|
-
}
|
|
132
|
-
registerOnTouched(fn) {
|
|
133
|
-
__classPrivateFieldSet(this, _SkyAutonumericDirective_onTouched, fn, "f");
|
|
134
|
-
}
|
|
135
|
-
onBlur() {
|
|
136
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_onTouched, "f").call(this);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
_SkyAutonumericDirective_autonumericInstance = new WeakMap(), _SkyAutonumericDirective_autonumericOptions = new WeakMap(), _SkyAutonumericDirective_control = new WeakMap(), _SkyAutonumericDirective_isFirstChange = new WeakMap(), _SkyAutonumericDirective_value = new WeakMap(), _SkyAutonumericDirective_ngUnsubscribe = new WeakMap(), _SkyAutonumericDirective_elementRef = new WeakMap(), _SkyAutonumericDirective_globalConfig = new WeakMap(), _SkyAutonumericDirective_renderer = new WeakMap(), _SkyAutonumericDirective_changeDetector = new WeakMap(), _SkyAutonumericDirective_onChange = new WeakMap(), _SkyAutonumericDirective_onTouched = new WeakMap(), _SkyAutonumericDirective_instances = new WeakSet(), _SkyAutonumericDirective_getNumericValue = function _SkyAutonumericDirective_getNumericValue() {
|
|
140
|
-
const inputValue = __classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_getInputValue).call(this);
|
|
141
|
-
const numericValue = __classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericInstance, "f").getNumber();
|
|
142
|
-
return inputValue &&
|
|
143
|
-
!__classPrivateFieldGet(this, _SkyAutonumericDirective_instances, "m", _SkyAutonumericDirective_isInputValueTheCurrencySymbol).call(this, inputValue) &&
|
|
144
|
-
typeof numericValue === 'number'
|
|
145
|
-
? numericValue
|
|
146
|
-
: undefined;
|
|
147
|
-
}, _SkyAutonumericDirective_isInputValueTheCurrencySymbol = function _SkyAutonumericDirective_isInputValueTheCurrencySymbol(inputValue) {
|
|
148
|
-
/* istanbul ignore next */
|
|
149
|
-
const currencySymbol = (__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericOptions, "f")?.currencySymbol ?? '').trim();
|
|
150
|
-
return !!currencySymbol && inputValue === currencySymbol;
|
|
151
|
-
}, _SkyAutonumericDirective_getInputValue = function _SkyAutonumericDirective_getInputValue() {
|
|
152
|
-
return __classPrivateFieldGet(this, _SkyAutonumericDirective_elementRef, "f").nativeElement.value;
|
|
153
|
-
}, _SkyAutonumericDirective_updateAutonumericInstance = function _SkyAutonumericDirective_updateAutonumericInstance() {
|
|
154
|
-
__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericInstance, "f").update(__classPrivateFieldGet(this, _SkyAutonumericDirective_autonumericOptions, "f"));
|
|
155
|
-
}, _SkyAutonumericDirective_mergeOptions = function _SkyAutonumericDirective_mergeOptions(value) {
|
|
156
|
-
const globalOptions = __classPrivateFieldGet(this, _SkyAutonumericDirective_globalConfig, "f").getConfig();
|
|
157
|
-
let newOptions;
|
|
158
|
-
if (typeof value === 'string') {
|
|
159
|
-
const predefinedOptions = AutoNumeric.getPredefinedOptions();
|
|
160
|
-
newOptions = predefinedOptions[value];
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
newOptions = value;
|
|
164
|
-
}
|
|
165
|
-
return Object.assign({}, globalOptions, newOptions);
|
|
166
|
-
};
|
|
167
|
-
SkyAutonumericDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAutonumericDirective, deps: [{ token: i0.ElementRef }, { token: i1.SkyAutonumericOptionsProvider }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
168
|
-
SkyAutonumericDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SkyAutonumericDirective, selector: "input[skyAutonumeric]", inputs: { skyAutonumeric: "skyAutonumeric", skyAutonumericFormChangesUnformatted: "skyAutonumericFormChangesUnformatted" }, host: { listeners: { "blur": "onBlur()" } }, providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR], ngImport: i0 });
|
|
169
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyAutonumericDirective, decorators: [{
|
|
170
|
-
type: Directive,
|
|
171
|
-
args: [{
|
|
172
|
-
selector: 'input[skyAutonumeric]',
|
|
173
|
-
providers: [SKY_AUTONUMERIC_VALUE_ACCESSOR, SKY_AUTONUMERIC_VALIDATOR],
|
|
174
|
-
}]
|
|
175
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SkyAutonumericOptionsProvider }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { skyAutonumeric: [{
|
|
176
|
-
type: Input
|
|
177
|
-
}], skyAutonumericFormChangesUnformatted: [{
|
|
178
|
-
type: Input
|
|
179
|
-
}], onBlur: [{
|
|
180
|
-
type: HostListener,
|
|
181
|
-
args: ['blur']
|
|
182
|
-
}] } });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b251bWVyaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2F1dG9udW1lcmljL3NyYy9saWIvbW9kdWxlcy9hdXRvbnVtZXJpYy9hdXRvbnVtZXJpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxhQUFhLEVBQ2IsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBSzNDLE1BQU0sOEJBQThCLEdBQUc7SUFDckMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztJQUN0RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRjs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDOztPQUVHO0lBQ0gsSUFDVyxjQUFjLENBQUMsS0FBd0M7UUFDaEUsdUJBQUEsSUFBSSwrQ0FBdUIsdUJBQUEsSUFBSSxpRkFBYyxNQUFsQixJQUFJLEVBQWUsS0FBSyxDQUFDLE1BQUEsQ0FBQztRQUNyRCx1QkFBQSxJQUFJLDhGQUEyQixNQUEvQixJQUFJ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QixFQUFFLENBQUM7UUFDN0QsVUFBVSxHQUFHLGlCQUFpQixDQUM1QixLQUFrQyxDQUNaLENBQUM7S0FDMUI7U0FBTTtRQUNMLFVBQVUsR0FBRyxLQUFLLENBQUM7S0FDcEI7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN0RCxDQUFDO29IQWxNVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qix5TkFGdkIsQ0FBQyw4QkFBOEIsRUFBRSx5QkFBeUIsQ0FBQzsyRkFFM0QsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLDhCQUE4QixFQUFFLHlCQUF5QixDQUFDO2lCQUN2RTtxTUFRWSxjQUFjO3NCQUR4QixLQUFLO2dCQVVDLG9DQUFvQztzQkFEMUMsS0FBSztnQkE2SEMsTUFBTTtzQkFEWixZQUFZO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IEF1dG9OdW1lcmljIGZyb20gJ2F1dG9udW1lcmljJztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lBdXRvbnVtZXJpY09wdGlvbnMgfSBmcm9tICcuL2F1dG9udW1lcmljLW9wdGlvbnMnO1xuaW1wb3J0IHsgU2t5QXV0b251bWVyaWNPcHRpb25zUHJvdmlkZXIgfSBmcm9tICcuL2F1dG9udW1lcmljLW9wdGlvbnMtcHJvdmlkZXInO1xuXG5jb25zdCBTS1lfQVVUT05VTUVSSUNfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lBdXRvbnVtZXJpY0RpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX0FVVE9OVU1FUklDX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5QXV0b251bWVyaWNEaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbi8qKlxuICogV3JhcHMgdGhlIFthdXRvTnVtZXJpYyB1dGlsaXR5XShodHRwczovL2dpdGh1Yi5jb20vYXV0b051bWVyaWMvYXV0b051bWVyaWMpIHRvIGZvcm1hdFxuICogYW55IHR5cGUgb2YgbnVtYmVyLCBpbmNsdWRpbmcgY3VycmVuY3kuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3NreUF1dG9udW1lcmljXScsXG4gIHByb3ZpZGVyczogW1NLWV9BVVRPTlVNRVJJQ19WQUxVRV9BQ0NFU1NPUiwgU0tZX0FVVE9OVU1FUklDX1ZBTElEQVRPUl0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUF1dG9udW1lcmljRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIEFzc2lnbnMgdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSBmcm9tIGBTa3lBdXRvbnVtZXJpY09wdGlvbnNQcm92aWRlcmAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNreUF1dG9udW1lcmljKHZhbHVlOiBTa3lBdXRvbnVtZXJpY09wdGlvbnMgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNhdXRvbnVtZXJpY09wdGlvbnMgPSB0aGlzLiNtZXJnZU9wdGlvbnModmFsdWUpO1xuICAgIHRoaXMuI3VwZGF0ZUF1dG9udW1lcmljSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lBdXRvbnVtZXJpY0Zvcm1DaGFuZ2VzVW5mb3JtYXR0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjYXV0b251bWVyaWNJbnN0YW5jZTogQXV0b051bWVyaWM7XG4gICNhdXRvbnVtZXJpY09wdGlvbnM6IFNreUF1dG9udW1lcmljT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgI2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZDtcbiAgI2lzRmlyc3RDaGFuZ2UgPSB0cnVlO1xuICAjdmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG4gICNnbG9iYWxDb25maWc6IFNreUF1dG9udW1lcmljT3B0aW9uc1Byb3ZpZGVyO1xuICAjcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIGdsb2JhbENvbmZpZzogU2t5QXV0b251bWVyaWNPcHRpb25zUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jZ2xvYmFsQ29uZmlnID0gZ2xvYmFsQ29uZmlnO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcblxuICAgIHRoaXMuI2F1dG9udW1lcmljSW5zdGFuY2UgPSBuZXcgQXV0b051bWVyaWMoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBzZXQgdGhlIGdsb2JhbCBjb25maWcgZXZlbiBpZiBubyBsb2NhbCBjb25maWcgaGFzIGJlZW4gZ2l2ZW4uXG4gICAgaWYgKCF0aGlzLiNhdXRvbnVtZXJpY09wdGlvbnMpIHtcbiAgICAgIHRoaXMuI2F1dG9udW1lcmljT3B0aW9ucyA9IHRoaXMuI2dsb2JhbENvbmZpZy5nZXRDb25maWcoKTtcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlQXV0b251bWVyaWNJbnN0YW5jZSgpO1xuXG4gICAgZnJvbUV2ZW50KHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2lucHV0JylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBudW1lcmljVmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCA9IHRoaXMuI2dldE51bWVyaWNWYWx1ZSgpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLiN2YWx1ZSAhPT0gbnVtZXJpY1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy4jdmFsdWUgPSBudW1lcmljVmFsdWU7XG4gICAgICAgICAgdGhpcy4jb25DaGFuZ2UobnVtZXJpY1ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLiNjb250cm9sICYmICF0aGlzLiNjb250cm9sLmRpcnR5KSB7XG4gICAgICAgICAgdGhpcy4jY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiN2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLiNvbkNoYW5nZSh2YWx1ZSk7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGNvbnRyb2wgYXMgXCJwcmlzdGluZVwiIGlmIGl0IGlzIGluaXRpYWxpemVkIHdpdGggYSB2YWx1ZS5cbiAgICAgIGlmICh0aGlzLiNpc0ZpcnN0Q2hhbmdlICYmIHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy4jaXNGaXJzdENoYW5nZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh0aGlzLnNreUF1dG9udW1lcmljRm9ybUNoYW5nZXNVbmZvcm1hdHRlZCkge1xuICAgICAgICB0aGlzLiNhdXRvbnVtZXJpY0luc3RhbmNlLnNldFVuZm9ybWF0dGVkKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2F1dG9udW1lcmljSW5zdGFuY2Uuc2V0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jYXV0b251bWVyaWNJbnN0YW5jZS5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3Qgbm9FcnJvcnMgPSBudWxsO1xuXG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gbnVsbCB8fCBjb250cm9sLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBub0Vycm9ycztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub3RUeXBlT2ZOdW1iZXI6IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vRXJyb3JzO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkKCk7XG4gIH1cblxuICAjZ2V0TnVtZXJpY1ZhbHVlKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuI2dldElucHV0VmFsdWUoKTtcbiAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0aGlzLiNhdXRvbnVtZXJpY0luc3RhbmNlLmdldE51bWJlcigpO1xuICAgIHJldHVybiBpbnB1dFZhbHVlICYmXG4gICAgICAhdGhpcy4jaXNJbnB1dFZhbHVlVGhlQ3VycmVuY3lTeW1ib2woaW5wdXRWYWx1ZSkgJiZcbiAgICAgIHR5cGVvZiBudW1lcmljVmFsdWUgPT09ICdudW1iZXInXG4gICAgICA/IG51bWVyaWNWYWx1ZVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRHVlIHRvIEF1dG9OdW1lcmljJ3MgaG92ZXIgbG9naWMgLSB3aGVuIEF1dG9OdW1lcmljIGhhcyBhIGN1cnJlbmN5IHN5bWJvbCwgdGhlIHZhbHVlXG4gICAqIHRoYXQgd2UgZ2V0IGJhY2sgb24gZW1wdHkgZmllbGRzIHdpbGwgYmUgdGhlIGN1cnJlbmN5IHN5bWJvbC5cbiAgICogVGhlIGZvbGxvd2luZyBsb2dpYyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNldFxuICAgKiBhIGZvcm0gdmFsdWUgd2hlbiB0aGUgb25seSBpbnB1dCB3YXMgdGhlIHByb2dyYW1tYXRpY2FsbHktYWRkZWQgY3VycmVuY3kgc3ltYm9sLlxuICAgKi9cbiAgI2lzSW5wdXRWYWx1ZVRoZUN1cnJlbmN5U3ltYm9sKGlucHV0VmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgY3VycmVuY3lTeW1ib2wgPSAoXG4gICAgICAodGhpcy4jYXV0b251bWVyaWNPcHRpb25zIGFzIEF1dG9OdW1lcmljLk9wdGlvbnMpPy5jdXJyZW5jeVN5bWJvbCA/PyAnJ1xuICAgICkudHJpbSgpO1xuICAgIHJldHVybiAhIWN1cnJlbmN5U3ltYm9sICYmIGlucHV0VmFsdWUgPT09IGN1cnJlbmN5U3ltYm9sO1xuICB9XG5cbiAgI2dldElucHV0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgI3VwZGF0ZUF1dG9udW1lcmljSW5zdGFuY2UoKTogdm9pZCB7XG4gICAgdGhpcy4jYXV0b251bWVyaWNJbnN0YW5jZS51cGRhdGUoXG4gICAgICB0aGlzLiNhdXRvbnVtZXJpY09wdGlvbnMgYXMgQXV0b051bWVyaWMuT3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAjbWVyZ2VPcHRpb25zKFxuICAgIHZhbHVlOiBTa3lBdXRvbnVtZXJpY09wdGlvbnMgfCB1bmRlZmluZWRcbiAgKTogU2t5QXV0b251bWVyaWNPcHRpb25zIHtcbiAgICBjb25zdCBnbG9iYWxPcHRpb25zOiBTa3lBdXRvbnVtZXJpY09wdGlvbnMgPSB0aGlzLiNnbG9iYWxDb25maWcuZ2V0Q29uZmlnKCk7XG5cbiAgICBsZXQgbmV3T3B0aW9uczogU2t5QXV0b251bWVyaWNPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwcmVkZWZpbmVkT3B0aW9ucyA9IEF1dG9OdW1lcmljLmdldFByZWRlZmluZWRPcHRpb25zKCk7XG4gICAgICBuZXdPcHRpb25zID0gcHJlZGVmaW5lZE9wdGlvbnNbXG4gICAgICAgIHZhbHVlIGFzIGtleW9mIEF1dG9OdW1lcmljLk9wdGlvbnNcbiAgICAgIF0gYXMgQXV0b051bWVyaWMuT3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3B0aW9ucyA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnbG9iYWxPcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgfVxuXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgI29uQ2hhbmdlID0gKF86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge307XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgI29uVG91Y2hlZCA9ICgpID0+IHt9O1xufVxuIl19
|