@koobiq/components 18.2.1 → 18.3.0

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.
Files changed (47) hide show
  1. package/core/common-behaviors/error-state.d.ts +1 -1
  2. package/core/error/error-state-matcher.d.ts +26 -0
  3. package/core/form-field/form-field-ref.d.ts +7 -0
  4. package/core/forms/index.d.ts +1 -0
  5. package/core/forms/validators.d.ts +86 -0
  6. package/core/locales/locale-service.d.ts +11 -0
  7. package/core/public-api.d.ts +1 -2
  8. package/core/validation/validation.d.ts +1 -0
  9. package/esm2022/core/common-behaviors/error-state.mjs +1 -1
  10. package/esm2022/core/error/error-state-matcher.mjs +43 -0
  11. package/esm2022/core/form-field/form-field-ref.mjs +4 -1
  12. package/esm2022/core/forms/index.mjs +2 -1
  13. package/esm2022/core/forms/validators.mjs +132 -0
  14. package/esm2022/core/locales/locale-service.mjs +30 -1
  15. package/esm2022/core/public-api.mjs +2 -3
  16. package/esm2022/core/validation/validation.mjs +2 -1
  17. package/esm2022/core/version.mjs +2 -2
  18. package/esm2022/datepicker/calendar-header.component.mjs +5 -6
  19. package/esm2022/file-upload/single-file-upload.component.mjs +3 -3
  20. package/esm2022/form-field/form-field-control.mjs +1 -1
  21. package/esm2022/icon/icon.component.mjs +2 -2
  22. package/esm2022/icon/icon.module.mjs +1 -1
  23. package/esm2022/input/input-number.mjs +74 -80
  24. package/esm2022/select/select.module.mjs +3 -7
  25. package/fesm2022/koobiq-components-core.mjs +192 -13
  26. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-datepicker.mjs +8 -9
  28. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-file-upload.mjs +2 -2
  30. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  32. package/fesm2022/koobiq-components-icon.mjs +1 -1
  33. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  34. package/fesm2022/koobiq-components-input.mjs +74 -80
  35. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  36. package/fesm2022/koobiq-components-select.mjs +3 -6
  37. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  38. package/form-field/form-field-control.d.ts +3 -2
  39. package/form-field/hint.scss +0 -3
  40. package/input/input-number.d.ts +24 -14
  41. package/package.json +5 -4
  42. package/schematics/ng-add/index.js +2 -2
  43. package/select/select.module.d.ts +1 -2
  44. package/core/error/error-options.d.ts +0 -14
  45. package/core/label/label-options.d.ts +0 -13
  46. package/esm2022/core/error/error-options.mjs +0 -26
  47. package/esm2022/core/label/label-options.mjs +0 -4
