iss-ctrl 0.0.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 +24 -0
- package/components/autocomplete/autocomplete.component.d.ts +6 -0
- package/components/base-ctrl.d.ts +33 -0
- package/components/checkbox/checkbox.component.d.ts +16 -0
- package/components/chips/chips.component.d.ts +6 -0
- package/components/ctrl-array/ctrl-array.component.d.ts +6 -0
- package/components/date-picker/date-adapter.d.ts +37 -0
- package/components/date-picker/date-picker.component.d.ts +15 -0
- package/components/date-range-picker/date-range-picker.component.d.ts +19 -0
- package/components/datetime-picker/datetime-picker.component.d.ts +14 -0
- package/components/datetime-range-picker/datetime-range-picker.component.d.ts +6 -0
- package/components/file-picker/file-picker.component.d.ts +17 -0
- package/components/hints/hints.component.d.ts +9 -0
- package/components/input/input.component.d.ts +8 -0
- package/components/mobile/COUNTRIES.d.ts +2 -0
- package/components/mobile/mobile.component.d.ts +26 -0
- package/components/mobile/phone.service.d.ts +17 -0
- package/components/note/note.component.d.ts +6 -0
- package/components/plate-number/plate-number.component.d.ts +16 -0
- package/components/radio/radio.component.d.ts +11 -0
- package/components/select/select.component.d.ts +20 -0
- package/components/slide-toggle/slide-toggle.component.d.ts +7 -0
- package/components/textarea/textarea.component.d.ts +6 -0
- package/components/time-picker/time-picker.component.d.ts +19 -0
- package/components/toggle-button/toggle-button.component.d.ts +16 -0
- package/directives/droppable.directive.d.ts +10 -0
- package/esm2022/components/autocomplete/autocomplete.component.mjs +17 -0
- package/esm2022/components/base-ctrl.mjs +93 -0
- package/esm2022/components/checkbox/checkbox.component.mjs +73 -0
- package/esm2022/components/chips/chips.component.mjs +17 -0
- package/esm2022/components/ctrl-array/ctrl-array.component.mjs +17 -0
- package/esm2022/components/date-picker/date-adapter.mjs +183 -0
- package/esm2022/components/date-picker/date-picker.component.mjs +55 -0
- package/esm2022/components/date-range-picker/date-range-picker.component.mjs +101 -0
- package/esm2022/components/datetime-picker/datetime-picker.component.mjs +79 -0
- package/esm2022/components/datetime-range-picker/datetime-range-picker.component.mjs +17 -0
- package/esm2022/components/file-picker/file-picker.component.mjs +121 -0
- package/esm2022/components/hints/hints.component.mjs +66 -0
- package/esm2022/components/input/input.component.mjs +32 -0
- package/esm2022/components/mobile/COUNTRIES.mjs +2041 -0
- package/esm2022/components/mobile/mobile.component.mjs +141 -0
- package/esm2022/components/mobile/phone.service.mjs +99 -0
- package/esm2022/components/note/note.component.mjs +17 -0
- package/esm2022/components/plate-number/plate-number.component.mjs +114 -0
- package/esm2022/components/radio/radio.component.mjs +40 -0
- package/esm2022/components/select/select.component.mjs +124 -0
- package/esm2022/components/slide-toggle/slide-toggle.component.mjs +23 -0
- package/esm2022/components/textarea/textarea.component.mjs +17 -0
- package/esm2022/components/time-picker/time-picker.component.mjs +169 -0
- package/esm2022/components/toggle-button/toggle-button.component.mjs +87 -0
- package/esm2022/directives/droppable.directive.mjs +39 -0
- package/esm2022/interfaces/country.interface.mjs +2 -0
- package/esm2022/interfaces/date-range-emission-object.mjs +2 -0
- package/esm2022/interfaces/hint.interface.mjs +2 -0
- package/esm2022/interfaces/iso2.interface.mjs +2 -0
- package/esm2022/interfaces/mobile.interface.mjs +2 -0
- package/esm2022/interfaces/option.interface.mjs +2 -0
- package/esm2022/interfaces/time.interface.mjs +2 -0
- package/esm2022/iss-ctrl.mjs +5 -0
- package/esm2022/pipes/select-status.pipe.mjs +18 -0
- package/esm2022/public-api.mjs +20 -0
- package/fesm2022/iss-ctrl.mjs +3659 -0
- package/fesm2022/iss-ctrl.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/interfaces/country.interface.d.ts +10 -0
- package/interfaces/date-range-emission-object.d.ts +5 -0
- package/interfaces/hint.interface.d.ts +5 -0
- package/interfaces/iso2.interface.d.ts +1 -0
- package/interfaces/mobile.interface.d.ts +11 -0
- package/interfaces/option.interface.d.ts +4 -0
- package/interfaces/time.interface.d.ts +5 -0
- package/package.json +25 -0
- package/pipes/select-status.pipe.d.ts +8 -0
- package/public-api.d.ts +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# IssCtrl
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.0.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project iss-ctrl` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project iss-ctrl`.
|
|
8
|
+
> Note: Don't forget to add `--project iss-ctrl` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build iss-ctrl` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build iss-ctrl`, go to the dist folder `cd dist/iss-ctrl` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test iss-ctrl` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class AutocompleteComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AutocompleteComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AutocompleteComponent, "iss-ctrl-autocomplete", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { InputSignal, InputSignalWithTransform, OutputEmitterRef, WritableSignal } from "@angular/core";
|
|
2
|
+
import { AbstractControl, ControlContainer, ControlValueAccessor, FormControl, ValidationErrors, Validator } from "@angular/forms";
|
|
3
|
+
import { Hint } from "../interfaces/hint.interface";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class BaseCtrl implements ControlValueAccessor, Validator {
|
|
6
|
+
#private;
|
|
7
|
+
ctrlContainer: ControlContainer;
|
|
8
|
+
formControlName: InputSignal<string>;
|
|
9
|
+
min: InputSignal<number | string | null>;
|
|
10
|
+
max: InputSignal<number | string | null>;
|
|
11
|
+
disabled: WritableSignal<boolean>;
|
|
12
|
+
multiple: InputSignalWithTransform<boolean, string | boolean>;
|
|
13
|
+
placeholder: InputSignal<string>;
|
|
14
|
+
hints: InputSignal<Hint[]>;
|
|
15
|
+
className: InputSignal<string | null>;
|
|
16
|
+
onChange: OutputEmitterRef<string | FormData>;
|
|
17
|
+
protected touched: WritableSignal<boolean>;
|
|
18
|
+
protected ctrl: FormControl;
|
|
19
|
+
get hostCtrl(): AbstractControl | null | undefined;
|
|
20
|
+
registerOnChange(fn: () => {}): void;
|
|
21
|
+
registerOnTouched(fn: () => {}): void;
|
|
22
|
+
setDisabledState(isDisabled: boolean): void;
|
|
23
|
+
writeValue(value: string | FormData | null): void;
|
|
24
|
+
markAsTouched(): void;
|
|
25
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
26
|
+
protected emitValue(value?: string | boolean | FormData | null): void;
|
|
27
|
+
protected propagateValue(value?: string | boolean | FormData | null): void;
|
|
28
|
+
protected emitOnChangeEvent($event?: any): void;
|
|
29
|
+
protected onTouch: () => void;
|
|
30
|
+
protected onPropagateValue: (_: string | null) => void;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BaseCtrl, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<BaseCtrl, "ng-component", never, { "formControlName": { "alias": "formControlName"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hints": { "alias": "hints"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InputSignal, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { Option } from "../../interfaces/option.interface";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class CheckboxComponent extends BaseCtrl {
|
|
6
|
+
#private;
|
|
7
|
+
options: InputSignal<Option[]>;
|
|
8
|
+
selectedOptions: WritableSignal<Map<string, Option>>;
|
|
9
|
+
writeValue(value: string | null): void;
|
|
10
|
+
addToSelectedOptionsMap(option: Map<string, Option>): void;
|
|
11
|
+
onCheckboxChange(checked: boolean, value: string): void;
|
|
12
|
+
stringifySelectedOptions(): string | null;
|
|
13
|
+
getEmissionValue(options: any): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "iss-ctrl-checkbox", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ChipsComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChipsComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChipsComponent, "iss-ctrl-chips", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CtrlArrayComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CtrlArrayComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CtrlArrayComponent, "iss-ctrl-ctrl-array", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DateAdapter, MatDateFormats } from "@angular/material/core";
|
|
2
|
+
import { Locale } from "date-fns";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const DATE_FORMAT_ADAPTER: MatDateFormats;
|
|
5
|
+
export declare class ISSDateAdapter extends DateAdapter<Date, Locale> {
|
|
6
|
+
constructor(matDateLocale: {});
|
|
7
|
+
getYear(date: Date): number;
|
|
8
|
+
getMonth(date: Date): number;
|
|
9
|
+
getDate(date: Date): number;
|
|
10
|
+
getDayOfWeek(date: Date): number;
|
|
11
|
+
getMonthNames(style: "long" | "short" | "narrow"): string[];
|
|
12
|
+
getDateNames(): string[];
|
|
13
|
+
getDayOfWeekNames(style: "long" | "short" | "narrow"): string[];
|
|
14
|
+
getYearName(date: Date): string;
|
|
15
|
+
getFirstDayOfWeek(): number;
|
|
16
|
+
getNumDaysInMonth(date: Date): number;
|
|
17
|
+
clone(date: Date): Date;
|
|
18
|
+
createDate(year: number, month: number, date: number): Date;
|
|
19
|
+
today(): Date;
|
|
20
|
+
parse(value: any, parseFormat: string | string[]): Date | null;
|
|
21
|
+
format(date: Date, displayFormat: string): string;
|
|
22
|
+
addCalendarYears(date: Date, years: number): Date;
|
|
23
|
+
addCalendarMonths(date: Date, months: number): Date;
|
|
24
|
+
addCalendarDays(date: Date, days: number): Date;
|
|
25
|
+
toIso8601(date: Date): string;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
|
|
28
|
+
* (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
|
|
29
|
+
* invalid date for all other values.
|
|
30
|
+
*/
|
|
31
|
+
deserialize(value: any): Date | null;
|
|
32
|
+
isDateInstance(obj: any): boolean;
|
|
33
|
+
isValid(date: Date): boolean;
|
|
34
|
+
invalid(): Date;
|
|
35
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ISSDateAdapter, [{ optional: true; }]>;
|
|
36
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ISSDateAdapter>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { InputSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { Validator } from "@angular/forms";
|
|
4
|
+
import { MatDatepickerInputEvent } from "@angular/material/datepicker";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class DatePickerComponent extends BaseCtrl implements Validator {
|
|
7
|
+
#private;
|
|
8
|
+
disabledDays: InputSignal<number[]>;
|
|
9
|
+
minDate: InputSignal<Date | null>;
|
|
10
|
+
maxDate: InputSignal<Date | null>;
|
|
11
|
+
protected calendarDaysFilter: (d: Date | null) => boolean;
|
|
12
|
+
protected emit($event: MatDatepickerInputEvent<any>): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "iss-ctrl-date-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { InputSignal, OnDestroy, OnInit, OutputEmitterRef } from "@angular/core";
|
|
2
|
+
import { FormGroup } from "@angular/forms";
|
|
3
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
4
|
+
import { DateRangeEmissionObject } from "../../interfaces/date-range-emission-object";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class DateRangePickerComponent extends BaseCtrl implements OnInit, OnDestroy {
|
|
7
|
+
#private;
|
|
8
|
+
disabledDays: InputSignal<number[]>;
|
|
9
|
+
minDate: InputSignal<Date | null>;
|
|
10
|
+
maxDate: InputSignal<Date | null>;
|
|
11
|
+
onDateRangeObjectChange: OutputEmitterRef<DateRangeEmissionObject>;
|
|
12
|
+
readonly range: FormGroup;
|
|
13
|
+
ngOnInit(): void;
|
|
14
|
+
writeValue(value: string | FormData | null): void;
|
|
15
|
+
ngOnDestroy(): void;
|
|
16
|
+
protected calendarDaysFilter: (d: Date | null) => boolean;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerComponent, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerComponent, "iss-ctrl-date-range-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "onDateRangeObjectChange": "onDateRangeObjectChange"; }, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { InputSignal, OnDestroy } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { FormGroup } from "@angular/forms";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class DatetimePickerComponent extends BaseCtrl implements OnDestroy {
|
|
6
|
+
#private;
|
|
7
|
+
disabledDays: InputSignal<number[]>;
|
|
8
|
+
minDate: InputSignal<Date | null>;
|
|
9
|
+
maxDate: InputSignal<Date | null>;
|
|
10
|
+
datetimePicker: FormGroup;
|
|
11
|
+
ngOnDestroy(): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerComponent, "iss-ctrl-datetime-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class DatetimeRangePickerComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatetimeRangePickerComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatetimeRangePickerComponent, "iss-ctrl-datetime-range-picker", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InputSignal, OnDestroy, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class FilePickerComponent extends BaseCtrl implements OnDestroy {
|
|
5
|
+
#private;
|
|
6
|
+
accept: InputSignal<string | undefined>;
|
|
7
|
+
showDownloadButton: InputSignal<boolean>;
|
|
8
|
+
showDeleteButton: InputSignal<boolean>;
|
|
9
|
+
protected attachments: WritableSignal<File[]>;
|
|
10
|
+
ngOnDestroy(): void;
|
|
11
|
+
writeValue(val: FormData | null): void;
|
|
12
|
+
protected onDownload($event: any): void;
|
|
13
|
+
protected onDelete(index: number): void;
|
|
14
|
+
protected captureFile($event: FileList): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilePickerComponent, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilePickerComponent, "iss-ctrl-file-picker", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "showDownloadButton": { "alias": "showDownloadButton"; "required": false; "isSignal": true; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InputSignal } from "@angular/core";
|
|
2
|
+
import { Hint } from "../../interfaces/hint.interface";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class HintsComponent {
|
|
5
|
+
hints: InputSignal<Hint[]>;
|
|
6
|
+
touched: InputSignal<boolean>;
|
|
7
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<HintsComponent, never>;
|
|
8
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<HintsComponent, "iss-ctrl-hints", never, { "hints": { "alias": "hints"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InputSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class InputComponent extends BaseCtrl {
|
|
5
|
+
type: InputSignal<string>;
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
|
|
7
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "iss-ctrl-input", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { InputSignal, Signal, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { AbstractControl, FormControl, ValidationErrors, Validator } from "@angular/forms";
|
|
4
|
+
import { Country } from "../../interfaces/country.interface";
|
|
5
|
+
import { PhoneService } from "./phone.service";
|
|
6
|
+
import { ISO2 } from "../../interfaces/iso2.interface";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export declare const DEFAULT_COUNTRY: Country;
|
|
9
|
+
export declare class MobileComponent extends BaseCtrl implements Validator {
|
|
10
|
+
#private;
|
|
11
|
+
phoneService: PhoneService;
|
|
12
|
+
isOpen: WritableSignal<boolean>;
|
|
13
|
+
selectedCountry: WritableSignal<Country>;
|
|
14
|
+
preferredCountries: InputSignal<ISO2[]>;
|
|
15
|
+
searchInput: FormControl;
|
|
16
|
+
filteredCountries: Signal<Country[]>;
|
|
17
|
+
writeValue(value: string): void;
|
|
18
|
+
emit(): void;
|
|
19
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
20
|
+
protected onInput(event: KeyboardEvent): void;
|
|
21
|
+
protected onSelectCountry(country: Country): void;
|
|
22
|
+
protected closeCountryCodeMenu(): void;
|
|
23
|
+
protected toggleCountryCodeMenu(): void;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MobileComponent, never>;
|
|
25
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MobileComponent, "iss-ctrl-mobile", never, { "preferredCountries": { "alias": "preferredCountries"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ISO2 } from "../../interfaces/iso2.interface";
|
|
2
|
+
import { PhoneNumber, PhoneNumberFormat } from "google-libphonenumber";
|
|
3
|
+
import { Country } from "../../interfaces/country.interface";
|
|
4
|
+
import { Mobile } from "../../interfaces/mobile.interface";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class PhoneService {
|
|
7
|
+
#private;
|
|
8
|
+
parse(phoneNumber: string, countryCode?: ISO2): PhoneNumber | undefined;
|
|
9
|
+
getPhoneNumberObject(number: string): Mobile | undefined;
|
|
10
|
+
format(phoneNumber: string, countryCode: ISO2, numberFormat: PhoneNumberFormat): string;
|
|
11
|
+
validate(number: string): boolean;
|
|
12
|
+
getPlaceholder(countryCode: ISO2): any;
|
|
13
|
+
getCountryIsoCode(dailCode: string, number: PhoneNumber): string;
|
|
14
|
+
getCountryByDailCode(dailCode: string | undefined, number: PhoneNumber): Country | undefined;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PhoneService, never>;
|
|
16
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<PhoneService>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class NoteComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NoteComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NoteComponent, "iss-ctrl-note", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OnDestroy } from "@angular/core";
|
|
2
|
+
import { FormGroup } from "@angular/forms";
|
|
3
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
4
|
+
import { Option } from "../../interfaces/option.interface";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class PlateNumberComponent extends BaseCtrl implements OnDestroy {
|
|
7
|
+
#private;
|
|
8
|
+
protected plate: FormGroup;
|
|
9
|
+
protected options: Option[];
|
|
10
|
+
get letterControls(): import("@angular/forms").AbstractControl<any, any>[];
|
|
11
|
+
get numberControls(): import("@angular/forms").AbstractControl<any, any>[];
|
|
12
|
+
writeValue(value: string | null): void;
|
|
13
|
+
ngOnDestroy(): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlateNumberComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlateNumberComponent, "iss-ctrl-plate-number", never, {}, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { InputSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { Option } from "../../interfaces/option.interface";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class RadioComponent extends BaseCtrl {
|
|
6
|
+
options: InputSignal<Option[]>;
|
|
7
|
+
writeValue(value: string | null): void;
|
|
8
|
+
onRadioChange(value: string): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RadioComponent, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RadioComponent, "iss-ctrl-radio", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { InputSignal, Signal, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { Option } from "../../interfaces/option.interface";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class SelectComponent extends BaseCtrl {
|
|
6
|
+
#private;
|
|
7
|
+
selectedOptions: WritableSignal<Map<string, Option>>;
|
|
8
|
+
options: InputSignal<Option[]>;
|
|
9
|
+
query: Signal<string>;
|
|
10
|
+
filteredOptions: Signal<Option[]>;
|
|
11
|
+
writeValue(value: string | null): void;
|
|
12
|
+
stringifySelectedOptions(): string | null;
|
|
13
|
+
getEmissionValue($event: any): void;
|
|
14
|
+
displayFn: (options: Option | Option[]) => string;
|
|
15
|
+
removeFromSelectedOptionsMap(option: Option): void;
|
|
16
|
+
addToSelectedOptionsMap(option: any): void;
|
|
17
|
+
clearSelection(): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
|
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "iss-ctrl-select", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SlideToggleComponent extends BaseCtrl {
|
|
4
|
+
onSlideToggleChange(checked: boolean): void;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SlideToggleComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SlideToggleComponent, "iss-ctrl-slide-toggle", never, {}, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class TextareaComponent extends BaseCtrl {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TextareaComponent, never>;
|
|
5
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TextareaComponent, "iss-ctrl-textarea", never, {}, {}, never, never, true, never>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OnDestroy, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { AbstractControl, FormGroup, ValidationErrors } from "@angular/forms";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class TimePickerComponent extends BaseCtrl implements OnDestroy {
|
|
6
|
+
#private;
|
|
7
|
+
isOpen: WritableSignal<boolean>;
|
|
8
|
+
timePicker: FormGroup;
|
|
9
|
+
displayValue: WritableSignal<string>;
|
|
10
|
+
protected hours: number[];
|
|
11
|
+
protected minutes: number[];
|
|
12
|
+
ngOnDestroy(): void;
|
|
13
|
+
writeValue(value: string): void;
|
|
14
|
+
togglePickerMenu(): void;
|
|
15
|
+
close(): void;
|
|
16
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TimePickerComponent, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerComponent, "iss-ctrl-time-picker", never, {}, {}, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InputSignal, WritableSignal } from "@angular/core";
|
|
2
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
3
|
+
import { Option } from "../../interfaces/option.interface";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class ToggleButtonComponent extends BaseCtrl {
|
|
6
|
+
#private;
|
|
7
|
+
options: InputSignal<Option[]>;
|
|
8
|
+
selectedOptions: WritableSignal<Map<string, Option>>;
|
|
9
|
+
writeValue(value: string | null): void;
|
|
10
|
+
addToSelectedOptionsMap(option: Map<string, Option>): void;
|
|
11
|
+
onToggleButtonChange(checked: boolean, value: string): void;
|
|
12
|
+
stringifySelectedOptions(): string | null;
|
|
13
|
+
getEmissionValue(options: any): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToggleButtonComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToggleButtonComponent, "iss-ctrl-toggle-button", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { OutputEmitterRef } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class DroppableDirective {
|
|
4
|
+
onDrop: OutputEmitterRef<FileList>;
|
|
5
|
+
onDragOver(evt: any): void;
|
|
6
|
+
onDragLeave(evt: any): void;
|
|
7
|
+
onDropped(evt: any): void;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DroppableDirective, never>;
|
|
9
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DroppableDirective, "[droppable]", never, {}, { "onDrop": "onDrop"; }, never, never, true, never>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
|
+
import { BaseCtrl } from "../base-ctrl";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AutocompleteComponent extends BaseCtrl {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
7
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: AutocompleteComponent, isStandalone: true, selector: "iss-ctrl-autocomplete", providers: [
|
|
8
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteComponent, multi: true }
|
|
9
|
+
], usesInheritance: true, ngImport: i0, template: "<p>autocomplete works!</p>\r\n", styles: [""] }); }
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{ selector: "iss-ctrl-autocomplete", standalone: true, imports: [], providers: [
|
|
14
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: AutocompleteComponent, multi: true }
|
|
15
|
+
], template: "<p>autocomplete works!</p>\r\n" }]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lzcy1jdHJsL3NyYy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaXNzLWN0cmwvc3JjL2NvbXBvbmVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxjQUFjLENBQUM7O0FBWXRDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxRQUFROzhHQUF0QyxxQkFBcUI7a0dBQXJCLHFCQUFxQixvRUFKckI7WUFDVCxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztTQUM5RSxpRENaSCxnQ0FDQTs7MkZEYWEscUJBQXFCO2tCQVZqQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsRUFBRSxhQUdBO3dCQUNULEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztxQkFDOUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7QmFzZUN0cmx9IGZyb20gXCIuLi9iYXNlLWN0cmxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImlzcy1jdHJsLWF1dG9jb21wbGV0ZVwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW10sXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogQXV0b2NvbXBsZXRlQ29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ3RybCB7XHJcblxyXG59XHJcbiIsIjxwPmF1dG9jb21wbGV0ZSB3b3JrcyE8L3A+XHJcbiJdfQ==
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, input, output, signal } from "@angular/core";
|
|
2
|
+
import { ControlContainer, FormControl } from "@angular/forms";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class BaseCtrl {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.ctrlContainer = inject(ControlContainer);
|
|
7
|
+
this.formControlName = input("");
|
|
8
|
+
this.min = input(null);
|
|
9
|
+
this.max = input(null);
|
|
10
|
+
this.disabled = signal(false);
|
|
11
|
+
this.multiple = input(false, {
|
|
12
|
+
transform: (v) => this.#transformToBoolean(v),
|
|
13
|
+
});
|
|
14
|
+
this.placeholder = input("");
|
|
15
|
+
this.hints = input([]);
|
|
16
|
+
this.className = input(null);
|
|
17
|
+
this.onChange = output();
|
|
18
|
+
this.touched = signal(false);
|
|
19
|
+
this.ctrl = new FormControl(null);
|
|
20
|
+
this.onTouch = () => { };
|
|
21
|
+
this.onPropagateValue = (_) => { };
|
|
22
|
+
}
|
|
23
|
+
get hostCtrl() {
|
|
24
|
+
return this.ctrlContainer.control?.get(this.formControlName());
|
|
25
|
+
}
|
|
26
|
+
registerOnChange(fn) {
|
|
27
|
+
this.onPropagateValue = fn;
|
|
28
|
+
}
|
|
29
|
+
registerOnTouched(fn) {
|
|
30
|
+
this.onTouch = fn;
|
|
31
|
+
}
|
|
32
|
+
setDisabledState(isDisabled) {
|
|
33
|
+
this.disabled.set(isDisabled);
|
|
34
|
+
if (isDisabled) {
|
|
35
|
+
this.ctrl.disable();
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.ctrl.enable();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
writeValue(value) {
|
|
42
|
+
this.ctrl.setValue(value);
|
|
43
|
+
}
|
|
44
|
+
markAsTouched() {
|
|
45
|
+
this.touched.set(true);
|
|
46
|
+
this.onTouch();
|
|
47
|
+
}
|
|
48
|
+
validate(control) {
|
|
49
|
+
return this.ctrl.errors;
|
|
50
|
+
}
|
|
51
|
+
emitValue(value) {
|
|
52
|
+
let emissionValue = this.ctrl.getRawValue();
|
|
53
|
+
if (value !== undefined) {
|
|
54
|
+
emissionValue = value;
|
|
55
|
+
}
|
|
56
|
+
this.onPropagateValue(emissionValue);
|
|
57
|
+
this.emitOnChangeEvent(emissionValue);
|
|
58
|
+
}
|
|
59
|
+
propagateValue(value) {
|
|
60
|
+
let emissionValue = this.ctrl.getRawValue();
|
|
61
|
+
if (value !== undefined) {
|
|
62
|
+
emissionValue = value;
|
|
63
|
+
}
|
|
64
|
+
this.onPropagateValue(emissionValue);
|
|
65
|
+
}
|
|
66
|
+
emitOnChangeEvent($event) {
|
|
67
|
+
let emissionValue = this.ctrl.getRawValue();
|
|
68
|
+
if ($event !== undefined) {
|
|
69
|
+
emissionValue = $event;
|
|
70
|
+
}
|
|
71
|
+
this.onChange.emit(emissionValue);
|
|
72
|
+
}
|
|
73
|
+
#transformToBoolean(v) {
|
|
74
|
+
if (typeof v === "string") {
|
|
75
|
+
if (v === "") {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return v === "true";
|
|
79
|
+
}
|
|
80
|
+
return v;
|
|
81
|
+
}
|
|
82
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BaseCtrl, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
83
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: BaseCtrl, isStandalone: true, selector: "ng-component", inputs: { formControlName: { classPropertyName: "formControlName", publicName: "formControlName", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hints: { classPropertyName: "hints", publicName: "hints", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onChange: "onChange" }, ngImport: i0, template: ``, isInline: true }); }
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: BaseCtrl, decorators: [{
|
|
86
|
+
type: Component,
|
|
87
|
+
args: [{
|
|
88
|
+
standalone: true,
|
|
89
|
+
template: ``,
|
|
90
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
|
91
|
+
}]
|
|
92
|
+
}] });
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jdHJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaXNzLWN0cmwvc3JjL2NvbXBvbmVudHMvYmFzZS1jdHJsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLGdCQUFnQixFQUF3QixXQUFXLEVBQThCLE1BQU0sZ0JBQWdCLENBQUM7O0FBUWpJLE1BQU0sT0FBTyxRQUFRO0lBTHJCO1FBTUUsa0JBQWEsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0Qsb0JBQWUsR0FBd0IsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELFFBQUcsR0FBd0MsS0FBSyxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUMvRSxRQUFHLEdBQXdDLEtBQUssQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFDL0UsYUFBUSxHQUE0QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsYUFBUSxHQUF3RCxLQUFLLENBQTRCLEtBQUssRUFBRTtZQUN0RyxTQUFTLEVBQUUsQ0FBQyxDQUFtQixFQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1NBQ3pFLENBQUMsQ0FBQztRQUNILGdCQUFXLEdBQXdCLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRCxVQUFLLEdBQXdCLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQStCLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDbkUsYUFBUSxHQUF3QyxNQUFNLEVBQUUsQ0FBQztRQUMvQyxZQUFPLEdBQTRCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxTQUFJLEdBQWdCLElBQUksV0FBVyxDQUFD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LFFBQVEsRUFBRSxFQUFFO29CQUNaLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0U2lnbmFsLFxyXG4gIElucHV0U2lnbmFsV2l0aFRyYW5zZm9ybSxcclxuICBvdXRwdXQsXHJcbiAgT3V0cHV0RW1pdHRlclJlZixcclxuICBzaWduYWwsXHJcbiAgV3JpdGFibGVTaWduYWxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3J9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge0hpbnR9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2hpbnQuaW50ZXJmYWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlOiBgYCxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VDdHJsIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcbiAgY3RybENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciA9IGluamVjdChDb250cm9sQ29udGFpbmVyKTtcclxuICBmb3JtQ29udHJvbE5hbWU6IElucHV0U2lnbmFsPHN0cmluZz4gPSBpbnB1dDxzdHJpbmc+KFwiXCIpO1xyXG4gIG1pbjogSW5wdXRTaWduYWw8bnVtYmVyIHwgc3RyaW5nIHwgbnVsbD4gPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBtYXg6IElucHV0U2lnbmFsPG51bWJlciB8IHN0cmluZyB8IG51bGw+ID0gaW5wdXQ8bnVtYmVyIHwgc3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgZGlzYWJsZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBtdWx0aXBsZTogSW5wdXRTaWduYWxXaXRoVHJhbnNmb3JtPGJvb2xlYW4sIHN0cmluZyB8IGJvb2xlYW4+ID0gaW5wdXQ8Ym9vbGVhbiwgc3RyaW5nIHwgYm9vbGVhbj4oZmFsc2UsIHtcclxuICAgIHRyYW5zZm9ybTogKHY6IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuID0+IHRoaXMuI3RyYW5zZm9ybVRvQm9vbGVhbih2KSxcclxuICB9KTtcclxuICBwbGFjZWhvbGRlcjogSW5wdXRTaWduYWw8c3RyaW5nPiA9IGlucHV0PHN0cmluZz4oXCJcIik7XHJcbiAgaGludHM6IElucHV0U2lnbmFsPEhpbnRbXT4gPSBpbnB1dDxIaW50W10+KFtdKTtcclxuICBjbGFzc05hbWU6IElucHV0U2lnbmFsPHN0cmluZyB8IG51bGw+ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgb25DaGFuZ2U6IE91dHB1dEVtaXR0ZXJSZWY8c3RyaW5nIHwgRm9ybURhdGE+ID0gb3V0cHV0KCk7XHJcbiAgcHJvdGVjdGVkIHRvdWNoZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgY3RybDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCk7XHJcblxyXG4gIGdldCBob3N0Q3RybCgpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmN0cmxDb250YWluZXIuY29udHJvbD8uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4ge30pOiB2b2lkIHtcclxuICAgIHRoaXMub25Qcm9wYWdhdGVWYWx1ZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XHJcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmN0cmwuZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdHJsLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRm9ybURhdGEgfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmN0cmwuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbWFya0FzVG91Y2hlZCgpIHtcclxuICAgIHRoaXMudG91Y2hlZC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLm9uVG91Y2goKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmN0cmwuZXJyb3JzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGVtaXRWYWx1ZSh2YWx1ZT86IHN0cmluZyB8IGJvb2xlYW4gfCBGb3JtRGF0YSB8IG51bGwpIHtcclxuICAgIGxldCBlbWlzc2lvblZhbHVlID0gdGhpcy5jdHJsLmdldFJhd1ZhbHVlKCk7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBlbWlzc2lvblZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUHJvcGFnYXRlVmFsdWUoZW1pc3Npb25WYWx1ZSk7XHJcbiAgICB0aGlzLmVtaXRPbkNoYW5nZUV2ZW50KGVtaXNzaW9uVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByb3BhZ2F0ZVZhbHVlKHZhbHVlPzogc3RyaW5nIHwgYm9vbGVhbiB8IEZvcm1EYXRhIHwgbnVsbCkge1xyXG4gICAgbGV0IGVtaXNzaW9uVmFsdWUgPSB0aGlzLmN0cmwuZ2V0UmF3VmFsdWUoKTtcclxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGVtaXNzaW9uVmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIHRoaXMub25Qcm9wYWdhdGVWYWx1ZShlbWlzc2lvblZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0T25DaGFuZ2VFdmVudCgkZXZlbnQ/OiBhbnkpIHtcclxuICAgIGxldCBlbWlzc2lvblZhbHVlID0gdGhpcy5jdHJsLmdldFJhd1ZhbHVlKCk7XHJcbiAgICBpZiAoJGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZW1pc3Npb25WYWx1ZSA9ICRldmVudDtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdChlbWlzc2lvblZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblRvdWNoID0gKCkgPT4ge307XHJcblxyXG4gIHByb3RlY3RlZCBvblByb3BhZ2F0ZVZhbHVlID0gKF86IHN0cmluZyB8IG51bGwpID0+IHt9O1xyXG5cclxuICAjdHJhbnNmb3JtVG9Cb29sZWFuKHY6IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAodiA9PT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2ID09PSBcInRydWVcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxufVxyXG4iXX0=
|