@rangertechnologies/ngnxt 2.1.279 → 2.1.280
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.
|
@@ -24,7 +24,6 @@ import { SelectionModel } from '@angular/cdk/collections';
|
|
|
24
24
|
import * as i2 from '@angular/google-maps';
|
|
25
25
|
import { GoogleMapsModule } from '@angular/google-maps';
|
|
26
26
|
import * as i1$2 from '@angular/platform-browser';
|
|
27
|
-
import { BrowserModule } from '@angular/platform-browser';
|
|
28
27
|
import * as i9 from '@angular/cdk/bidi';
|
|
29
28
|
import * as i1$3 from '@angular/router';
|
|
30
29
|
import * as i8 from 'ngx-device-detector';
|
|
@@ -50755,6 +50754,7 @@ class NxtDatatable {
|
|
|
50755
50754
|
}
|
|
50756
50755
|
}
|
|
50757
50756
|
}
|
|
50757
|
+
this.computeSummaryColumns();
|
|
50758
50758
|
this.cdRef.markForCheck();
|
|
50759
50759
|
}
|
|
50760
50760
|
}
|
|
@@ -51042,7 +51042,10 @@ class NxtDatatable {
|
|
|
51042
51042
|
if (summaryCol.formula) {
|
|
51043
51043
|
// SKS16SEP25 Replace [fieldName] with actual row values
|
|
51044
51044
|
let expression = summaryCol.formula.replace(/\[([^\]]+)\]/g, (_, fieldName) => {
|
|
51045
|
-
|
|
51045
|
+
if (this.currentColumns.some(col => col.fieldName === fieldName)) {
|
|
51046
|
+
return Number(newRow[fieldName]) || 0;
|
|
51047
|
+
}
|
|
51048
|
+
return 0;
|
|
51046
51049
|
});
|
|
51047
51050
|
try {
|
|
51048
51051
|
// SKS16SEP25 Safely evaluate expression (BODMAS handled automatically)
|
|
@@ -57453,7 +57456,7 @@ class BookletComponent {
|
|
|
57453
57456
|
this.isEdit = true;
|
|
57454
57457
|
}
|
|
57455
57458
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookletComponent, deps: [{ token: SalesforceService }, { token: DataService }, { token: StorageService }, { token: i1$2.DomSanitizer }, { token: ChangeService }, { token: i1$1.HttpClient }, { token: TranslationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
57456
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: BookletComponent, isStandalone: true, selector: "lib-booklet", inputs: { bookletId: "bookletId", serv: "serv", tkn: "tkn", bookletJSON: "bookletJSON", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL", dropdownDependentData: "dropdownDependentData", labelValue: "labelValue", token: "token", languageCode: "languageCode", fieldRestrictions: "fieldRestrictions", from: "from", apiUrl: "apiUrl", isEdit: "isEdit", direction: "direction", isLoading: "isLoading", dataBind: "dataBind" }, outputs: { handleBookletActionEvent: "handleBookletActionEvent", handlePage: "handlePage", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, viewQueries: [{ propertyName: "questionbookComponent", first: true, predicate: ["questionbook"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [dir]=\"direction\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <!-- AP-14MAY25 - Added [dataBind] input binding -->\n <!-- AP-19MAY25 - Added [isEdit] binding --> \n <!-- //MSM10JUL25 allIcons, themeColor, cdnIconURL added for icon-selector-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n
|
|
57459
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: BookletComponent, isStandalone: true, selector: "lib-booklet", inputs: { bookletId: "bookletId", serv: "serv", tkn: "tkn", bookletJSON: "bookletJSON", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL", dropdownDependentData: "dropdownDependentData", labelValue: "labelValue", token: "token", languageCode: "languageCode", fieldRestrictions: "fieldRestrictions", from: "from", apiUrl: "apiUrl", isEdit: "isEdit", direction: "direction", isLoading: "isLoading", dataBind: "dataBind" }, outputs: { handleBookletActionEvent: "handleBookletActionEvent", handlePage: "handlePage", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, viewQueries: [{ propertyName: "questionbookComponent", first: true, predicate: ["questionbook"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [dir]=\"direction\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <!-- AP-14MAY25 - Added [dataBind] input binding -->\n <!-- AP-19MAY25 - Added [isEdit] binding --> \n <!-- //MSM10JUL25 allIcons, themeColor, cdnIconURL added for icon-selector-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n [direction] = \"direction\"\n [labelValue]=\"labelValue\"\n [questionItem]=\"ques\"\n [questions]=\"bookQuestionsMap?.get(qb.id)?.subQuestions\"\n (handleDropDown)=\"getDropDown($event)\"\n (handleCalendarDate)=\"getCalendarDate($event)\"\n (handleCalendarEvent)=\"getCalendarEvent($event)\"\n (singleFieldChangeEmit) ='singleFieldChange($event)'\n [dataBind]=\"dataBind\"\n [isEdit]=\"isEdit\" \n [allIcons]=\"allIcons\"\n [themeColor]=\"themeColor\"\n [cdnIconURL]=\"cdnIconURL\"\n [languageCode]=\"languageCode\"\n >\n </lib-questionbook>\n </div>\n </div>\n </div>\n <!-- HA 28DEC23 Below else logic is to load from books or questions -->\n <ng-template #elseBlock>\n <div class=\"questiondiv1\">\n <div>\n <div *ngIf=\"!qb.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(qb?.questionText)\" *ngIf=\"qb?.questionText && qb?.style?.showLabel !== false\" >\n {{ (qb.id+'.questionText') | nxtCustomTranslate : qb?.questionText}}\n {{ qb?.title }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!-- // VD 11Jun24 - translation changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\" [labelValue]=\"labelValue\" [questionItem]=\"qb\" [questions]=\"bookQuestionsMap?.get(qb.id)?.subQuestions\" (handleDropDown)=\"getDropDown($event)\" [languageCode]=\"languageCode\"></lib-questionbook>\n </div>\n </div>\n </ng-template>\n\n <!-- RS 09DEC24 Changed keys-->\n <!-- Group Actions -->\n <!-- HA 19DEC23 For Direction -->\n <!-- AP 23MAY25 - Action Buttons: Dynamically positioned buttons with JSON-configured styles -->\n <div class=\"align-submit-row\" *ngIf=\"abItem?.status != 'Completed'\" [dir]=\"direction\"> <!-- position-relative removed in this tag-->\n <ng-container *ngFor=\"let action of actions; let i = index\">\n <div class=\"action-wrapper\"\n style=\"margin-right: 10px;\"> <!-- style=\"position: absolute; [style.left.%]=\"action.positionPercent || 0\" removed in this tag -->\n @if(!isEdit && action.name === 'Save'){\n <nxt-button\n (buttonClickEmit)=\"editChangeClick(action)\"\n [buttonValue]=\"'EDIT' | nxtCustomTranslate : 'Edit'\"\n [btnBgColor]=\"action.bgColor\"\n [btnTextColor]=\"action.textColor\"\n [btnBorder]=\"action.borderSize\"\n [btnBorderColor]=\"action.borderColor\"\n [btnBorderRadius]=\"action.borderRadius || 4\"\n [btnWidth]=\"action.width || 100\"\n [buttonType]=\"'custom-btn'\"\n [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n >\n </nxt-button>\n }\n @else {\n <nxt-button\n (buttonClickEmit)=\"handleBookletActionClick(action)\" \n [isLoading]=\"isLoading?.includes(action.id)\"\n [buttonValue]=\"(action.id+'.name') | nxtCustomTranslate : action?.name\"\n [btnBgColor]=\"action.bgColor\"\n [btnTextColor]=\"action.textColor\"\n [btnBorder]=\"action.borderSize\"\n [btnBorderColor]=\"action.borderColor\"\n [btnBorderRadius]=\"action.borderRadius || 4\"\n [btnWidth]=\"action.width || 100\"\n [buttonType]=\"'custom-btn'\"\n [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n >\n </nxt-button>\n }\n </div>\n </ng-container>\n </div>\n</div>", styles: [".align-submit-row{display:flex}.header-style{padding:15px;background:#f8f8f8;color:#898989;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0;justify-content:left;font-size:15px}.rtl{flex-direction:row-reverse}.action-btn{width:100%;height:40px;transition:all .3s ease}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind", "allIcons", "themeColor", "cdnIconURL", "direction", "languageCode"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnBorderRadius", "btnBorderColor", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode", "languageCode", "isLoading"], outputs: ["buttonClickEmit"] }] });
|
|
57457
57460
|
}
|
|
57458
57461
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: BookletComponent, decorators: [{
|
|
57459
57462
|
type: Component,
|
|
@@ -57463,7 +57466,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
|
|
|
57463
57466
|
QuestionbookComponent,
|
|
57464
57467
|
NxtCustomTranslatePipe,
|
|
57465
57468
|
NxtButtonComponent
|
|
57466
|
-
], template: "<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [dir]=\"direction\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <!-- AP-14MAY25 - Added [dataBind] input binding -->\n <!-- AP-19MAY25 - Added [isEdit] binding --> \n <!-- //MSM10JUL25 allIcons, themeColor, cdnIconURL added for icon-selector-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n
|
|
57469
|
+
], template: "<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [dir]=\"direction\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <!-- AP-14MAY25 - Added [dataBind] input binding -->\n <!-- AP-19MAY25 - Added [isEdit] binding --> \n <!-- //MSM10JUL25 allIcons, themeColor, cdnIconURL added for icon-selector-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n [direction] = \"direction\"\n [labelValue]=\"labelValue\"\n [questionItem]=\"ques\"\n [questions]=\"bookQuestionsMap?.get(qb.id)?.subQuestions\"\n (handleDropDown)=\"getDropDown($event)\"\n (handleCalendarDate)=\"getCalendarDate($event)\"\n (handleCalendarEvent)=\"getCalendarEvent($event)\"\n (singleFieldChangeEmit) ='singleFieldChange($event)'\n [dataBind]=\"dataBind\"\n [isEdit]=\"isEdit\" \n [allIcons]=\"allIcons\"\n [themeColor]=\"themeColor\"\n [cdnIconURL]=\"cdnIconURL\"\n [languageCode]=\"languageCode\"\n >\n </lib-questionbook>\n </div>\n </div>\n </div>\n <!-- HA 28DEC23 Below else logic is to load from books or questions -->\n <ng-template #elseBlock>\n <div class=\"questiondiv1\">\n <div>\n <div *ngIf=\"!qb.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing label when its available-->\n <div [innerHTML]=\"getText(qb?.questionText)\" *ngIf=\"qb?.questionText && qb?.style?.showLabel !== false\" >\n {{ (qb.id+'.questionText') | nxtCustomTranslate : qb?.questionText}}\n {{ qb?.title }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!-- // VD 11Jun24 - translation changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\" [labelValue]=\"labelValue\" [questionItem]=\"qb\" [questions]=\"bookQuestionsMap?.get(qb.id)?.subQuestions\" (handleDropDown)=\"getDropDown($event)\" [languageCode]=\"languageCode\"></lib-questionbook>\n </div>\n </div>\n </ng-template>\n\n <!-- RS 09DEC24 Changed keys-->\n <!-- Group Actions -->\n <!-- HA 19DEC23 For Direction -->\n <!-- AP 23MAY25 - Action Buttons: Dynamically positioned buttons with JSON-configured styles -->\n <div class=\"align-submit-row\" *ngIf=\"abItem?.status != 'Completed'\" [dir]=\"direction\"> <!-- position-relative removed in this tag-->\n <ng-container *ngFor=\"let action of actions; let i = index\">\n <div class=\"action-wrapper\"\n style=\"margin-right: 10px;\"> <!-- style=\"position: absolute; [style.left.%]=\"action.positionPercent || 0\" removed in this tag -->\n @if(!isEdit && action.name === 'Save'){\n <nxt-button\n (buttonClickEmit)=\"editChangeClick(action)\"\n [buttonValue]=\"'EDIT' | nxtCustomTranslate : 'Edit'\"\n [btnBgColor]=\"action.bgColor\"\n [btnTextColor]=\"action.textColor\"\n [btnBorder]=\"action.borderSize\"\n [btnBorderColor]=\"action.borderColor\"\n [btnBorderRadius]=\"action.borderRadius || 4\"\n [btnWidth]=\"action.width || 100\"\n [buttonType]=\"'custom-btn'\"\n [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n >\n </nxt-button>\n }\n @else {\n <nxt-button\n (buttonClickEmit)=\"handleBookletActionClick(action)\" \n [isLoading]=\"isLoading?.includes(action.id)\"\n [buttonValue]=\"(action.id+'.name') | nxtCustomTranslate : action?.name\"\n [btnBgColor]=\"action.bgColor\"\n [btnTextColor]=\"action.textColor\"\n [btnBorder]=\"action.borderSize\"\n [btnBorderColor]=\"action.borderColor\"\n [btnBorderRadius]=\"action.borderRadius || 4\"\n [btnWidth]=\"action.width || 100\"\n [buttonType]=\"'custom-btn'\"\n [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n >\n </nxt-button>\n }\n </div>\n </ng-container>\n </div>\n</div>", styles: [".align-submit-row{display:flex}.header-style{padding:15px;background:#f8f8f8;color:#898989;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0;justify-content:left;font-size:15px}.rtl{flex-direction:row-reverse}.action-btn{width:100%;height:40px;transition:all .3s ease}\n"] }]
|
|
57467
57470
|
}], ctorParameters: () => [{ type: SalesforceService }, { type: DataService }, { type: StorageService }, { type: i1$2.DomSanitizer }, { type: ChangeService }, { type: i1$1.HttpClient }, { type: TranslationService }], propDecorators: { bookletId: [{
|
|
57468
57471
|
type: Input
|
|
57469
57472
|
}], serv: [{
|
|
@@ -57526,7 +57529,7 @@ const VERSION = {
|
|
|
57526
57529
|
"semver": null,
|
|
57527
57530
|
"suffix": "09440148-dirty",
|
|
57528
57531
|
"semverString": null,
|
|
57529
|
-
"version": "2.1.
|
|
57532
|
+
"version": "2.1.280"
|
|
57530
57533
|
};
|
|
57531
57534
|
/* tslint:enable */
|
|
57532
57535
|
|
|
@@ -57760,11 +57763,11 @@ class FormulaInputComponent {
|
|
|
57760
57763
|
}
|
|
57761
57764
|
}
|
|
57762
57765
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FormulaInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
57763
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: FormulaInputComponent, isStandalone: true, selector: "app-formula-input", inputs: { attributes: "attributes", initialFormula: "initialFormula" }, outputs: { formulaChange: "formulaChange", formulaValidation: "formulaValidation" }, viewQueries: [{ propertyName: "formulaInputRef", first: true, predicate: ["formulaInput"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"risk-formula-builder\">\n <!--SKS16SEP25 Formula Input Area -->\n <div class=\"formula-container\">\n <div class=\"formula-input-area\" [class.has-content]=\"formulaTokens.length > 0\">\n <div class=\"formula-tokens\" #formulaDisplay (click)=\"focusInput()\">\n <div class=\"token\" \n *ngFor=\"let token of formulaTokens; let i = index\"\n [class.attribute]=\"token.type === 'attribute'\"\n [class.operation]=\"token.type === 'operation'\"\n [class.text]=\"token.type === 'text'\">\n <span class=\"token-content\">{{ token.label || token.value }}</span>\n <button class=\"token-remove\" \n (click)=\"removeToken(i)\" \n *ngIf=\"token.type === 'attribute'\">\n <span class=\"remove-icon\">\u00D7</span>\n </button>\n </div>\n <!--SKS16SEP25 Hidden input to capture numbers -->\n <input #formulaInput \n class=\"hidden-input\"\n [(ngModel)]=\"currentInput\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"commitNumber()\"\n placeholder=\"Start typing or click attributes below...\">\n </div>\n </div>\n\n <!-- SKS16SEP25 Action Buttons -->\n <div class=\"action-buttons\">\n <button class=\"btn btn-secondary\" (click)=\"resetFormula()\">Reset</button>\n <!-- <button class=\"btn btn-primary\" (click)=\"validateFormula()\" [disabled]=\"formulaTokens.length === 0\">\n VALIDATE\n </button> -->\n </div>\n </div>\n <!-- SKS16SEP25 Content Area -->\n <div class=\"content-area\">\n <!-- Attributes Section -->\n <div class=\"attributes-section\">\n <h4>Attributes <span class=\"required\">*</span></h4>\n <div class=\"attributes-list\">\n <div class=\"attribute-item\" \n *ngFor=\"let attribute of attributes\"\n (click)=\"addAttribute(attribute)\">\n <span class=\"attribute-apiName\">{{ attribute.label }}</span>\n <span class=\"attribute-type\" *ngIf=\"attribute.type\">({{ attribute.type }})</span>\n </div>\n </div>\n </div>\n\n <!-- SKS16SEP25 Operations Section -->\n <div class=\"operations-section\">\n <h4>Operation</h4>\n <div class=\"operations-grid\">\n <button class=\"operation-btn\" \n *ngFor=\"let operation of operations\"\n (click)=\"addOperation(operation)\"\n [title]=\"operation.title\">\n {{ operation.symbol }}\n </button>\n </div>\n </div>\n </div>\n\n <!-- Validation Message -->\n <div class=\"validation-message\" *ngIf=\"validationMessage\" [class.error]=\"isValidationError\">\n {{ validationMessage }}\n </div>\n </div>", styles: [".risk-formula-builder{width:100%;max-width:1200px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#fff;border-radius:8px;padding:5px;box-shadow:0 2px 8px #0000001a}.required{color:#e74c3c}.subtitle{margin:0;font-size:14px;color:#666;line-height:1.4}.formula-container{position:relative;margin-bottom:5px}.formula-input-area{border:2px solid #e1e5e9;border-radius:6px;padding:5px;background:#fff;position:relative;cursor:text;transition:border-color .2s ease}.formula-input-area:hover{border-color:#c1c7cd}.formula-input-area:focus-within{border-color:#4a90e2;box-shadow:0 0 0 3px #4a90e21a}.formula-tokens{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:24px}.token{display:inline-flex;align-items:center;border-radius:20px;padding:5px;font-size:14px;position:relative;transition:all .2s ease}.token.attribute{background-color:#f0f4f8;color:#2d3748;border:1px solid #cbd5e0;padding-right:8px}.token.operation{color:#4a5568;font-weight:600;padding:0;text-align:center;justify-content:center}.token.text{color:#4a5568;background:transparent;padding:4px 0}.token-content{display:inline-block}.token-remove{background:none;border:none;color:#a0aec0;cursor:pointer;padding:0;margin-left:6px;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.token-remove:hover{background-color:#e53e3e;color:#fff}.remove-icon{font-size:14px;line-height:1}.hidden-input{border:none;outline:none;background:transparent;font-size:14px;color:#4a5568;min-width:200px;padding:4px 0}.hidden-input::placeholder{color:#a0aec0}.btn{padding:5px;border-radius:2px;font-size:10px;font-weight:400;cursor:pointer;transition:all .2s ease;border:1px solid}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:#fff;color:#718096;border-color:#e2e8f0}.btn-secondary:hover:not(:disabled){background-color:#f7fafc;border-color:#cbd5e0}.btn-primary{background:#4a90e2;color:#fff;border-color:#4a90e2}.btn-primary:hover:not(:disabled){background:#357abd;border-color:#357abd}.content-area{display:grid;grid-template-columns:1fr 1fr;gap:5px}.attributes-section h4,.operations-section h4{margin:0 0 5px;font-size:16px;font-weight:600;color:#2d3748}.attributes-list{display:flex;flex-direction:column;gap:5px;overflow-y:auto;height:150px}.attribute-item{padding:5px;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s ease;background:#fff;display:flex;align-items:center;justify-content:space-between}.attribute-item:hover:not(.disabled){border-color:#4a90e2;box-shadow:0 2px 4px #4a90e21a;transform:translateY(-1px)}.attribute-item.disabled{opacity:.5;cursor:not-allowed;background-color:#f7fafc}.attribute-name{font-size:14px;color:#2d3748;font-weight:500}.attribute-type{font-size:12px;color:#718096}.operations-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.operation-btn{border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#2d3748;font-size:14px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.operation-btn:hover{border-color:#4a90e2;box-shadow:0 2px 4px #4a90e226;transform:translateY(-1px)}.operation-btn:active{transform:translateY(0)}.validation-message{margin-top:16px;padding:12px 16px;border-radius:6px;font-size:14px;font-weight:500;background-color:#f0fff4;color:#38a169;border:1px solid #9ae6b4}.validation-message.error{background-color:#fed7d7;color:#e53e3e;border-color:#feb2b2}.action-buttons{display:flex;justify-content:end;gap:5px;padding-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type:
|
|
57766
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: FormulaInputComponent, isStandalone: true, selector: "app-formula-input", inputs: { attributes: "attributes", initialFormula: "initialFormula" }, outputs: { formulaChange: "formulaChange", formulaValidation: "formulaValidation" }, viewQueries: [{ propertyName: "formulaInputRef", first: true, predicate: ["formulaInput"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"risk-formula-builder\">\n <!--SKS16SEP25 Formula Input Area -->\n <div class=\"formula-container\">\n <div class=\"formula-input-area\" [class.has-content]=\"formulaTokens.length > 0\">\n <div class=\"formula-tokens\" #formulaDisplay (click)=\"focusInput()\">\n <div class=\"token\" \n *ngFor=\"let token of formulaTokens; let i = index\"\n [class.attribute]=\"token.type === 'attribute'\"\n [class.operation]=\"token.type === 'operation'\"\n [class.text]=\"token.type === 'text'\">\n <span class=\"token-content\">{{ token.label || token.value }}</span>\n <button class=\"token-remove\" \n (click)=\"removeToken(i)\" \n *ngIf=\"token.type === 'attribute'\">\n <span class=\"remove-icon\">\u00D7</span>\n </button>\n </div>\n <!--SKS16SEP25 Hidden input to capture numbers -->\n <input #formulaInput \n class=\"hidden-input\"\n [(ngModel)]=\"currentInput\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"commitNumber()\"\n placeholder=\"Start typing or click attributes below...\">\n </div>\n </div>\n\n <!-- SKS16SEP25 Action Buttons -->\n <div class=\"action-buttons\">\n <button class=\"btn btn-secondary\" (click)=\"resetFormula()\">Reset</button>\n <!-- <button class=\"btn btn-primary\" (click)=\"validateFormula()\" [disabled]=\"formulaTokens.length === 0\">\n VALIDATE\n </button> -->\n </div>\n </div>\n <!-- SKS16SEP25 Content Area -->\n <div class=\"content-area\">\n <!-- Attributes Section -->\n <div class=\"attributes-section\">\n <h4>Attributes <span class=\"required\">*</span></h4>\n <div class=\"attributes-list\">\n <div class=\"attribute-item\" \n *ngFor=\"let attribute of attributes\"\n (click)=\"addAttribute(attribute)\">\n <span class=\"attribute-apiName\">{{ attribute.label }}</span>\n <span class=\"attribute-type\" *ngIf=\"attribute.type\">({{ attribute.type }})</span>\n </div>\n </div>\n </div>\n\n <!-- SKS16SEP25 Operations Section -->\n <div class=\"operations-section\">\n <h4>Operation</h4>\n <div class=\"operations-grid\">\n <button class=\"operation-btn\" \n *ngFor=\"let operation of operations\"\n (click)=\"addOperation(operation)\"\n [title]=\"operation.title\">\n {{ operation.symbol }}\n </button>\n </div>\n </div>\n </div>\n\n <!-- Validation Message -->\n <div class=\"validation-message\" *ngIf=\"validationMessage\" [class.error]=\"isValidationError\">\n {{ validationMessage }}\n </div>\n </div>", styles: [".risk-formula-builder{width:100%;max-width:1200px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#fff;border-radius:8px;padding:5px;box-shadow:0 2px 8px #0000001a}.required{color:#e74c3c}.subtitle{margin:0;font-size:14px;color:#666;line-height:1.4}.formula-container{position:relative;margin-bottom:5px}.formula-input-area{border:2px solid #e1e5e9;border-radius:6px;padding:5px;background:#fff;position:relative;cursor:text;transition:border-color .2s ease}.formula-input-area:hover{border-color:#c1c7cd}.formula-input-area:focus-within{border-color:#4a90e2;box-shadow:0 0 0 3px #4a90e21a}.formula-tokens{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:24px}.token{display:inline-flex;align-items:center;border-radius:20px;padding:5px;font-size:14px;position:relative;transition:all .2s ease}.token.attribute{background-color:#f0f4f8;color:#2d3748;border:1px solid #cbd5e0;padding-right:8px}.token.operation{color:#4a5568;font-weight:600;padding:0;text-align:center;justify-content:center}.token.text{color:#4a5568;background:transparent;padding:4px 0}.token-content{display:inline-block}.token-remove{background:none;border:none;color:#a0aec0;cursor:pointer;padding:0;margin-left:6px;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.token-remove:hover{background-color:#e53e3e;color:#fff}.remove-icon{font-size:14px;line-height:1}.hidden-input{border:none;outline:none;background:transparent;font-size:14px;color:#4a5568;min-width:200px;padding:4px 0}.hidden-input::placeholder{color:#a0aec0}.btn{padding:5px;border-radius:2px;font-size:10px;font-weight:400;cursor:pointer;transition:all .2s ease;border:1px solid}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:#fff;color:#718096;border-color:#e2e8f0}.btn-secondary:hover:not(:disabled){background-color:#f7fafc;border-color:#cbd5e0}.btn-primary{background:#4a90e2;color:#fff;border-color:#4a90e2}.btn-primary:hover:not(:disabled){background:#357abd;border-color:#357abd}.content-area{display:grid;grid-template-columns:1fr 1fr;gap:5px}.attributes-section h4,.operations-section h4{margin:0 0 5px;font-size:16px;font-weight:600;color:#2d3748}.attributes-list{display:flex;flex-direction:column;gap:5px;overflow-y:auto;height:150px}.attribute-item{padding:5px;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s ease;background:#fff;display:flex;align-items:center;justify-content:space-between}.attribute-item:hover:not(.disabled){border-color:#4a90e2;box-shadow:0 2px 4px #4a90e21a;transform:translateY(-1px)}.attribute-item.disabled{opacity:.5;cursor:not-allowed;background-color:#f7fafc}.attribute-name{font-size:14px;color:#2d3748;font-weight:500}.attribute-type{font-size:12px;color:#718096}.operations-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.operation-btn{border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#2d3748;font-size:14px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.operation-btn:hover{border-color:#4a90e2;box-shadow:0 2px 4px #4a90e226;transform:translateY(-1px)}.operation-btn:active{transform:translateY(0)}.validation-message{margin-top:16px;padding:12px 16px;border-radius:6px;font-size:14px;font-weight:500;background-color:#f0fff4;color:#38a169;border:1px solid #9ae6b4}.validation-message.error{background-color:#fed7d7;color:#e53e3e;border-color:#feb2b2}.action-buttons{display:flex;justify-content:end;gap:5px;padding-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
57764
57767
|
}
|
|
57765
57768
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FormulaInputComponent, decorators: [{
|
|
57766
57769
|
type: Component,
|
|
57767
|
-
args: [{ selector: 'app-formula-input', imports: [CommonModule,
|
|
57770
|
+
args: [{ selector: 'app-formula-input', imports: [CommonModule, FormsModule], template: "<div class=\"risk-formula-builder\">\n <!--SKS16SEP25 Formula Input Area -->\n <div class=\"formula-container\">\n <div class=\"formula-input-area\" [class.has-content]=\"formulaTokens.length > 0\">\n <div class=\"formula-tokens\" #formulaDisplay (click)=\"focusInput()\">\n <div class=\"token\" \n *ngFor=\"let token of formulaTokens; let i = index\"\n [class.attribute]=\"token.type === 'attribute'\"\n [class.operation]=\"token.type === 'operation'\"\n [class.text]=\"token.type === 'text'\">\n <span class=\"token-content\">{{ token.label || token.value }}</span>\n <button class=\"token-remove\" \n (click)=\"removeToken(i)\" \n *ngIf=\"token.type === 'attribute'\">\n <span class=\"remove-icon\">\u00D7</span>\n </button>\n </div>\n <!--SKS16SEP25 Hidden input to capture numbers -->\n <input #formulaInput \n class=\"hidden-input\"\n [(ngModel)]=\"currentInput\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"commitNumber()\"\n placeholder=\"Start typing or click attributes below...\">\n </div>\n </div>\n\n <!-- SKS16SEP25 Action Buttons -->\n <div class=\"action-buttons\">\n <button class=\"btn btn-secondary\" (click)=\"resetFormula()\">Reset</button>\n <!-- <button class=\"btn btn-primary\" (click)=\"validateFormula()\" [disabled]=\"formulaTokens.length === 0\">\n VALIDATE\n </button> -->\n </div>\n </div>\n <!-- SKS16SEP25 Content Area -->\n <div class=\"content-area\">\n <!-- Attributes Section -->\n <div class=\"attributes-section\">\n <h4>Attributes <span class=\"required\">*</span></h4>\n <div class=\"attributes-list\">\n <div class=\"attribute-item\" \n *ngFor=\"let attribute of attributes\"\n (click)=\"addAttribute(attribute)\">\n <span class=\"attribute-apiName\">{{ attribute.label }}</span>\n <span class=\"attribute-type\" *ngIf=\"attribute.type\">({{ attribute.type }})</span>\n </div>\n </div>\n </div>\n\n <!-- SKS16SEP25 Operations Section -->\n <div class=\"operations-section\">\n <h4>Operation</h4>\n <div class=\"operations-grid\">\n <button class=\"operation-btn\" \n *ngFor=\"let operation of operations\"\n (click)=\"addOperation(operation)\"\n [title]=\"operation.title\">\n {{ operation.symbol }}\n </button>\n </div>\n </div>\n </div>\n\n <!-- Validation Message -->\n <div class=\"validation-message\" *ngIf=\"validationMessage\" [class.error]=\"isValidationError\">\n {{ validationMessage }}\n </div>\n </div>", styles: [".risk-formula-builder{width:100%;max-width:1200px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#fff;border-radius:8px;padding:5px;box-shadow:0 2px 8px #0000001a}.required{color:#e74c3c}.subtitle{margin:0;font-size:14px;color:#666;line-height:1.4}.formula-container{position:relative;margin-bottom:5px}.formula-input-area{border:2px solid #e1e5e9;border-radius:6px;padding:5px;background:#fff;position:relative;cursor:text;transition:border-color .2s ease}.formula-input-area:hover{border-color:#c1c7cd}.formula-input-area:focus-within{border-color:#4a90e2;box-shadow:0 0 0 3px #4a90e21a}.formula-tokens{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:24px}.token{display:inline-flex;align-items:center;border-radius:20px;padding:5px;font-size:14px;position:relative;transition:all .2s ease}.token.attribute{background-color:#f0f4f8;color:#2d3748;border:1px solid #cbd5e0;padding-right:8px}.token.operation{color:#4a5568;font-weight:600;padding:0;text-align:center;justify-content:center}.token.text{color:#4a5568;background:transparent;padding:4px 0}.token-content{display:inline-block}.token-remove{background:none;border:none;color:#a0aec0;cursor:pointer;padding:0;margin-left:6px;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.token-remove:hover{background-color:#e53e3e;color:#fff}.remove-icon{font-size:14px;line-height:1}.hidden-input{border:none;outline:none;background:transparent;font-size:14px;color:#4a5568;min-width:200px;padding:4px 0}.hidden-input::placeholder{color:#a0aec0}.btn{padding:5px;border-radius:2px;font-size:10px;font-weight:400;cursor:pointer;transition:all .2s ease;border:1px solid}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-secondary{background:#fff;color:#718096;border-color:#e2e8f0}.btn-secondary:hover:not(:disabled){background-color:#f7fafc;border-color:#cbd5e0}.btn-primary{background:#4a90e2;color:#fff;border-color:#4a90e2}.btn-primary:hover:not(:disabled){background:#357abd;border-color:#357abd}.content-area{display:grid;grid-template-columns:1fr 1fr;gap:5px}.attributes-section h4,.operations-section h4{margin:0 0 5px;font-size:16px;font-weight:600;color:#2d3748}.attributes-list{display:flex;flex-direction:column;gap:5px;overflow-y:auto;height:150px}.attribute-item{padding:5px;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .2s ease;background:#fff;display:flex;align-items:center;justify-content:space-between}.attribute-item:hover:not(.disabled){border-color:#4a90e2;box-shadow:0 2px 4px #4a90e21a;transform:translateY(-1px)}.attribute-item.disabled{opacity:.5;cursor:not-allowed;background-color:#f7fafc}.attribute-name{font-size:14px;color:#2d3748;font-weight:500}.attribute-type{font-size:12px;color:#718096}.operations-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.operation-btn{border:1px solid #e2e8f0;border-radius:6px;background:#fff;color:#2d3748;font-size:14px;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center}.operation-btn:hover{border-color:#4a90e2;box-shadow:0 2px 4px #4a90e226;transform:translateY(-1px)}.operation-btn:active{transform:translateY(0)}.validation-message{margin-top:16px;padding:12px 16px;border-radius:6px;font-size:14px;font-weight:500;background-color:#f0fff4;color:#38a169;border:1px solid #9ae6b4}.validation-message.error{background-color:#fed7d7;color:#e53e3e;border-color:#feb2b2}.action-buttons{display:flex;justify-content:end;gap:5px;padding-top:5px}\n"] }]
|
|
57768
57771
|
}], propDecorators: { attributes: [{
|
|
57769
57772
|
type: Input
|
|
57770
57773
|
}], initialFormula: [{
|