@@ -1,9 +1,14 @@
1
- import { AfterContentInit, ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
1
+ import { ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
3
  import { KbqLocaleService } from '@koobiq/components/core';
4
4
  import { KbqFormFieldControl } from '@koobiq/components/form-field';
5
5
  import { Subject } from 'rxjs';
6
6
  import * as i0 from "@angular/core";
7
+ export declare const KBQ_INPUT_NUMBER_DEFAULT_CONFIGURATION: {
8
+ groupSeparator: string[];
9
+ fractionSeparator: string;
10
+ startFormattingFrom: number;
11
+ };
7
12
  export declare const BIG_STEP = 10;
8
13
  export declare const SMALL_STEP = 1;
9
14
  export declare function normalizeSplitter(value: string): string;
@@ -13,10 +18,10 @@ export declare function isDigit(value: string): boolean;
13
18
  export declare function getPrecision(value: number): number;
14
19
  export declare function add(value1: number, value2: number): number;
15
20
  export declare const KBQ_NUMBER_INPUT_VALUE_ACCESSOR: any;
16
- export declare class KbqNumberInput implements KbqFormFieldControl<any>, ControlValueAccessor, AfterContentInit, OnDestroy {
21
+ export declare class KbqNumberInput implements KbqFormFieldControl<any>, ControlValueAccessor, OnDestroy {
17
22
  private elementRef;
18
23
  private readonly renderer;
19
- private localeService;
24
+ private localeService?;
20
25
  /** Emits when the value changes (either due to user input or programmatic change). */
21
26
  valueChange: EventEmitter<number | null>;
22
27
  /** Emits when the disabled state has changed */
@@ -28,6 +33,10 @@ export declare class KbqNumberInput implements KbqFormFieldControl<any>, Control
28
33
  required: boolean;
29
34
  errorState: boolean;
30
35
  controlType?: string | undefined;
36
+ /**
37
+ * Allows input and pasting of integers only.
38
+ */
39
+ integer: boolean;
31
40
  bigStep: number;
32
41
  step: number;
33
42
  min: number;
@@ -47,13 +56,12 @@ export declare class KbqNumberInput implements KbqFormFieldControl<any>, Control
47
56
  get nativeElement(): HTMLInputElement;
48
57
  get viewValue(): string;
49
58
  get ngControl(): any;
59
+ protected get fractionSeparator(): string;
60
+ protected get groupSeparator(): string[];
50
61
  private control;
51
- private readonly allNumberLocaleConfigs;
52
- private numberLocaleConfig;
62
+ private config;
53
63
  private valueFromPaste;
54
- private localeSubscription;
55
- constructor(elementRef: ElementRef, renderer: Renderer2, step: string, bigStep: string, min: string, max: string, localeService: KbqLocaleService);
56
- ngAfterContentInit(): void;
64
+ constructor(elementRef: ElementRef, renderer: Renderer2, step: string, bigStep: string, min: string, max: string, localeService?: KbqLocaleService | undefined);
57
65
  ngOnDestroy(): void;
58
66
  onContainerClick(): void;
59
67
  focus(): void;
@@ -68,18 +76,20 @@ export declare class KbqNumberInput implements KbqFormFieldControl<any>, Control
68
76
  onPaste(event: ClipboardEvent): void;
69
77
  stepUp(step: number): void;
70
78
  stepDown(step: number): void;
79
+ private initDefaultParams;
80
+ private isCtrlV;
81
+ private isCtrlX;
82
+ private isCtrlZ;
83
+ private isPeriod;
71
84
  private cvaOnChange;
72
85
  private setViewValue;
73
86
  private viewToModelUpdate;
74
87
  private formatViewValue;
75
88
  private formatNumber;
76
89
  private createLocalizedNumberFromParts;
77
- /**
78
- * Method that returns a string representation of a number without localized separators
79
- */
80
- private normalizeNumber;
81
90
  private updateLocaleParams;
82
- private checkAndNormalizeLocalizedNumber;
83
91
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqNumberInput, [null, null, { attribute: "step"; }, { attribute: "big-step"; }, { attribute: "min"; }, { attribute: "max"; }, { optional: true; }]>;
84
- static ɵdir: i0.ɵɵDirectiveDeclaration<KbqNumberInput, "input[kbqNumberInput]", ["kbqNumericalInput"], { "bigStep": { "alias": "bigStep"; "required": false; }; "step": { "alias": "step"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "withThousandSeparator": { "alias": "withThousandSeparator"; "required": false; }; "startFormattingFrom": { "alias": "startFormattingFrom"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
92
+ static ɵdir: i0.ɵɵDirectiveDeclaration<KbqNumberInput, "input[kbqNumberInput]", ["kbqNumericalInput"], { "integer": { "alias": "integer"; "required": false; }; "bigStep": { "alias": "bigStep"; "required": false; }; "step": { "alias": "step"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "withThousandSeparator": { "alias": "withThousandSeparator"; "required": false; }; "startFormattingFrom": { "alias": "startFormattingFrom"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
93
+ static ngAcceptInputType_integer: unknown;
94
+ static ngAcceptInputType_withThousandSeparator: unknown;
85
95
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koobiq/components",
3
- "version": "18.2.1",
3
+ "version": "18.3.0",
4
4
  "description": "koobiq",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,10 +22,11 @@
22
22
  "homepage": "https://github.com/koobiq/angular-components#readme",
23
23
  "peerDependencies": {
24
24
  "@angular/cdk": "^18.0.0",
25
+ "@angular/core": "^18.0.0",
25
26
  "@angular/forms": "^18.0.0",
26
- "@koobiq/cdk": "18.2.1",
27
- "@koobiq/angular-moment-adapter": "18.2.1",
28
- "@koobiq/angular-luxon-adapter": "18.2.1",
27
+ "@koobiq/cdk": "18.3.0",
28
+ "@koobiq/angular-moment-adapter": "18.3.0",
29
+ "@koobiq/angular-luxon-adapter": "18.3.0",
29
30
  "@koobiq/date-formatter": "^3.1.3",
30
31
  "@koobiq/icons": "^9.0.0",
31
32
  "@koobiq/tokens-builder": "3.7.3",
@@ -42,8 +42,8 @@ function ngAdd(options) {
42
42
  }
43
43
  // Installing dependencies
44
44
  utils_packageConfig.addPackageToPackageJson(tree, '@angular/cdk', "^18.2.6");
45
- utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/cdk', "^18.2.1");
46
- utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^18.2.1");
45
+ utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/cdk', "^18.3.0");
46
+ utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/angular-luxon-adapter', "^18.3.0");
47
47
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-formatter', "^3.1.3");
48
48
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/date-adapter', "^3.1.3");
49
49
  utils_packageConfig.addPackageToPackageJson(tree, '@koobiq/icons', "^9.1.0");
@@ -7,9 +7,8 @@ import * as i5 from "@koobiq/components/icon";
7
7
  import * as i6 from "@koobiq/components/tags";
8
8
  import * as i7 from "@koobiq/components/tooltip";
9
9
  import * as i8 from "@angular/common";
10
- import * as i9 from "@koobiq/components/form-field";
11
10
  export declare class KbqSelectModule {
12
11
  static ɵfac: i0.ɵɵFactoryDeclaration<KbqSelectModule, never>;
13
- static ɵmod: i0.ɵɵNgModuleDeclaration<KbqSelectModule, [typeof i1.KbqSelect, typeof i2.KbqOptionTooltip], [typeof i3.OverlayModule, typeof i4.KbqOptionModule, typeof i5.KbqIconModule, typeof i6.KbqTagsModule, typeof i7.KbqToolTipModule, typeof i4.KbqSelectSearch, typeof i4.KbqSelectFooter, typeof i4.KbqSelectMatcher, typeof i4.KbqSelectTrigger, typeof i4.KbqSelectSearchEmptyResult, typeof i8.NgClass, typeof i8.NgTemplateOutlet], [typeof i9.KbqFormFieldModule, typeof i1.KbqSelect, typeof i2.KbqOptionTooltip, typeof i4.KbqOptionModule, typeof i4.KbqSelectSearch, typeof i4.KbqSelectFooter, typeof i4.KbqSelectMatcher, typeof i4.KbqSelectTrigger, typeof i4.KbqSelectSearchEmptyResult]>;
12
+ static ɵmod: i0.ɵɵNgModuleDeclaration<KbqSelectModule, [typeof i1.KbqSelect, typeof i2.KbqOptionTooltip], [typeof i3.OverlayModule, typeof i4.KbqOptionModule, typeof i5.KbqIconModule, typeof i6.KbqTagsModule, typeof i7.KbqToolTipModule, typeof i4.KbqSelectSearch, typeof i4.KbqSelectFooter, typeof i4.KbqSelectMatcher, typeof i4.KbqSelectTrigger, typeof i4.KbqSelectSearchEmptyResult, typeof i8.NgClass, typeof i8.NgTemplateOutlet], [typeof i1.KbqSelect, typeof i2.KbqOptionTooltip, typeof i4.KbqOptionModule, typeof i4.KbqSelectSearch, typeof i4.KbqSelectFooter, typeof i4.KbqSelectMatcher, typeof i4.KbqSelectTrigger, typeof i4.KbqSelectSearchEmptyResult]>;
14
13
  static ɵinj: i0.ɵɵInjectorDeclaration<KbqSelectModule>;
15
14
  }
@@ -1,14 +0,0 @@
1
- import { FormGroupDirective, NgForm, UntypedFormControl } from '@angular/forms';
2
- import * as i0 from "@angular/core";
3
- /** Error state matcher that matches when a control is invalid and dirty. */
4
- export declare class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {
5
- isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean;
6
- static ɵfac: i0.ɵɵFactoryDeclaration<ShowOnDirtyErrorStateMatcher, never>;
7
- static ɵprov: i0.ɵɵInjectableDeclaration<ShowOnDirtyErrorStateMatcher>;
8
- }
9
- /** Provider that defines how form controls behave with regards to displaying error messages. */
10
- export declare class ErrorStateMatcher {
11
- isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<ErrorStateMatcher, never>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<ErrorStateMatcher>;
14
- }
@@ -1,13 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- /** InjectionToken that can be used to specify the global label options. */
3
- export declare const KBQ_LABEL_GLOBAL_OPTIONS: InjectionToken<LabelOptions>;
4
- /** Type for the available floatLabel values. */
5
- export type FloatLabelType = 'always' | 'never' | 'auto';
6
- /** Configurable options for floating labels. */
7
- export interface LabelOptions {
8
- /**
9
- * Whether the label should float `always`, `never`, or `auto` (only when necessary).
10
- * Default behavior is assumed to be `auto`.
11
- */
12
- float?: FloatLabelType;
13
- }
@@ -1,26 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /** Error state matcher that matches when a control is invalid and dirty. */
4
- export class ShowOnDirtyErrorStateMatcher {
5
- isErrorState(control, form) {
6
- return !!(control && control.invalid && (control.dirty || (form && form.submitted)));
7
- }
8
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ShowOnDirtyErrorStateMatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ShowOnDirtyErrorStateMatcher }); }
10
- }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ShowOnDirtyErrorStateMatcher, decorators: [{
12
- type: Injectable
13
- }] });
14
- /** Provider that defines how form controls behave with regards to displaying error messages. */
15
- export class ErrorStateMatcher {
16
- isErrorState(control, form) {
17
- return !!(control && control.invalid && (control.touched || (form && form.submitted)));
18
- }
19
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ErrorStateMatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
20
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ErrorStateMatcher, providedIn: 'root' }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ErrorStateMatcher, decorators: [{
23
- type: Injectable,
24
- args: [{ providedIn: 'root' }]
25
- }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29yZS9lcnJvci9lcnJvci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLDRFQUE0RTtBQUU1RSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3JDLFlBQVksQ0FBQyxPQUFrQyxFQUFFLElBQXdDO1FBQ3JGLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztpSUFIUSw0QkFBNEI7cUlBQTVCLDRCQUE0Qjs7MkZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVTs7QUFPWCxnR0FBZ0c7QUFFaEcsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixZQUFZLENBQUMsT0FBa0MsRUFBRSxJQUF3QztRQUNyRixPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7aUlBSFEsaUJBQWlCO3FJQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdGb3JtLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKiBFcnJvciBzdGF0ZSBtYXRjaGVyIHRoYXQgbWF0Y2hlcyB3aGVuIGEgY29udHJvbCBpcyBpbnZhbGlkIGFuZCBkaXJ0eS4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaG93T25EaXJ0eUVycm9yU3RhdGVNYXRjaGVyIGltcGxlbWVudHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xuICAgIGlzRXJyb3JTdGF0ZShjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wgfCBudWxsLCBmb3JtOiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBOZ0Zvcm0gfCBudWxsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCAoZm9ybSAmJiBmb3JtLnN1Ym1pdHRlZCkpKTtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlciB0aGF0IGRlZmluZXMgaG93IGZvcm0gY29udHJvbHMgYmVoYXZlIHdpdGggcmVnYXJkcyB0byBkaXNwbGF5aW5nIGVycm9yIG1lc3NhZ2VzLiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFcnJvclN0YXRlTWF0Y2hlciB7XG4gICAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLnRvdWNoZWQgfHwgKGZvcm0gJiYgZm9ybS5zdWJtaXR0ZWQpKSk7XG4gICAgfVxufVxuIl19
@@ -1,4 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- /** InjectionToken that can be used to specify the global label options. */
3
- export const KBQ_LABEL_GLOBAL_OPTIONS = new InjectionToken('kbq-label-global-options');
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29yZS9sYWJlbC9sYWJlbC1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUFlLDBCQUEwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogSW5qZWN0aW9uVG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBnbG9iYWwgbGFiZWwgb3B0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBLQlFfTEFCRUxfR0xPQkFMX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TGFiZWxPcHRpb25zPigna2JxLWxhYmVsLWdsb2JhbC1vcHRpb25zJyk7XG5cbi8qKiBUeXBlIGZvciB0aGUgYXZhaWxhYmxlIGZsb2F0TGFiZWwgdmFsdWVzLiAqL1xuZXhwb3J0IHR5cGUgRmxvYXRMYWJlbFR5cGUgPSAnYWx3YXlzJyB8ICduZXZlcicgfCAnYXV0byc7XG5cbi8qKiBDb25maWd1cmFibGUgb3B0aW9ucyBmb3IgZmxvYXRpbmcgbGFiZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBmbG9hdCBgYWx3YXlzYCwgYG5ldmVyYCwgb3IgYGF1dG9gIChvbmx5IHdoZW4gbmVjZXNzYXJ5KS5cbiAgICAgKiBEZWZhdWx0IGJlaGF2aW9yIGlzIGFzc3VtZWQgdG8gYmUgYGF1dG9gLlxuICAgICAqL1xuICAgIGZsb2F0PzogRmxvYXRMYWJlbFR5cGU7XG59XG4iXX0=