@rangertechnologies/ngnxt 2.1.253 → 2.1.255-beta
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/fesm2022/rangertechnologies-ngnxt.mjs +258 -433
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +0 -1
- package/lib/components/pick-location/pick-location.component.d.ts +0 -1
- package/lib/model/bookletWrapper.d.ts +0 -1
- package/lib/pages/booklet/booklet.component.d.ts +0 -2
- package/lib/pages/builder/element/element.component.d.ts +0 -3
- package/lib/pages/builder/properties/properties.component.d.ts +6 -2
- package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +0 -3
- package/lib/pages/questionbook/questionbook.component.d.ts +0 -1
- package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -1
- package/lib/pipe/custom-translate.pipe.d.ts +1 -1
- package/lib/pipe/svg/svg.pipe.d.ts +10 -0
- package/lib/services/form-builder/form-builder.service.d.ts +1 -0
- package/lib/services/translation/translation.service.d.ts +1 -1
- package/package.json +4 -6
- package/rangertechnologies-ngnxt-2.1.255-beta.tgz +0 -0
- package/esm2022/environments/version.mjs +0 -15
- package/esm2022/lib/components/button/nxt-button.component.mjs +0 -154
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -360
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -263
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -53
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
- package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1757
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -292
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -105
- package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
- package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
- package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
- package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
- package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
- package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
- package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
- package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
- package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
- package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
- package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
- package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -392
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2972
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -105
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -220
- package/esm2022/lib/components/search-box/search-box.component.mjs +0 -470
- package/esm2022/lib/country.json +0 -43237
- package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
- package/esm2022/lib/model/bookletWrapper.mjs +0 -9
- package/esm2022/lib/model/changeWrapper.mjs +0 -10
- package/esm2022/lib/model/errorWrapper.mjs +0 -6
- package/esm2022/lib/nxt-app.component.mjs +0 -22
- package/esm2022/lib/nxt-app.module.mjs +0 -115
- package/esm2022/lib/nxt-app.service.mjs +0 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -658
- package/esm2022/lib/pages/builder/element/element.component.mjs +0 -508
- package/esm2022/lib/pages/builder/form/form.component.mjs +0 -48
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -97
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1089
- package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -35
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -681
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1118
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -801
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2219
- package/esm2022/lib/pipe/button-styles.pipe.mjs +0 -26
- package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -36
- package/esm2022/lib/pipe/get-value.pipe.mjs +0 -54
- package/esm2022/lib/pipe/question-by-row.pipe.mjs +0 -51
- package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -40
- package/esm2022/lib/sample.mjs +0 -3715
- package/esm2022/lib/services/change/change.service.mjs +0 -46
- package/esm2022/lib/services/country/country.service.mjs +0 -135
- package/esm2022/lib/services/data/data.service.mjs +0 -100
- package/esm2022/lib/services/form-builder/form-builder.service.mjs +0 -500
- package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +0 -398
- package/esm2022/lib/services/salesforce/salesforce.service.mjs +0 -41
- package/esm2022/lib/services/shared/shared.service.mjs +0 -100
- package/esm2022/lib/services/storage/storage.service.mjs +0 -59
- package/esm2022/lib/services/template/template.service.mjs +0 -351
- package/esm2022/lib/services/translation/translation.service.mjs +0 -121
- package/esm2022/lib/wrapper.mjs +0 -175
- package/esm2022/public-api.mjs +0 -22
- package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
- package/rangertechnologies-ngnxt-2.1.253.tgz +0 -0
|
@@ -198,7 +198,6 @@ export declare class NxtDatatable {
|
|
|
198
198
|
onImageDelete(ques: any): Promise<void>;
|
|
199
199
|
fileChangeEvent(ques: any, event: any): Promise<void>;
|
|
200
200
|
private readFileAsDataURL;
|
|
201
|
-
readQuestions(qbId: any, ques: any): any[];
|
|
202
201
|
getDropDown(event: any): void;
|
|
203
202
|
static ɵfac: i0.ɵɵFactoryDeclaration<NxtDatatable, never>;
|
|
204
203
|
static ɵcmp: i0.ɵɵComponentDeclaration<NxtDatatable, "nxt-datatable", never, { "data": { "alias": "data"; "required": false; }; "tableFilterData": { "alias": "tableFilterData"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "withCheckBox": { "alias": "withCheckBox"; "required": false; }; "searchBar": { "alias": "searchBar"; "required": false; }; "tableSaveButton": { "alias": "tableSaveButton"; "required": false; }; "stickyColumn": { "alias": "stickyColumn"; "required": false; }; "tableWidth": { "alias": "tableWidth"; "required": false; }; "actionColumHeader": { "alias": "actionColumHeader"; "required": false; }; "actionButton": { "alias": "actionButton"; "required": false; }; "title": { "alias": "title"; "required": false; }; "isButtons": { "alias": "isButtons"; "required": false; }; "buttonArray": { "alias": "buttonArray"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "isEditRow": { "alias": "isEditRow"; "required": false; }; "isDeleteRow": { "alias": "isDeleteRow"; "required": false; }; "addInlineRecord": { "alias": "addInlineRecord"; "required": false; }; "searchConfigs": { "alias": "searchConfigs"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "actionButtonArray": { "alias": "actionButtonArray"; "required": false; }; "multipleFilter": { "alias": "multipleFilter"; "required": false; }; "isPagination": { "alias": "isPagination"; "required": false; }; "isNosIndicator": { "alias": "isNosIndicator"; "required": false; }; "isEditable": { "alias": "isEditable"; "required": false; }; "from": { "alias": "from"; "required": false; }; "question": { "alias": "question"; "required": false; }; "rowTextSize": { "alias": "rowTextSize"; "required": false; }; "rowTextColor": { "alias": "rowTextColor"; "required": false; }; "apiMeta": { "alias": "apiMeta"; "required": false; }; "summaryRows": { "alias": "summaryRows"; "required": false; }; "summaryColumns": { "alias": "summaryColumns"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableConfig": { "alias": "tableConfig"; "required": false; }; "tableParams": { "alias": "tableParams"; "required": false; }; "listViews": { "alias": "listViews"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "languageCode": { "alias": "languageCode"; "required": false; }; "selectedColumn": { "alias": "selectedColumn"; "required": false; }; "allIcons": { "alias": "allIcons"; "required": false; }; }, { "tableRowClick": "tableRowClick"; "onEditData": "onEditData"; "saveButtonData": "saveButtonData"; "onDeleteData": "onDeleteData"; "buttonEmit": "buttonEmit"; "hyperLinkEmit": "hyperLinkEmit"; "sideNavEmit": "sideNavEmit"; "actionButtonEmit": "actionButtonEmit"; "columnSelected": "columnSelected"; "removeColumn": "removeColumn"; "valueChange": "valueChange"; "selectedValues": "selectedValues"; "fileEmit": "fileEmit"; "NxtTableParamsEmit": "NxtTableParamsEmit"; "NxtTableFilterEmit": "NxtTableFilterEmit"; "hadleDropDownDependent": "hadleDropDownDependent"; "NxtTableEmit": "NxtTableEmit"; }, never, never, true, never>;
|
|
@@ -45,7 +45,6 @@ export declare class BookletComponent implements OnInit {
|
|
|
45
45
|
abItem: any;
|
|
46
46
|
actions: ActionMeta[];
|
|
47
47
|
bookQuestionsMap: any;
|
|
48
|
-
private sqOptions;
|
|
49
48
|
isAnswerFlag: boolean;
|
|
50
49
|
spinnerName: string;
|
|
51
50
|
spinnerType: string;
|
|
@@ -69,7 +68,6 @@ export declare class BookletComponent implements OnInit {
|
|
|
69
68
|
flattenObject(obj: any, parentKey?: string): any[];
|
|
70
69
|
handleQues(ques: any): void;
|
|
71
70
|
addEvent(day: any, entryQues: any): void;
|
|
72
|
-
readQuestions(qbId: string): any[];
|
|
73
71
|
getText(value: any): SafeHtml;
|
|
74
72
|
getDropDown(event: any): void;
|
|
75
73
|
getCalendarDate(event: any): void;
|
|
@@ -52,9 +52,6 @@ export declare class ElementComponent {
|
|
|
52
52
|
onDragOver(event: DragEvent, index: number): void;
|
|
53
53
|
onDrop(event: DragEvent, dropIndex: number): void;
|
|
54
54
|
toggleBoolean(field: any): void;
|
|
55
|
-
getBaseStyles(field: any, includeBorderStyle?: boolean): any;
|
|
56
|
-
getFontStyles(field: any): any;
|
|
57
|
-
getLineStyles(field: any): any;
|
|
58
55
|
onClose(): void;
|
|
59
56
|
addOnTable(): void;
|
|
60
57
|
updateTableFieldsMeta(elements: any[]): any[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ElementRef, EventEmitter, OnInit } from '@angular/core';
|
|
1
|
+
import { ElementRef, EventEmitter, OnInit, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { CropperPosition, Dimensions, ImageTransform } from '../../../components/image-cropper/interfaces';
|
|
3
3
|
import { PipeTransform } from '@angular/core';
|
|
4
4
|
import { FormBuilderService } from '../../../services/form-builder/form-builder.service';
|
|
@@ -14,6 +14,7 @@ export declare class PropertiesComponent implements OnInit {
|
|
|
14
14
|
private formBuilderService;
|
|
15
15
|
private templateService;
|
|
16
16
|
private translationService;
|
|
17
|
+
private cdr;
|
|
17
18
|
templateSelected: boolean;
|
|
18
19
|
set selectedElementType(value: string);
|
|
19
20
|
formButtonHandler: EventEmitter<any>;
|
|
@@ -371,7 +372,9 @@ export declare class PropertiesComponent implements OnInit {
|
|
|
371
372
|
appearance: any[];
|
|
372
373
|
};
|
|
373
374
|
}>;
|
|
374
|
-
|
|
375
|
+
formBuilderLanguageCode: any;
|
|
376
|
+
copied: boolean;
|
|
377
|
+
constructor(formBuilderService: FormBuilderService, templateService: TemplateService, translationService: TranslationService, cdr: ChangeDetectorRef);
|
|
375
378
|
ngOnInit(): void;
|
|
376
379
|
private createElementProperties;
|
|
377
380
|
createElementConfig(config?: {
|
|
@@ -443,6 +446,7 @@ export declare class PropertiesComponent implements OnInit {
|
|
|
443
446
|
updateBookSubtext(key: 'endpoint' | 'variable' | 'defaultField', value: string): void;
|
|
444
447
|
trackByProp(index: number, item: any): any;
|
|
445
448
|
getOptimizedSubPropValue(subProp: any): string;
|
|
449
|
+
copyToClipboard(text: string | null): void;
|
|
446
450
|
static ɵfac: i0.ɵɵFactoryDeclaration<PropertiesComponent, never>;
|
|
447
451
|
static ɵcmp: i0.ɵɵComponentDeclaration<PropertiesComponent, "app-properties", never, { "templateSelected": { "alias": "templateSelected"; "required": false; }; "selectedElementType": { "alias": "selectedElementType"; "required": false; }; }, { "formButtonHandler": "formButtonHandler"; "templateSaveHandler": "templateSaveHandler"; }, never, never, true, never>;
|
|
448
452
|
}
|
|
@@ -76,8 +76,6 @@ export declare class PdfDesignerComponent {
|
|
|
76
76
|
onDragOver(event: DragEvent, index: number): void;
|
|
77
77
|
onDrop(event: DragEvent, dropIndex: number): void;
|
|
78
78
|
toggleBoolean(field: any): void;
|
|
79
|
-
getFontStyles(field: any): any;
|
|
80
|
-
getLineStyles(field: any): any;
|
|
81
79
|
onClose(): void;
|
|
82
80
|
addOnTable(): void;
|
|
83
81
|
addTableData(fieldId: any, fieldName: any): void;
|
|
@@ -110,7 +108,6 @@ export declare class PdfDesignerComponent {
|
|
|
110
108
|
toggleStyle(style: 'bold' | 'italic'): void;
|
|
111
109
|
setAlignment(alignment: 'left' | 'center' | 'right'): void;
|
|
112
110
|
updateContent(): void;
|
|
113
|
-
getMarginStyle(margin: number[] | undefined): string;
|
|
114
111
|
pdfSaveHandler(event: any): void;
|
|
115
112
|
static ɵfac: i0.ɵɵFactoryDeclaration<PdfDesignerComponent, never>;
|
|
116
113
|
static ɵcmp: i0.ɵɵComponentDeclaration<PdfDesignerComponent, "app-pdf-designer", never, { "pdfJSON": { "alias": "pdfJSON"; "required": false; }; "bookletId": { "alias": "bookletId"; "required": false; }; "isPreview": { "alias": "isPreview"; "required": false; }; }, { "pdfSaveHandlerEmit": "pdfSaveHandlerEmit"; "templateMode": "templateMode"; "pdfPreviewEmit": "pdfPreviewEmit"; }, never, never, true, never>;
|
|
@@ -104,7 +104,6 @@ export declare class QuestionbookComponent implements OnInit, AfterViewInit {
|
|
|
104
104
|
cropperReady(sourceImageDimensions: Dimensions): void;
|
|
105
105
|
convertBlobToBase64(objectUrl: string): Promise<string>;
|
|
106
106
|
closeModal(): void;
|
|
107
|
-
readQuestions(qbId: any, ques: any): any[];
|
|
108
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<QuestionbookComponent, never>;
|
|
109
108
|
static ɵcmp: i0.ɵɵComponentDeclaration<QuestionbookComponent, "lib-questionbook", never, { "qbItem": { "alias": "qbItem"; "required": false; }; "questionItem": { "alias": "questionItem"; "required": false; }; "questions": { "alias": "questions"; "required": false; }; "errorFieldId": { "alias": "errorFieldId"; "required": false; }; "labelValue": { "alias": "labelValue"; "required": false; }; "token": { "alias": "token"; "required": false; }; "isEdit": { "alias": "isEdit"; "required": false; }; "dropDownData": { "alias": "dropDownData"; "required": false; }; "dataBind": { "alias": "dataBind"; "required": false; }; "allIcons": { "alias": "allIcons"; "required": false; }; "themeColor": { "alias": "themeColor"; "required": false; }; "cdnIconURL": { "alias": "cdnIconURL"; "required": false; }; "direction": { "alias": "direction"; "required": false; }; }, { "handleDropDown": "handleDropDown"; "handleQuestion": "handleQuestion"; "singleFieldChangeEmit": "singleFieldChangeEmit"; "hadleDropDownDependent": "hadleDropDownDependent"; "handleCalendarDate": "handleCalendarDate"; "handleCalendarEvent": "handleCalendarEvent"; }, never, never, true, never>;
|
|
110
109
|
}
|
|
@@ -62,7 +62,6 @@ export declare class QuestionnaireComponent implements OnInit {
|
|
|
62
62
|
selectedhourMap: Map<any, any>;
|
|
63
63
|
selectedminuteMap: Map<any, any>;
|
|
64
64
|
attachmentsMap: Map<any, any>;
|
|
65
|
-
sqOptions: Map<any, any>;
|
|
66
65
|
subAnsMap: Map<any, any>;
|
|
67
66
|
localSubQuestions: LocalQuestion[];
|
|
68
67
|
questionStack: any[];
|
|
@@ -4,7 +4,7 @@ export declare class NxtCustomTranslatePipe implements PipeTransform {
|
|
|
4
4
|
private cache;
|
|
5
5
|
private translationService;
|
|
6
6
|
constructor();
|
|
7
|
-
transform(key: string, fallback: string): string;
|
|
7
|
+
transform(key: string, fallback: string, from?: string): string;
|
|
8
8
|
static ɵfac: i0.ɵɵFactoryDeclaration<NxtCustomTranslatePipe, never>;
|
|
9
9
|
static ɵpipe: i0.ɵɵPipeDeclaration<NxtCustomTranslatePipe, "nxtCustomTranslate", true>;
|
|
10
10
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SvgPipe implements PipeTransform {
|
|
5
|
+
private sanitizer;
|
|
6
|
+
constructor(sanitizer: DomSanitizer);
|
|
7
|
+
transform(icon: any): SafeHtml;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SvgPipe, never>;
|
|
9
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<SvgPipe, "svg", true>;
|
|
10
|
+
}
|
|
@@ -9,7 +9,7 @@ export declare class TranslationService {
|
|
|
9
9
|
private formBuilderTranslations;
|
|
10
10
|
private formBuilderCurrentLang;
|
|
11
11
|
private formBuilderTranslationsLoaded;
|
|
12
|
-
formBuilderTranslationsLoaded$: import("rxjs").Observable<
|
|
12
|
+
formBuilderTranslationsLoaded$: import("rxjs").Observable<string>;
|
|
13
13
|
constructor(dataService: DataService);
|
|
14
14
|
load(): Promise<void>;
|
|
15
15
|
flattenAppTranslations(translations: any): any;
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rangertechnologies/ngnxt",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.255-beta",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^19.2.14",
|
|
6
|
+
"@angular/core": "^19.2.14"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"tslib": "^2.
|
|
9
|
+
"tslib": "^2.8.1"
|
|
10
10
|
},
|
|
11
11
|
"description": "This library was used for creating dymanic UI based on the input JSON/data",
|
|
12
12
|
"main": "karma.conf.js",
|
|
@@ -37,8 +37,6 @@
|
|
|
37
37
|
},
|
|
38
38
|
".": {
|
|
39
39
|
"types": "./index.d.ts",
|
|
40
|
-
"esm2022": "./esm2022/rangertechnologies-ngnxt.mjs",
|
|
41
|
-
"esm": "./esm2022/rangertechnologies-ngnxt.mjs",
|
|
42
40
|
"default": "./fesm2022/rangertechnologies-ngnxt.mjs"
|
|
43
41
|
}
|
|
44
42
|
},
|
|
Binary file
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
2
|
-
/* tslint:disable */
|
|
3
|
-
export const VERSION = {
|
|
4
|
-
"dirty": true,
|
|
5
|
-
"raw": "78a817f6-dirty",
|
|
6
|
-
"hash": "78a817f6",
|
|
7
|
-
"distance": null,
|
|
8
|
-
"tag": null,
|
|
9
|
-
"semver": null,
|
|
10
|
-
"suffix": "78a817f6-dirty",
|
|
11
|
-
"semverString": null,
|
|
12
|
-
"version": "2.1.253"
|
|
13
|
-
};
|
|
14
|
-
/* tslint:enable */
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixNQUFNLEVBQUUsVUFBVTtJQUNsQixVQUFVLEVBQUUsSUFBSTtJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixjQUFjLEVBQUUsSUFBSTtJQUNwQixTQUFTLEVBQUUsU0FBUztDQUN2QixDQUFDO0FBQ0YsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSU1QT1JUQU5UOiBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURUQhIERPIE5PVCBNQU5VQUxMWSBFRElUIE9SIENIRUNLSU4hXG4vKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSB7XG4gICAgXCJkaXJ0eVwiOiB0cnVlLFxuICAgIFwicmF3XCI6IFwiNzhhODE3ZjYtZGlydHlcIixcbiAgICBcImhhc2hcIjogXCI3OGE4MTdmNlwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCI3OGE4MTdmNi1kaXJ0eVwiLFxuICAgIFwic2VtdmVyU3RyaW5nXCI6IG51bGwsXG4gICAgXCJ2ZXJzaW9uXCI6IFwiMi4xLjI1M1wiXG59O1xuLyogdHNsaW50OmVuYWJsZSAqL1xuIl19
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
3
|
-
import { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';
|
|
4
|
-
import { ButtonStylesPipe } from '../../pipe/button-styles.pipe';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../../services/translation/translation.service";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
export class NxtButtonComponent {
|
|
9
|
-
cdRef;
|
|
10
|
-
translationService;
|
|
11
|
-
elementRef;
|
|
12
|
-
buttonValue = ''; //SKS24JAN25 button text
|
|
13
|
-
buttonType = 'primary'; //SKS24JAN25 If the button type is 'text-only', it should display only the text without a border or outline. For 'grey-text', the button should have a border and a background color, but the text color should be gray, similar to 'blue-text'
|
|
14
|
-
type = 'button'; //SKS24JAN25 The button types are "button," "group," and "dropdown."
|
|
15
|
-
buttonDisable = false; //SKS24JAN25 use this input to disable a button when needed.
|
|
16
|
-
btnBgColor = ''; // Use this input to set a custom background color for the button.
|
|
17
|
-
btnBorder = ''; // Use this input to set a custom border style for the button.
|
|
18
|
-
btnTextColor = ''; // Use this input to set a custom text color for the button.
|
|
19
|
-
btnHeight = ''; // Use this input to set a custom height for the button.
|
|
20
|
-
btnWidth = ''; // Use this input to set a custom width for the button.
|
|
21
|
-
btnIconLeftSrc = ''; // Use this input to set the source of the left-side icon for the button.
|
|
22
|
-
btnIconRightSrc = ''; // Use this input to set the source of the right-side icon for the button.
|
|
23
|
-
btnHoverBgColor = ''; // Use this input to set the background color of the button on hover.
|
|
24
|
-
btnHoverTextColor = ''; // Use this input to set the text color of the button on hover.
|
|
25
|
-
btnId = 'default'; // Use this input to set a custom ID for the button. Default is 'default'.
|
|
26
|
-
dataDismiss = ''; // Use this input to specify the dismiss action for the button (e.g., 'modal' to close a modal).
|
|
27
|
-
buttonBorder = '0px'; // Use this input to set the border size of the button. Default is '0px' for no border.
|
|
28
|
-
modalToTrigger = ''; // Use this input to specify the ID or target of the modal to be triggered.
|
|
29
|
-
isImageSvg = false; // Use this input to determine if the image is an SVG. Default is false (non-SVG).
|
|
30
|
-
tabIndex = ''; // Use this input to set the tab index for the element, controlling the focus order.
|
|
31
|
-
buttonConfig = ''; // Use this input to pass configuration settings for the group and dropdown buttons (e.g., styles, actions).
|
|
32
|
-
mode = 'edit'; // New mode input
|
|
33
|
-
languageCode;
|
|
34
|
-
buttonClickEmit = new EventEmitter();
|
|
35
|
-
iconSrc = ''; // Ensure it's always a string
|
|
36
|
-
isDropdownOpen = false;
|
|
37
|
-
// SKS24JAN25 dropdown button config
|
|
38
|
-
// dropdownButton = {
|
|
39
|
-
// btnBgColor: '#007bff',
|
|
40
|
-
// btnBorder: '1px solid #0056b3',
|
|
41
|
-
// btnTextColor: '#ffffff',
|
|
42
|
-
// btnHeight: '40px',
|
|
43
|
-
// btnWidth: '150px',
|
|
44
|
-
// btnHoverBgColor: '#0056b3',
|
|
45
|
-
// btnHoverTextColor: '#ffffff',
|
|
46
|
-
// label: 'Dropdown',
|
|
47
|
-
// iconSrc: '',
|
|
48
|
-
// items: [
|
|
49
|
-
// { label: 'Action 1',iconSrc: '', hover: false },
|
|
50
|
-
// { label: 'Action 2',iconSrc: '', hover: false },
|
|
51
|
-
// { label: 'Action 3',iconSrc: '', hover: false }
|
|
52
|
-
// ]
|
|
53
|
-
// };
|
|
54
|
-
constructor(cdRef, translationService, elementRef) {
|
|
55
|
-
this.cdRef = cdRef;
|
|
56
|
-
this.translationService = translationService;
|
|
57
|
-
this.elementRef = elementRef;
|
|
58
|
-
}
|
|
59
|
-
ngOnInit() {
|
|
60
|
-
// SKS14JUL25 Initialize language settings on component load
|
|
61
|
-
// SKS14JUL25 Get the saved language from localStorage (if any)
|
|
62
|
-
let lang = this.languageCode || this.translationService.getLanguage() || localStorage.getItem('language') || 'en';
|
|
63
|
-
// SKS14JUL25 If languageCode is already set (e.g., from input or config), apply it
|
|
64
|
-
if (lang) {
|
|
65
|
-
this.translationService.setLanguage(this.languageCode);
|
|
66
|
-
this.languageCode = lang;
|
|
67
|
-
}
|
|
68
|
-
// SKS14JUL25 Subscribe to translation load event to trigger change detection,
|
|
69
|
-
//SKS14JUL25 ensuring that translations using pipes get updated properly
|
|
70
|
-
this.translationService.translationsLoaded$.subscribe(() => {
|
|
71
|
-
this.cdRef.detectChanges(); //SKS14JUL25 Force pipe re-evaluation after language change
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
ngOnChanges(changes) {
|
|
75
|
-
// SKS14JUL25 Check if there's a change in the input property 'languageCode'
|
|
76
|
-
if (changes['languageCode']) {
|
|
77
|
-
// SKS14JUL25 If new languageCode is set, update the translation service
|
|
78
|
-
if (this.languageCode) {
|
|
79
|
-
this.translationService.setLanguage(this.languageCode);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
buttonClicked($event) {
|
|
84
|
-
this.buttonClickEmit.emit($event);
|
|
85
|
-
if (this.isDropdownOpen) {
|
|
86
|
-
this.isDropdownOpen = false;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
toggleDropdown() {
|
|
90
|
-
this.isDropdownOpen = !this.isDropdownOpen;
|
|
91
|
-
}
|
|
92
|
-
//SKS24JAN25 Listener for clicks outside the dropdown button to close or manage its state.
|
|
93
|
-
onClickOutside(event) {
|
|
94
|
-
if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {
|
|
95
|
-
this.isDropdownOpen = false;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtButtonComponent, isStandalone: true, selector: "nxt-button", inputs: { buttonValue: "buttonValue", buttonType: "buttonType", type: "type", buttonDisable: "buttonDisable", btnBgColor: "btnBgColor", btnBorder: "btnBorder", btnTextColor: "btnTextColor", btnHeight: "btnHeight", btnWidth: "btnWidth", btnIconLeftSrc: "btnIconLeftSrc", btnIconRightSrc: "btnIconRightSrc", btnHoverBgColor: "btnHoverBgColor", btnHoverTextColor: "btnHoverTextColor", btnId: "btnId", dataDismiss: "dataDismiss", buttonBorder: "buttonBorder", modalToTrigger: "modalToTrigger", isImageSvg: "isImageSvg", tabIndex: "tabIndex", buttonConfig: "buttonConfig", mode: "mode", languageCode: "languageCode" }, outputs: { buttonClickEmit: "buttonClickEmit" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"btn | buttonStyles\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltipPath ? (btn.tooltipPath | nxtCustomTranslate : btn.tooltip) : (btn.tooltip | nxtCustomTranslate : btn.tooltip) }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"button-custom-bg: {{btnBgColor}};button-custom-border: {{btnBorder}};button-custom-color: {{btnTextColor}};button-custom-height: {{btnHeight}};button-custom-width: {{btnWidth}};button-hover-bg: {{btnHoverBgColor}};button-hover-text-color: {{btnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"btnId != 'default' ? btnId : null\">\n <img *ngIf=\"btnIconLeftSrc != '' && isImageSvg\" src=\"{{btnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"btnIconLeftSrc != '' && !isImageSvg\" src=\"{{btnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"btnIconRightSrc != '' && isImageSvg\" src=\"{{btnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"btnIconRightSrc != '' && !isImageSvg\" src=\"{{btnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"btn | buttonStyles\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(button-custom-bg);border-color:var(button-custom-border);color:var(button-custom-color);height:var(button-custom-height);width:var(button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(button-custom-border);background-color:var(button-hover-bg);color:var(button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }, { kind: "pipe", type: ButtonStylesPipe, name: "buttonStyles" }] });
|
|
100
|
-
}
|
|
101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, decorators: [{
|
|
102
|
-
type: Component,
|
|
103
|
-
args: [{ selector: 'nxt-button', standalone: true, imports: [CommonModule, NxtCustomTranslatePipe, ButtonStylesPipe], template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"btn | buttonStyles\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltipPath ? (btn.tooltipPath | nxtCustomTranslate : btn.tooltip) : (btn.tooltip | nxtCustomTranslate : btn.tooltip) }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"button-custom-bg: {{btnBgColor}};button-custom-border: {{btnBorder}};button-custom-color: {{btnTextColor}};button-custom-height: {{btnHeight}};button-custom-width: {{btnWidth}};button-hover-bg: {{btnHoverBgColor}};button-hover-text-color: {{btnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"btnId != 'default' ? btnId : null\">\n <img *ngIf=\"btnIconLeftSrc != '' && isImageSvg\" src=\"{{btnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"btnIconLeftSrc != '' && !isImageSvg\" src=\"{{btnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"btnIconRightSrc != '' && isImageSvg\" src=\"{{btnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"btnIconRightSrc != '' && !isImageSvg\" src=\"{{btnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"btn | buttonStyles\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(button-custom-bg);border-color:var(button-custom-border);color:var(button-custom-color);height:var(button-custom-height);width:var(button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(button-custom-border);background-color:var(button-hover-bg);color:var(button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"] }]
|
|
104
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslationService }, { type: i0.ElementRef }], propDecorators: { buttonValue: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}], buttonType: [{
|
|
107
|
-
type: Input
|
|
108
|
-
}], type: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], buttonDisable: [{
|
|
111
|
-
type: Input
|
|
112
|
-
}], btnBgColor: [{
|
|
113
|
-
type: Input
|
|
114
|
-
}], btnBorder: [{
|
|
115
|
-
type: Input
|
|
116
|
-
}], btnTextColor: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], btnHeight: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], btnWidth: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], btnIconLeftSrc: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], btnIconRightSrc: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], btnHoverBgColor: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], btnHoverTextColor: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], btnId: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], dataDismiss: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], buttonBorder: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], modalToTrigger: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], isImageSvg: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], tabIndex: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], buttonConfig: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], mode: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], languageCode: [{
|
|
147
|
-
type: Input
|
|
148
|
-
}], buttonClickEmit: [{
|
|
149
|
-
type: Output
|
|
150
|
-
}], onClickOutside: [{
|
|
151
|
-
type: HostListener,
|
|
152
|
-
args: ['document:click', ['$event']]
|
|
153
|
-
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnh0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQVNqRSxNQUFNLE9BQU8sa0JBQWtCO0lBaURUO0lBQWtDO0lBQWdEO0lBL0M3RixXQUFXLEdBQVcsRUFBRSxDQUFDLENBQUMseUJBQXlCO0lBQ25ELFVBQVUsR0FBVyxTQUFTLENBQUMsQ0FBQywrT0FBK087SUFDL1EsSUFBSSxHQUFXLFFBQVEsQ0FBQyxDQUFDLG9FQUFvRTtJQUM3RixhQUFhLEdBQVksS0FBSyxDQUFDLENBQUMsNERBQTREO0lBQzVGLFVBQVUsR0FBVyxFQUFFLENBQUMsQ0FBQyxrRUFBa0U7SUFDM0YsU0FBUyxHQUFXLEVBQUUsQ0FBQyxDQUFDLDhEQUE4RDtJQUN0RixZQUFZLEdBQVcsRUFBRSxDQUFDLENBQUMsNERBQTREO0lBQ3ZGLFNBQVMsR0FBVyxFQUFFLENBQUMsQ0FBQyx3REFBd0Q7SUFDaEYsUUFBUSxHQUFXLEVBQUUsQ0FBQyxDQUFDLHVEQUF1RDtJQUM5RSxjQUFjLEdBQVcsRUFBRSxDQUFD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S0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQWdFUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IEJ1dHRvblN0eWxlc1BpcGUgfSBmcm9tICcuLi8uLi9waXBlL2J1dHRvbi1zdHlsZXMucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1idXR0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOeHRDdXN0b21UcmFuc2xhdGVQaXBlLCBCdXR0b25TdHlsZXNQaXBlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL254dC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ueHQtYnV0dG9uLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOeHRCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuIFxuICBASW5wdXQoKSBidXR0b25WYWx1ZTogc3RyaW5nID0gJyc7IC8vU0tTMjRKQU4yNSBidXR0b24gdGV4dCBcbiAgQElucHV0KCkgYnV0dG9uVHlwZTogc3RyaW5nID0gJ3ByaW1hcnknOyAvL1NLUzI0SkFOMjUgSWYgdGhlIGJ1dHRvbiB0eXBlIGlzICd0ZXh0LW9ubHknLCBpdCBzaG91bGQgZGlzcGxheSBvbmx5IHRoZSB0ZXh0IHdpdGhvdXQgYSBib3JkZXIgb3Igb3V0bGluZS4gRm9yICdncmV5LXRleHQnLCB0aGUgYnV0dG9uIHNob3VsZCBoYXZlIGEgYm9yZGVyIGFuZCBhIGJhY2tncm91bmQgY29sb3IsIGJ1dCB0aGUgdGV4dCBjb2xvciBzaG91bGQgYmUgZ3JheSwgc2ltaWxhciB0byAnYmx1ZS10ZXh0J1xuICBASW5wdXQoKSB0eXBlOiBzdHJpbmcgPSAnYnV0dG9uJzsgLy9TS1MyNEpBTjI1IFRoZSBidXR0b24gdHlwZXMgYXJlIFwiYnV0dG9uLFwiIFwiZ3JvdXAsXCIgYW5kIFwiZHJvcGRvd24uXCJcbiAgQElucHV0KCkgYnV0dG9uRGlzYWJsZTogYm9vbGVhbiA9IGZhbHNlOyAvL1NLUzI0SkFOMjUgdXNlIHRoaXMgaW5wdXQgdG8gZGlzYWJsZSBhIGJ1dHRvbiB3aGVuIG5lZWRlZC5cbiAgQElucHV0KCkgYnRuQmdDb2xvcjogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBidG5Cb3JkZXI6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgYSBjdXN0b20gYm9yZGVyIHN0eWxlIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBidG5UZXh0Q29sb3I6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgYSBjdXN0b20gdGV4dCBjb2xvciBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuSGVpZ2h0OiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIGhlaWdodCBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgYnRuV2lkdGg6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgYSBjdXN0b20gd2lkdGggZm9yIHRoZSBidXR0b24uXG4gIEBJbnB1dCgpIGJ0bkljb25MZWZ0U3JjOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGxlZnQtc2lkZSBpY29uIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBidG5JY29uUmlnaHRTcmM6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIHNvdXJjZSBvZiB0aGUgcmlnaHQtc2lkZSBpY29uIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBidG5Ib3ZlckJnQ29sb3I6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci5cbiAgQElucHV0KCkgYnRuSG92ZXJUZXh0Q29sb3I6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIHRleHQgY29sb3Igb2YgdGhlIGJ1dHRvbiBvbiBob3Zlci5cbiAgQElucHV0KCkgYnRuSWQ6IHN0cmluZyA9ICdkZWZhdWx0JzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIElEIGZvciB0aGUgYnV0dG9uLiBEZWZhdWx0IGlzICdkZWZhdWx0Jy5cbiAgQElucHV0KCkgZGF0YURpc21pc3M6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzcGVjaWZ5IHRoZSBkaXNtaXNzIGFjdGlvbiBmb3IgdGhlIGJ1dHRvbiAoZS5nLiwgJ21vZGFsJyB0byBjbG9zZSBhIG1vZGFsKS5cbiAgQElucHV0KCkgYnV0dG9uQm9yZGVyOiBzdHJpbmcgPSAnMHB4JzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSBib3JkZXIgc2l6ZSBvZiB0aGUgYnV0dG9uLiBEZWZhdWx0IGlzICcwcHgnIGZvciBubyBib3JkZXIuXG4gIEBJbnB1dCgpIG1vZGFsVG9UcmlnZ2VyOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc3BlY2lmeSB0aGUgSUQgb3IgdGFyZ2V0IG9mIHRoZSBtb2RhbCB0byBiZSB0cmlnZ2VyZWQuXG4gIEBJbnB1dCgpIGlzSW1hZ2VTdmc6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbWFnZSBpcyBhbiBTVkcuIERlZmF1bHQgaXMgZmFsc2UgKG5vbi1TVkcpLlxuICBASW5wdXQoKSB0YWJJbmRleDogYW55ID0gJyc7Ly8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSB0YWIgaW5kZXggZm9yIHRoZSBlbGVtZW50LCBjb250cm9sbGluZyB0aGUgZm9jdXMgb3JkZXIuXG4gIEBJbnB1dCgpIGJ1dHRvbkNvbmZpZzogYW55ID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHBhc3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIGdyb3VwIGFuZCBkcm9wZG93biBidXR0b25zIChlLmcuLCBzdHlsZXMsIGFjdGlvbnMpLlxuICBASW5wdXQoKSBtb2RlOiAndmlldycgfCAnZWRpdCcgfCAncHJpbnQnID0gJ2VkaXQnOyAvLyBOZXcgbW9kZSBpbnB1dFxuICBASW5wdXQoKSBsYW5ndWFnZUNvZGU6IGFueSA7XG4gIFxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tFbWl0OkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGljb25TcmM6IGFueSA9ICcnOyAvLyBFbnN1cmUgaXQncyBhbHdheXMgYSBzdHJpbmdcbiAgaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcblxuICBcblxuICAvLyBTS1MyNEpBTjI1IGRyb3Bkb3duIGJ1dHRvbiBjb25maWdcblxuICAvLyBkcm9wZG93bkJ1dHRvbiA9IHtcbiAgLy8gICBidG5CZ0NvbG9yOiAnIzAwN2JmZicsXG4gIC8vICAgYnRuQm9yZGVyOiAnMXB4IHNvbGlkICMwMDU2YjMnLFxuICAvLyAgIGJ0blRleHRDb2xvcjogJyNmZmZmZmYnLFxuICAvLyAgIGJ0bkhlaWdodDogJzQwcHgnLFxuICAvLyAgIGJ0bldpZHRoOiAnMTUwcHgnLFxuICAvLyAgIGJ0bkhvdmVyQmdDb2xvcjogJyMwMDU2YjMnLFxuICAvLyAgIGJ0bkhvdmVyVGV4dENvbG9yOiAnI2ZmZmZmZicsXG4gIC8vICAgbGFiZWw6ICdEcm9wZG93bicsXG4gIC8vICAgaWNvblNyYzogJycsXG4gIC8vICAgaXRlbXM6IFtcbiAgLy8gICAgIHsgbGFiZWw6ICdBY3Rpb24gMScsaWNvblNyYzogJycsIGhvdmVyOiBmYWxzZSB9LFxuICAvLyAgICAgeyBsYWJlbDogJ0FjdGlvbiAyJyxpY29uU3JjOiAnJywgaG92ZXI6IGZhbHNlIH0sXG4gIC8vICAgICB7IGxhYmVsOiAnQWN0aW9uIDMnLGljb25TcmM6ICcnLCBob3ZlcjogZmFsc2UgfVxuICAvLyAgIF1cbiAgLy8gfTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gU0tTMTRKVUwyNSBJbml0aWFsaXplIGxhbmd1YWdlIHNldHRpbmdzIG9uIGNvbXBvbmVudCBsb2FkXG4gICAgLy8gU0tTMTRKVUwyNSBHZXQgdGhlIHNhdmVkIGxhbmd1YWdlIGZyb20gbG9jYWxTdG9yYWdlIChpZiBhbnkpXG4gICAgbGV0IGxhbmcgPSB0aGlzLmxhbmd1YWdlQ29kZSB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRMYW5ndWFnZSgpIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpIHx8ICdlbic7XG4gICAgLy8gU0tTMTRKVUwyNSBJZiBsYW5ndWFnZUNvZGUgaXMgYWxyZWFkeSBzZXQgKGUuZy4sIGZyb20gaW5wdXQgb3IgY29uZmlnKSwgYXBwbHkgaXRcbiAgICBpZiAobGFuZykge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZUNvZGUpO1xuICAgICAgdGhpcy5sYW5ndWFnZUNvZGUgPSBsYW5nO1xuICAgIH1cbiAgICAvLyBTS1MxNEpVTDI1IFN1YnNjcmliZSB0byB0cmFuc2xhdGlvbiBsb2FkIGV2ZW50IHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbixcbiAgICAvL1NLUzE0SlVMMjUgZW5zdXJpbmcgdGhhdCB0cmFuc2xhdGlvbnMgdXNpbmcgcGlwZXMgZ2V0IHVwZGF0ZWQgcHJvcGVybHlcbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGlvbnNMb2FkZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTsgLy9TS1MxNEpVTDI1IEZvcmNlIHBpcGUgcmUtZXZhbHVhdGlvbiBhZnRlciBsYW5ndWFnZSBjaGFuZ2VcbiAgICB9KTtcbiAgfVxuICBcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFNLUzE0SlVMMjUgQ2hlY2sgaWYgdGhlcmUncyBhIGNoYW5nZSBpbiB0aGUgaW5wdXQgcHJvcGVydHkgJ2xhbmd1YWdlQ29kZSdcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2VDb2RlJ10pIHtcbiAgICAgIC8vIFNLUzE0SlVMMjUgSWYgbmV3IGxhbmd1YWdlQ29kZSBpcyBzZXQsIHVwZGF0ZSB0aGUgdHJhbnNsYXRpb24gc2VydmljZVxuICAgICAgaWYgKHRoaXMubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldExhbmd1YWdlKHRoaXMubGFuZ3VhZ2VDb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gIFxuXG4gIGJ1dHRvbkNsaWNrZWQoJGV2ZW50OmFueSl7XG4gICAgdGhpcy5idXR0b25DbGlja0VtaXQuZW1pdCgkZXZlbnQpO1xuICAgIGlmKHRoaXMuaXNEcm9wZG93bk9wZW4pe1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3Blbj1mYWxzZVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duKCkge1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgfVxuLy9TS1MyNEpBTjI1IExpc3RlbmVyIGZvciBjbGlja3Mgb3V0c2lkZSB0aGUgZHJvcGRvd24gYnV0dG9uIHRvIGNsb3NlIG9yIG1hbmFnZSBpdHMgc3RhdGUuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duT3BlbiAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLSBTS1MyNEpBTjI1IGdyb3VwIGJ1dHRvbiAtLT5cbjxkaXYgKm5nSWY9XCJ0eXBlID09PSAnZ3JvdXAnXCIgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQnV0dG9uIEdyb3VwXCI+XG4gICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbkNvbmZpZy5idXR0b25zXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWljb24ge3tidG4uYnV0dG9uVHlwZX19IHRvb2x0aXAtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImJ0bi50YWJJbmRleFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJzLXRvZ2dsZV09XCJidG4ubW9kYWxUb1RyaWdnZXIgPyAnbW9kYWwnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJzLXRhcmdldF09XCJidG4ubW9kYWxUb1RyaWdnZXIgPyAnIycgKyBidG4ubW9kYWxUb1RyaWdnZXIgOiBudWxsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImJ0biB8IGJ1dHRvblN0eWxlc1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy1kaXNtaXNzXT1cImJ0bi5kYXRhRGlzbWlzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZChidG4pXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ0bi5idG5JZCAhPT0gJ2RlZmF1bHQnID8gYnRuLmJ0bklkIDogbnVsbFwiPlxuICAgICAgICA8aW1nICpuZ0lmPVwiYnRuLmlzSW1hZ2VTdmdcIiBbc3JjXT1cImJ0bi5pY29uU3JjXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjp7e2J0bi50b29sdGlwQmNDb2xvcn19O1xuICAgICAgICAgICAgY29sb3I6e3tidG4udG9vbHRpcENvbG9yfX07XG4gICAgICAgICAgICBmb250LXNpemU6e3tidG4udG9vbHRpcEZTaXplfX1cIj5cbiAgICAgICAgICAgIHt7IGJ0bi50b29sdGlwUGF0aCA/IChidG4udG9vbHRpcFBhdGggfCBueHRDdXN0b21UcmFuc2xhdGUgOiBidG4udG9vbHRpcCkgOiAoYnRuLnRvb2x0aXAgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBidG4udG9vbHRpcCkgfX1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLXBvaW50ZXJcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6e3tidG4udG9vbHRpcEJjQ29sb3J9fTtcIj48L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4gIFxuPCEtLSBTS1MyNEpBTjI1IHNpbmdsZSBidXR0b24gLS0+XG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiAgKm5nSWY9XCJ0eXBlICE9PSAnZ3JvdXAnICYmIHR5cGUgIT09ICdkcm9wZG93bidcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmYy1idXR0b24ge3tidXR0b25UeXBlfX1cIiBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxuICAgIFthdHRyLmRhdGEtYnMtdG9nZ2xlXT1cIm1vZGFsVG9UcmlnZ2VyICE9ICcnID8gJ21vZGFsJyA6ICcnXCJcbiAgICBbYXR0ci5kYXRhLWJzLXRhcmdldF09XCJtb2RhbFRvVHJpZ2dlciAhPSAnJyA/ICcjJyttb2RhbFRvVHJpZ2dlciA6ICcnXCJcbiAgICBzdHlsZT1cImJ1dHRvbi1jdXN0b20tYmc6IHt7YnRuQmdDb2xvcn19O2J1dHRvbi1jdXN0b20tYm9yZGVyOiB7e2J0bkJvcmRlcn19O2J1dHRvbi1jdXN0b20tY29sb3I6IHt7YnRuVGV4dENvbG9yfX07YnV0dG9uLWN1c3RvbS1oZWlnaHQ6IHt7YnRuSGVpZ2h0fX07YnV0dG9uLWN1c3RvbS13aWR0aDoge3tidG5XaWR0aH19O2J1dHRvbi1ob3Zlci1iZzoge3tidG5Ib3ZlckJnQ29sb3J9fTtidXR0b24taG92ZXItdGV4dC1jb2xvcjoge3tidG5Ib3ZlclRleHRDb2xvcn19O1wiXG4gICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIiBbYXR0ci5kYXRhLWJzLWRpc21pc3NdPSdkYXRhRGlzbWlzcycgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuaWRdPVwiYnRuSWQgIT0gJ2RlZmF1bHQnID8gYnRuSWQgOiBudWxsXCI+XG4gICAgPGltZyAqbmdJZj1cImJ0bkljb25MZWZ0U3JjICE9ICcnICYmIGlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2J0bkljb25MZWZ0U3JjfX1cIlxuICAgICAgICBjbGFzcz1cImZjLWJ0bi1pY29uIGxlZnQtaWNvblwiPlxuICAgIDxpbWcgKm5nSWY9XCJidG5JY29uTGVmdFNyYyAhPSAnJyAmJiAhaXNJbWFnZVN2Z1wiIHNyYz1cInt7YnRuSWNvbkxlZnRTcmN9fVwiIGNsYXNzPVwiZmMtYnRuLWljb24gbGVmdC1pY29uXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmYy1idG4tdGV4dFwiPnt7YnV0dG9uVmFsdWV9fTwvc3Bhbj5cbiAgICA8aW1nICpuZ0lmPVwiYnRuSWNvblJpZ2h0U3JjICE9ICcnICYmIGlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2J0bkljb25SaWdodFNyY319XCJcbiAgICAgICAgY2xhc3M9XCJmYy1idG4taWNvbiByaWdodC1pY29uXCI+XG4gICAgPGltZyAqbmdJZj1cImJ0bkljb25SaWdodFNyYyAhPSAnJyAmJiAhaXNJbWFnZVN2Z1wiIHNyYz1cInt7YnRuSWNvblJpZ2h0U3JjfX1cIiBjbGFzcz1cImZjLWJ0bi1pY29uIHJpZ2h0LWljb25cIj5cbjwvYnV0dG9uPlxuXG48IS0tIFNLUzI0SkFOMjUgZHJvcGRvd24gYnV0dG9uIC0tPlxuPGRpdiAqbmdJZj1cInR5cGUgPT09ICdkcm9wZG93bidcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgPHN2ZyBjbGFzcz1cImNsaWNrYWJsZS1pbWdcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiICB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxyZWN0IHg9XCIwLjNcIiB5PVwiMC4zXCIgd2lkdGg9XCIzOS40XCIgaGVpZ2h0PVwiMzkuNFwiIHJ4PVwiMTEuN1wiIGZpbGw9XCIjRkFGQkZEXCIgc3Ryb2tlPVwiI0Q1RDVENVwiIHN0cm9rZS13aWR0aD1cIjAuNlwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xOS45OTk5IDI1LjY2NjdDMjMuNjgxOCAyNS42NjY3IDI2LjY2NjYgMjIuNjgxOSAyNi42NjY2IDE5QzI2LjY2NjYgMTUuMzE4MSAyMy42ODE4IDEyLjMzMzQgMTkuOTk5OSAxMi4zMzM0QzE2LjMxOCAxMi4zMzM0IDEzLjMzMzMgMTUuMzE4MSAxMy4zMzMzIDE5QzEzLjMzMzMgMjIuNjgxOSAxNi4zMTggMjUuNjY2NyAxOS45OTk5IDI1LjY2NjdaXCIgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xNy42NDY3IDE4LjE2TDIwLjAwMDEgMjAuNTA2N0wyMi4zNTM0IDE4LjE2XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgPC9zdmc+ICBcbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiICAqbmdJZj1cImlzRHJvcGRvd25PcGVuXCI+XG4gICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25Db25maWcuYnV0dG9uc1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJidG4udGFiSW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10b2dnbGVdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJ21vZGFsJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10YXJnZXRdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJyMnICsgYnRuLm1vZGFsVG9UcmlnZ2VyIDogbnVsbFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJidG4gfCBidXR0b25TdHlsZXNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnMtZGlzbWlzc109XCJidG4uZGF0YURpc21pc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoYnRuKVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJidG4uYnRuSWQgIT09ICdkZWZhdWx0JyA/IGJ0bi5idG5JZCA6IG51bGxcIj5cbiAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaXNJbWFnZVN2Z1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmMtYnRuLXRleHRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTJweDtcIj57e2J0bi5uYW1lfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|