ngx-t-forms 2.0.28 → 2.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-DqEcErNO.mjs → ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs} +6 -6
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-DqEcErNO.mjs.map → ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-ItZ2K6AS.mjs → ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-ItZ2K6AS.mjs.map → ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-cGgQrGlZ.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs} +6 -8
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-data-source-picker.component-cxjBReMg.mjs → ngx-t-forms-data-source-picker.component-Badna1Rl.mjs} +8 -9
- package/fesm2022/ngx-t-forms-data-source-picker.component-Badna1Rl.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-Dr-w1JzX.mjs → ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs} +7 -9
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-2_8XzUgD.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs +134 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-form-json-view.component-00g2e0dT.mjs → ngx-t-forms-form-json-view.component-B8seYzMQ.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-form-json-view.component-00g2e0dT.mjs.map → ngx-t-forms-form-json-view.component-B8seYzMQ.mjs.map} +1 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs +281 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-x_83iAWA.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-forms-builder-menu.component-DKybEMbx.mjs → ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs} +14 -18
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-UWo_dyVt.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-input-editor.component-otrfAVh7.mjs → ngx-t-forms-input-editor.component-B_kkOoEO.mjs} +10 -10
- package/fesm2022/ngx-t-forms-input-editor.component-B_kkOoEO.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-map-mat-options-keys-SM5XM9uy.mjs +124 -0
- package/fesm2022/ngx-t-forms-map-mat-options-keys-SM5XM9uy.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-Bj0vLXbO.mjs → ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs} +5 -6
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-C41AL9Et.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-mat-slider-editor.component-FJV0cwS2.mjs → ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs} +2 -3
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-BWe8U-sI.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-BFZ0NqQb.mjs → ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-BFZ0NqQb.mjs.map → ngx-t-forms-mat-slider-toggle-editor.component-B_XlkHuK.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-CTEQEHFc.mjs → ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs} +6 -6
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-CTEQEHFc.mjs.map → ngx-t-forms-missing-form-configs.component-DPNNyKkt.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-DS_AVAsh.mjs → ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-DS_AVAsh.mjs.map → ngx-t-forms-mscoa-chart-toolbar.component-DY1QnG08.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mscoa-error-display.component-CEO9xouF.mjs → ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-mscoa-error-display.component-CEO9xouF.mjs.map → ngx-t-forms-mscoa-error-display.component-CRc_4l3l.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-C7pdGHqP.mjs → ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs} +7 -10
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Ckr_nuZF.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-mscoa-temporary-hint.component-Ct1Mb2x-.mjs → ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-mscoa-temporary-hint.component-Ct1Mb2x-.mjs.map → ngx-t-forms-mscoa-temporary-hint.component-GYxT-56Y.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-ngx-t-forms-mfuTrkmM.mjs → ngx-t-forms-ngx-t-forms-DP2koSL5.mjs} +2153 -587
- package/fesm2022/ngx-t-forms-ngx-t-forms-DP2koSL5.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-pipeline-generator.component-CgpB8grY.mjs → ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs} +11 -35
- package/fesm2022/ngx-t-forms-pipeline-generator.component-BxHetD_Q.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-record-list-manager.component-CzZ0oofH.mjs → ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs} +5 -6
- package/fesm2022/ngx-t-forms-record-list-manager.component-BQuMkoXo.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-required-inputs.component-BKWaKqO6.mjs → ngx-t-forms-required-inputs.component-CLyq9dIR.mjs} +5 -7
- package/fesm2022/ngx-t-forms-required-inputs.component-CLyq9dIR.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-DqGJ_q5y.mjs → ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs} +7 -11
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CWeIUKLz.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-section-report.component-Z0hcYnrT.mjs → ngx-t-forms-section-report.component-BtaF39WD.mjs} +5 -5
- package/fesm2022/{ngx-t-forms-section-report.component-Z0hcYnrT.mjs.map → ngx-t-forms-section-report.component-BtaF39WD.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-selection-options-editor.component-DKfWcIYB.mjs → ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs} +7 -8
- package/fesm2022/ngx-t-forms-selection-options-editor.component-B4cEGWrK.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-t-workflow-picker.component-CUX4KlZd.mjs → ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs} +5 -5
- package/fesm2022/{ngx-t-forms-t-workflow-picker.component-CUX4KlZd.mjs.map → ngx-t-forms-t-workflow-picker.component-BkVN4Wdk.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-validators-config.component-D5lUrnLK.mjs → ngx-t-forms-validators-config.component-Cq07Er-G.mjs} +8 -10
- package/fesm2022/ngx-t-forms-validators-config.component-Cq07Er-G.mjs.map +1 -0
- package/fesm2022/ngx-t-forms.mjs +1 -1
- package/package.json +2 -2
- package/types/ngx-t-forms.d.ts +172 -7
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-cGgQrGlZ.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-data-source-picker.component-cxjBReMg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-Dr-w1JzX.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-input-selector.component-9kIiAxlg.mjs +0 -132
- package/fesm2022/ngx-t-forms-form-input-selector.component-9kIiAxlg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BaT3CcFj.mjs +0 -264
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BaT3CcFj.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-DKybEMbx.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-otrfAVh7.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-Bj0vLXbO.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-FJV0cwS2.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C7pdGHqP.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-mfuTrkmM.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-pipeline-generator.component-CgpB8grY.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-record-list-manager.component-CzZ0oofH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-required-inputs.component-BKWaKqO6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-DqGJ_q5y.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-selection-options-editor.component-DKfWcIYB.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-D5lUrnLK.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -76,7 +76,8 @@ const ngxTFormsConfig: NgxTFormsConfig = {
|
|
|
76
76
|
getScoaTree: () => of(null),
|
|
77
77
|
getSCOAAccount: (account: string) => of(null),
|
|
78
78
|
getWorkflowCols: (workflowId: string) => of([]),
|
|
79
|
-
getSelectedDocument: (docId: string) => of(null)
|
|
79
|
+
getSelectedDocument: (docId: string) => of(null),
|
|
80
|
+
getWorkflowData: (params: { workflowId: string }) => [] // Required for document picker with documentSourceType 'default'
|
|
80
81
|
}
|
|
81
82
|
};
|
|
82
83
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { EventEmitter, Input, Output, HostBinding, Optional, Self, Component } from '@angular/core';
|
|
3
3
|
import { v4 } from 'uuid';
|
|
4
|
-
import { _ as _isEqual, M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-
|
|
4
|
+
import { _ as _isEqual, M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-DP2koSL5.mjs';
|
|
5
5
|
import * as i2 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
7
|
import * as i1 from '@angular/forms';
|
|
8
8
|
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import { FormInputSelectorComponent } from './ngx-t-forms-form-input-selector.component-
|
|
9
|
+
import { FormInputSelectorComponent } from './ngx-t-forms-form-input-selector.component-DV4Sts9F.mjs';
|
|
10
10
|
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
11
11
|
import { Subject } from 'rxjs';
|
|
12
12
|
import { CalculationFunctions } from 'ngx-t-forms-types';
|
|
@@ -17,8 +17,8 @@ import * as i2$2 from '@angular/material/button';
|
|
|
17
17
|
import * as i3 from '@angular/material/card';
|
|
18
18
|
import * as i4 from '@angular/material/chips';
|
|
19
19
|
import * as i4$1 from '@angular/material/divider';
|
|
20
|
-
import * as
|
|
21
|
-
import * as
|
|
20
|
+
import * as i3$1 from '@angular/material/icon';
|
|
21
|
+
import * as i3$2 from '@angular/material/select';
|
|
22
22
|
import * as i5 from '@angular/material/toolbar';
|
|
23
23
|
import * as i13 from '@angular/material/input';
|
|
24
24
|
|
|
@@ -272,7 +272,7 @@ class CalculatedFieldRulesComponent {
|
|
|
272
272
|
return hasParent || isInTable;
|
|
273
273
|
}
|
|
274
274
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalculatedFieldRulesComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
275
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: CalculatedFieldRulesComponent, isStandalone: true, selector: "app-calculated-field-rules", inputs: { placeholder: "placeholder", required: "required", disabled: "disabled", mapToData: "mapToData", formInputs: "formInputs", errors: "errors", value: "value" }, outputs: { valueChange2dWithPath: "valueChange2dWithPath", valueChanged: "valueChanged" }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: CalculatedFieldRulesComponent }], usesOnChanges: true, ngImport: i0, template: "<br>\r\n\r\n<!-- View Mode (Summary) -->\r\n@if (!isEditing) {\r\n<div class=\"view-mode-container\"\r\n style=\"display: flex; flex-direction: column; gap: 8px;background:var(--mat-sys-surface-variant)\">\r\n\r\n @if (!!value && !mapToData?.['id'] && !tableMode) {\r\n <div class=\"tree-instructions\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>Save the input first to enable calculated field configurations</span>\r\n </div>\r\n }\r\n\r\n <div\r\n style=\"display: flex; justify-content: space-between; align-items: center; border: 1px solid var(--mat-sys-outline-variant, #ccc); border-radius: 4px; padding: 12px;\">\r\n <div style=\"display: flex; flex-direction: column; width: 100%;\">\r\n <span style=\"font-size: 0.85em; opacity: 0.7;\">Current Formula</span>\r\n <span style=\"font-weight: 500; font-size: 1.1em; width: 100%;\">\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"true\"\r\n [value]=\"getFormular\">\r\n </math-field> -->\r\n\r\n <code>\r\n <pre>\r\n {{ value?.formula || 'No formula configured' }}\r\n </pre>\r\n </code>\r\n\r\n\r\n </span>\r\n @if(value?.decimalPlaces) {\r\n <span style=\"font-size: 0.8em; margin-top: 4px; opacity: 0.7;\">\r\n Decimals: {{value?.decimalPlaces}} | Rounding: {{value?.roundingMode || 'None'}}\r\n </span>\r\n }\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button style=\"width: 100%;margin-top: 16px;\" mat-stroked-button color=\"primary\" (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit Rules\r\n</button>\r\n}\r\n\r\n<!-- Edit Mode (Editor Card) -->\r\n@else {\r\n<mat-card appearance=\"outlined\" class=\"editor-card\" style=\"padding: 16px; border-color: var(--mat-sys-primary);\">\r\n <h3 style=\"margin-top: 0; margin-bottom: 16px; color: var(--mat-sys-primary);\">\r\n <mat-icon style=\"vertical-align: middle; margin-right: 8px;\">functions</mat-icon>\r\n Edit Calculation\r\n </h3>\r\n\r\n <section>\r\n <!-- Main Formula Input -->\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Equation</mat-label>\r\n <textarea matInput [(ngModel)]=\"tempValue['formula']\" placeholder=\"Enter calculation expression\"\r\n rows=\"3\"></textarea>\r\n <mat-hint>example: ((a+2)/(b-1))*2</mat-hint>\r\n </mat-form-field>\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"false\"\r\n [value]=\"getFormular\" \r\n [smartMode]=\"true\"\r\n (input)=\"onInput(mathfield.value)\">\r\n </math-field> -->\r\n <!-- Optional Source Link -->\r\n @if (!!tempValue?.getFormulaFromAFormInput) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\"\r\n style=\"margin-bottom: 8px; margin-top: 12px; width: 100%;\" appearance=\"outline\">\r\n <mat-label>Equation Source</mat-label>\r\n <mat-select matNativeControl [value]=\"tempValue.formControlWithFormula\"\r\n (selectionChange)=\"linkFormulaSource($event)\" placeholder=\"select Input with formula\">\r\n @for (input of formInputs; track input.id) {\r\n <mat-option [disabled]=\"checkIfInputCanBeLinkedToCalVariable(mapToData, input) || input.element !== 'select'\"\r\n [value]=\"input.formControlName\">\r\n {{input.label}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>Link formula to an input value</mat-hint>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- Variable Chips List -->\r\n <div style=\"margin-top: 12px; margin-bottom: 12px;\">\r\n <label style=\"font-size: 0.9em; opacity: 0.8; display: block; margin-bottom: 8px;\">Variables</label>\r\n <mat-chip-listbox aria-label=\"options\">\r\n @for (variable of (tempValue['variables'] || []); track variable.id) {\r\n <mat-chip (click)=\"appendVariableToFormula(variable.variable)\" (removed)=\"removeVariable(variable.id!)\">\r\n <div [style.color]=\"variable.tableCell ? 'var(--ion-color-purple)' : ''\" style=\"font-size: 0.8125em\">\r\n {{ variable.variable }} - {{ variable.label }}\r\n @if (variable.function) {\r\n <span style=\"opacity: 0.6; padding-left: 5px\">{{ variable.function }}</span>\r\n }\r\n </div>\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n\r\n <!-- Add/Close Variable Button -->\r\n <mat-chip highlighted=\"true\" [color]=\"showVariableConfig ? 'warn' : 'accent'\" (click)=\"toggleVariableConfig()\">\r\n <span>{{ showVariableConfig ? 'Close Variable Edit' : 'Add a new Variable' }}</span>\r\n <mat-icon matChipTrailingIcon>{{ showVariableConfig ? 'close' : 'add' }}</mat-icon>\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n </div>\r\n\r\n <!-- Variable Configuration Panel -->\r\n @if (showVariableConfig) {\r\n @defer (on immediate) {\r\n <ng-container *ngTemplateOutlet=\"variableConfigurationTpl\"></ng-container>\r\n }\r\n }\r\n\r\n <mat-divider style=\"margin: 16px 0;\"></mat-divider>\r\n\r\n <!-- Rounding Settings -->\r\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap;\">\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"flex: 1; min-width: 150px;\">\r\n <mat-label>Decimal Places</mat-label>\r\n <input matInput [(ngModel)]=\"tempValue['decimalPlaces']\" placeholder=\"0\" type=\"number\" min=\"0\">\r\n </mat-form-field>\r\n\r\n @if (tempValue['decimalPlaces']) {\r\n <div style=\"flex: 2;\">\r\n <label style=\"font-size: 0.85em; opacity: 0.8;\">Rounding Mode</label>\r\n <mat-chip-listbox aria-label=\"Rounding types\" style=\"margin-top: 4px;\">\r\n @for (type of roundingType; track type.value) {\r\n <mat-chip-option (click)=\"tempValue['roundingMode'] = type.value\"\r\n [selected]=\"tempValue['roundingMode'] === type.value\">\r\n {{type.label}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- Card Actions (Save/Cancel) -->\r\n <div style=\"display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px;\">\r\n <button mat-button (click)=\"cancelEdit()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveEdit()\">Save Changes</button>\r\n </div>\r\n</mat-card>\r\n}\r\n\r\n<!-- Variable Configuration Template -->\r\n<ng-template #variableConfigurationTpl>\r\n <div\r\n style=\"background: var(--mat-sys-surface-variant, #f5f5f5); border-radius: 8px; padding: 12px; margin-top: 8px; border: 1px dashed #ccc;\">\r\n <div class=\"tree-instructions\" style=\"background: azure; margin-bottom: 12px;\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>\r\n <strong>Configure variable</strong><br>\r\n Link a form input to a variable to use in the equation\r\n </span>\r\n </div>\r\n\r\n <!-- Input Selector -->\r\n <lib-form-input-selector [disabled]=\"!!activeVariable.formControlName\" [formInputs]=\"cachedNumberInputs\"\r\n [value]=\"activeVariable.inputId\" (click)=\"$event.stopPropagation()\" (change)=\"bindInput($event)\">\r\n </lib-form-input-selector>\r\n\r\n @if (activeVariable.formControlName) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"width: 100%; margin-top: 12px;\">\r\n <mat-label>Variable Name</mat-label>\r\n <textarea matInput (click)=\"$event.stopPropagation()\" [(ngModel)]=\"activeVariable.variable\"\r\n placeholder=\"enter variable\" rows=\"1\"></textarea>\r\n <mat-hint>A variable is an alphabet or term that represents a form input in the equation.</mat-hint>\r\n </mat-form-field>\r\n\r\n @if (activeVariable.parentInputId) {\r\n <br>\r\n <mat-label><small>list function ( \u0192 )</small></mat-label>\r\n <mat-chip-listbox class=\"mat-mdc-chip-set-stacked\" aria-label=\"Calculation function\">\r\n @for (func of allCalculationFunction; track func) {\r\n <mat-chip-option (click)=\"attachFunction($event, func)\" [selected]=\"activeVariable.function === func\">\r\n {{func}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n\r\n <!-- Actions -->\r\n <mat-toolbar style=\"background: transparent; padding: 0; margin-top: 12px;\" lines=\"none\">\r\n <span class=\"spacer\"></span>\r\n <button mat-button (click)=\"cancelVariableConfig()\">Cancel</button>\r\n <button mat-flat-button color=\"primary\" [disabled]=\"!activeVariable.formControlName || !activeVariable.variable\"\r\n (click)=\"saveNewVariable()\">\r\n Add Variable\r\n </button>\r\n </mat-toolbar>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay for disabled state -->\r\n<ng-template cdkConnectedOverlay [cdkConnectedOverlayOpen]=\"disabled\">\r\n <div\r\n style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 10;\">\r\n </div>\r\n</ng-template>", styles: [".labelM{font-size:.8125em}.tree-instructions{display:flex;align-items:center;gap:8px;padding:12px;background:azure;border-radius:4px;margin-bottom:16px}.info-icon{min-width:38px;margin:8px auto auto}mat-form-field{width:100%;background:azure}.endIcons{height:100%;display:flex!important;align-items:center!important;justify-content:center}mat-chip{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: MatModulesModule }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i4.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i4.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "component", type: i4$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i2$4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i10.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormInputSelectorComponent, selector: "lib-form-input-selector", inputs: ["errors", "value", "formInputs", "disabled"], outputs: ["change"] }, { kind: "ngmodule", type: OverlayModule }], deferBlockDependencies: [() => [i2.NgTemplateOutlet]] }); }
|
|
275
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: CalculatedFieldRulesComponent, isStandalone: true, selector: "app-calculated-field-rules", inputs: { placeholder: "placeholder", required: "required", disabled: "disabled", mapToData: "mapToData", formInputs: "formInputs", errors: "errors", value: "value" }, outputs: { valueChange2dWithPath: "valueChange2dWithPath", valueChanged: "valueChanged" }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: CalculatedFieldRulesComponent }], usesOnChanges: true, ngImport: i0, template: "<br>\r\n\r\n<!-- View Mode (Summary) -->\r\n@if (!isEditing) {\r\n<div class=\"view-mode-container\"\r\n style=\"display: flex; flex-direction: column; gap: 8px;background:var(--mat-sys-surface-variant)\">\r\n\r\n @if (!!value && !mapToData?.['id'] && !tableMode) {\r\n <div class=\"tree-instructions\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>Save the input first to enable calculated field configurations</span>\r\n </div>\r\n }\r\n\r\n <div\r\n style=\"display: flex; justify-content: space-between; align-items: center; border: 1px solid var(--mat-sys-outline-variant, #ccc); border-radius: 4px; padding: 12px;\">\r\n <div style=\"display: flex; flex-direction: column; width: 100%;\">\r\n <span style=\"font-size: 0.85em; opacity: 0.7;\">Current Formula</span>\r\n <span style=\"font-weight: 500; font-size: 1.1em; width: 100%;\">\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"true\"\r\n [value]=\"getFormular\">\r\n </math-field> -->\r\n\r\n <code>\r\n <pre>\r\n {{ value?.formula || 'No formula configured' }}\r\n </pre>\r\n </code>\r\n\r\n\r\n </span>\r\n @if(value?.decimalPlaces) {\r\n <span style=\"font-size: 0.8em; margin-top: 4px; opacity: 0.7;\">\r\n Decimals: {{value?.decimalPlaces}} | Rounding: {{value?.roundingMode || 'None'}}\r\n </span>\r\n }\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button style=\"width: 100%;margin-top: 16px;\" mat-stroked-button color=\"primary\" (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit Rules\r\n</button>\r\n}\r\n\r\n<!-- Edit Mode (Editor Card) -->\r\n@else {\r\n<mat-card appearance=\"outlined\" class=\"editor-card\" style=\"padding: 16px; border-color: var(--mat-sys-primary);\">\r\n <h3 style=\"margin-top: 0; margin-bottom: 16px; color: var(--mat-sys-primary);\">\r\n <mat-icon style=\"vertical-align: middle; margin-right: 8px;\">functions</mat-icon>\r\n Edit Calculation\r\n </h3>\r\n\r\n <section>\r\n <!-- Main Formula Input -->\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Equation</mat-label>\r\n <textarea matInput [(ngModel)]=\"tempValue['formula']\" placeholder=\"Enter calculation expression\"\r\n rows=\"3\"></textarea>\r\n <mat-hint>example: ((a+2)/(b-1))*2</mat-hint>\r\n </mat-form-field>\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"false\"\r\n [value]=\"getFormular\" \r\n [smartMode]=\"true\"\r\n (input)=\"onInput(mathfield.value)\">\r\n </math-field> -->\r\n <!-- Optional Source Link -->\r\n @if (!!tempValue?.getFormulaFromAFormInput) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\"\r\n style=\"margin-bottom: 8px; margin-top: 12px; width: 100%;\" appearance=\"outline\">\r\n <mat-label>Equation Source</mat-label>\r\n <mat-select matNativeControl [value]=\"tempValue.formControlWithFormula\"\r\n (selectionChange)=\"linkFormulaSource($event)\" placeholder=\"select Input with formula\">\r\n @for (input of formInputs; track input.id) {\r\n <mat-option [disabled]=\"checkIfInputCanBeLinkedToCalVariable(mapToData, input) || input.element !== 'select'\"\r\n [value]=\"input.formControlName\">\r\n {{input.label}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>Link formula to an input value</mat-hint>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- Variable Chips List -->\r\n <div style=\"margin-top: 12px; margin-bottom: 12px;\">\r\n <label style=\"font-size: 0.9em; opacity: 0.8; display: block; margin-bottom: 8px;\">Variables</label>\r\n <mat-chip-listbox aria-label=\"options\">\r\n @for (variable of (tempValue['variables'] || []); track variable.id) {\r\n <mat-chip (click)=\"appendVariableToFormula(variable.variable)\" (removed)=\"removeVariable(variable.id!)\">\r\n <div [style.color]=\"variable.tableCell ? 'var(--ion-color-purple)' : ''\" style=\"font-size: 0.8125em\">\r\n {{ variable.variable }} - {{ variable.label }}\r\n @if (variable.function) {\r\n <span style=\"opacity: 0.6; padding-left: 5px\">{{ variable.function }}</span>\r\n }\r\n </div>\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n\r\n <!-- Add/Close Variable Button -->\r\n <mat-chip highlighted=\"true\" [color]=\"showVariableConfig ? 'warn' : 'accent'\" (click)=\"toggleVariableConfig()\">\r\n <span>{{ showVariableConfig ? 'Close Variable Edit' : 'Add a new Variable' }}</span>\r\n <mat-icon matChipTrailingIcon>{{ showVariableConfig ? 'close' : 'add' }}</mat-icon>\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n </div>\r\n\r\n <!-- Variable Configuration Panel -->\r\n @if (showVariableConfig) {\r\n @defer (on immediate) {\r\n <ng-container *ngTemplateOutlet=\"variableConfigurationTpl\"></ng-container>\r\n }\r\n }\r\n\r\n <mat-divider style=\"margin: 16px 0;\"></mat-divider>\r\n\r\n <!-- Rounding Settings -->\r\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap;\">\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"flex: 1; min-width: 150px;\">\r\n <mat-label>Decimal Places</mat-label>\r\n <input matInput [(ngModel)]=\"tempValue['decimalPlaces']\" placeholder=\"0\" type=\"number\" min=\"0\">\r\n </mat-form-field>\r\n\r\n @if (tempValue['decimalPlaces']) {\r\n <div style=\"flex: 2;\">\r\n <label style=\"font-size: 0.85em; opacity: 0.8;\">Rounding Mode</label>\r\n <mat-chip-listbox aria-label=\"Rounding types\" style=\"margin-top: 4px;\">\r\n @for (type of roundingType; track type.value) {\r\n <mat-chip-option (click)=\"tempValue['roundingMode'] = type.value\"\r\n [selected]=\"tempValue['roundingMode'] === type.value\">\r\n {{type.label}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- Card Actions (Save/Cancel) -->\r\n <div style=\"display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px;\">\r\n <button mat-button (click)=\"cancelEdit()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveEdit()\">Save Changes</button>\r\n </div>\r\n</mat-card>\r\n}\r\n\r\n<!-- Variable Configuration Template -->\r\n<ng-template #variableConfigurationTpl>\r\n <div\r\n style=\"background: var(--mat-sys-surface-variant, #f5f5f5); border-radius: 8px; padding: 12px; margin-top: 8px; border: 1px dashed #ccc;\">\r\n <div class=\"tree-instructions\" style=\"background: azure; margin-bottom: 12px;\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>\r\n <strong>Configure variable</strong><br>\r\n Link a form input to a variable to use in the equation\r\n </span>\r\n </div>\r\n\r\n <!-- Input Selector -->\r\n <lib-form-input-selector [disabled]=\"!!activeVariable.formControlName\" [formInputs]=\"cachedNumberInputs\"\r\n [value]=\"activeVariable.inputId\" (click)=\"$event.stopPropagation()\" (change)=\"bindInput($event)\">\r\n </lib-form-input-selector>\r\n\r\n @if (activeVariable.formControlName) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"width: 100%; margin-top: 12px;\">\r\n <mat-label>Variable Name</mat-label>\r\n <textarea matInput (click)=\"$event.stopPropagation()\" [(ngModel)]=\"activeVariable.variable\"\r\n placeholder=\"enter variable\" rows=\"1\"></textarea>\r\n <mat-hint>A variable is an alphabet or term that represents a form input in the equation.</mat-hint>\r\n </mat-form-field>\r\n\r\n @if (activeVariable.parentInputId) {\r\n <br>\r\n <mat-label><small>list function ( \u0192 )</small></mat-label>\r\n <mat-chip-listbox class=\"mat-mdc-chip-set-stacked\" aria-label=\"Calculation function\">\r\n @for (func of allCalculationFunction; track func) {\r\n <mat-chip-option (click)=\"attachFunction($event, func)\" [selected]=\"activeVariable.function === func\">\r\n {{func}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n\r\n <!-- Actions -->\r\n <mat-toolbar style=\"background: transparent; padding: 0; margin-top: 12px;\" lines=\"none\">\r\n <span class=\"spacer\"></span>\r\n <button mat-button (click)=\"cancelVariableConfig()\">Cancel</button>\r\n <button mat-flat-button color=\"primary\" [disabled]=\"!activeVariable.formControlName || !activeVariable.variable\"\r\n (click)=\"saveNewVariable()\">\r\n Add Variable\r\n </button>\r\n </mat-toolbar>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay for disabled state -->\r\n<ng-template cdkConnectedOverlay [cdkConnectedOverlayOpen]=\"disabled\">\r\n <div\r\n style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 10;\">\r\n </div>\r\n</ng-template>", styles: [".labelM{font-size:.8125em}.tree-instructions{display:flex;align-items:center;gap:8px;padding:12px;background:azure;border-radius:4px;margin-bottom:16px}.info-icon{min-width:38px;margin:8px auto auto}mat-form-field{width:100%;background:azure}.endIcons{height:100%;display:flex!important;align-items:center!important;justify-content:center}mat-chip{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: MatModulesModule }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i4.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i4.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i4.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i4.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "component", type: i4$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i3$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i10.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FormInputSelectorComponent, selector: "lib-form-input-selector", inputs: ["errors", "value", "formInputs", "disabled"], outputs: ["change"] }, { kind: "ngmodule", type: OverlayModule }], deferBlockDependencies: [() => [i2.NgTemplateOutlet]] }); }
|
|
276
276
|
}
|
|
277
277
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: CalculatedFieldRulesComponent, decorators: [{
|
|
278
278
|
type: Component,
|
|
@@ -310,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
310
310
|
}] } });
|
|
311
311
|
|
|
312
312
|
export { CalculatedFieldRulesComponent };
|
|
313
|
-
//# sourceMappingURL=ngx-t-forms-calculated-field-rules.component-
|
|
313
|
+
//# sourceMappingURL=ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-t-forms-calculated-field-rules.component-DqEcErNO.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/calculated-field-rules/calculated-field-rules.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/calculated-field-rules/calculated-field-rules.component.html"],"sourcesContent":["import {\r\n\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n\r\n OnChanges,\r\n\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n Self,\r\n// CUSTOM_ELEMENTS_SCHEMA,\r\n SimpleChanges,\r\n\r\n\r\n} from '@angular/core';\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalculatedFieldRules, TableConfigurationsInterface } from 'ngx-t-forms-types';\r\n\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { FormsModule, NgControl } from '@angular/forms';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { FormInputSelectorComponent } from '../form-input-selector/form-input-selector.component';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { CalculationFunctions, calculationVariableInterface } from \"ngx-t-forms-types\"\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { _isEqual } from '../../../../shared/functions/isEqual';\r\n// import 'mathlive';\r\n// Define the interface for the Mathfield element to avoid TS errors\r\n// declare global {\r\n// interface HTMLElementTagNameMap {\r\n// 'math-field': MathfieldElement;\r\n// }\r\n// }\r\n\r\n\r\n// import { MathfieldElement } from 'mathlive';\r\n// import { cleanLatexForMathJS, cleanMathJSForLatex } from '../../../../services/core/t-form-tower-controller/functions/lateToMathjs';\r\n@Component({\r\n selector: 'app-calculated-field-rules',\r\n templateUrl: './calculated-field-rules.component.html',\r\n styleUrls: ['./calculated-field-rules.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatModulesModule,\r\n CommonModule,\r\n FormsModule,\r\n FormInputSelectorComponent,\r\n OverlayModule\r\n ],\r\n // schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n providers: [{ provide: MatFormFieldControl, useExisting: CalculatedFieldRulesComponent }],\r\n})\r\nexport class CalculatedFieldRulesComponent implements OnInit, OnChanges, OnDestroy,\r\n MatFormFieldControl<CalculatedFieldRules | undefined> {\r\n static nextId = 0;\r\n\r\n // #region MatFormFieldControl Properties\r\n @HostBinding() id = `app-calculated-field-rules-${CalculatedFieldRulesComponent.nextId++}`;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n touched = false;\r\n controlType = 'app-calculated-field-rules';\r\n\r\n @Input() placeholder: string = '';\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n\r\n // #endregion\r\n\r\n // #region Component Inputs/Outputs\r\n @Input() mapToData: FormColumnInputs | undefined = undefined;\r\n @Input() formInputs: Array<FormColumnInputs> = [];\r\n @Input() errors: IConfigElementError[] | undefined = [];\r\n\r\n @Output() valueChange2dWithPath = new EventEmitter<any>();\r\n @Output() valueChanged = new EventEmitter<CalculatedFieldRules | null>();\r\n // #endregion\r\n\r\n // Internal State\r\n protected _value: CalculatedFieldRules | undefined;\r\n\r\n // Edit Mode State\r\n isEditing = false;\r\n tempValue: CalculatedFieldRules = {} as CalculatedFieldRules; // Local state for editing\r\n\r\n // Cache for performance (calculated in ngOnChanges)\r\n cachedNumberInputs: FormColumnInputs[] = [];\r\n\r\n // Variable config state\r\n activeVariable: Partial<calculationVariableInterface & { inputId?: string, parentInputId?: string }> = {};\r\n showVariableConfig = false;\r\n\r\n roundingType: {\r\n value: any;\r\n label: string;\r\n }[] = [\r\n { value: 'FLOOR', label: 'Round Down (FLOOR)' },\r\n { value: 'CEIL', label: 'Round Up (CEIL)' },\r\n { value: 'ROUND', label: 'Standard Rounding (ROUND)' },\r\n ];\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private _elementRef: ElementRef<HTMLElement>\r\n ) {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['formInputs']) {\r\n this.cachedNumberInputs = this.formInputs?.filter(\r\n (input) => input.dataType === 'number' || input.type === 'number'\r\n ) || [];\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n // #region Value Accessor & MatFormFieldControl Logic\r\n\r\n @Input()\r\n get value(): CalculatedFieldRules | undefined {\r\n return this._value;\r\n }\r\n\r\n set value(val: CalculatedFieldRules | undefined) {\r\n if (_isEqual(this._value, val)) return;\r\n this._value = val ? { \r\n \r\n ...val \r\n \r\n } : undefined;\r\n this.stateChanges.next();\r\n this.valueChanged.emit(this._value);\r\n this.onChange(this._value);\r\n }\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get errorState(): boolean {\r\n const hasCustomError = (this.errors || []).length > 0;\r\n const hasControlError = !!this.ngControl?.control?.errors;\r\n return (\r\n (this.touched && (hasControlError || hasCustomError)) ||\r\n (!!this.required && !this.value)\r\n );\r\n }\r\n\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n\r\n writeValue(value: CalculatedFieldRules): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n if (this._elementRef?.nativeElement) {\r\n const controlElement = this._elementRef.nativeElement.querySelector(\r\n '.app-calculated-field-rules'\r\n );\r\n if (controlElement) {\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n this.markAsTouched();\r\n }\r\n\r\n markAsTouched() {\r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Edit Mode Logic\r\n\r\n startEdit() {\r\n // Clone the current value into tempValue to prevent immediate emission\r\n this.tempValue = this.value\r\n ? JSON.parse(JSON.stringify(this.value))\r\n : {} as CalculatedFieldRules;\r\n this.isEditing = true;\r\n this.markAsTouched();\r\n }\r\n\r\n saveEdit() {\r\n // Commit tempValue to actual value\r\n this.value = this.tempValue;\r\n this.isEditing = false;\r\n }\r\n\r\n cancelEdit() {\r\n // Discard changes\r\n this.isEditing = false;\r\n this.tempValue = {} as CalculatedFieldRules;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Getters\r\n\r\n get allCalculationFunction() {\r\n return Object.values(CalculationFunctions);\r\n }\r\n\r\n get tableMode(): boolean {\r\n return !!this.mapToData?.tableConfig;\r\n }\r\n\r\n get tableConfig(): TableConfigurationsInterface | undefined {\r\n return this.mapToData?.tableConfig;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Logic (Refactored to use tempValue)\r\n\r\n checkIfInputCanBeLinkedToCalVariable(\r\n currentInput: FormColumnInputs | undefined,\r\n inputToDisable: { formControlName: any; parentInput?: any; multipleInputInEditId?: any }\r\n ): boolean {\r\n if (!currentInput) return false;\r\n\r\n if (currentInput.formControlName === inputToDisable.formControlName) {\r\n return true;\r\n }\r\n\r\n if (!currentInput.multipleInputInEditId) {\r\n return !!inputToDisable.parentInput || !!inputToDisable.multipleInputInEditId;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n linkFormulaSource(event: MatSelectChange) {\r\n this.tempValue = {\r\n ...this.tempValue,\r\n formControlWithFormula: event.value,\r\n formula: undefined as any // Reset formula when source changes\r\n };\r\n }\r\n\r\n removeVariable(variableId: string) {\r\n if (!this.tempValue?.variables) return;\r\n\r\n this.tempValue = {\r\n ...this.tempValue,\r\n variables: this.tempValue.variables.filter(v => v.id !== variableId)\r\n };\r\n }\r\n\r\n appendVariableToFormula(variableName: string) {\r\n const currentFormula = this.tempValue?.formula || '';\r\n this.tempValue = {\r\n ...this.tempValue,\r\n formula: `${currentFormula} ${variableName}`\r\n } as CalculatedFieldRules;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Variable Configuration\r\n\r\n toggleVariableConfig() {\r\n this.showVariableConfig = !this.showVariableConfig;\r\n if (!this.showVariableConfig) {\r\n this.activeVariable = {};\r\n }\r\n }\r\n\r\n bindInput(inputId: string) {\r\n const input = this.formInputs?.find((i) => i.id === inputId);\r\n if (!input) return;\r\n\r\n if (this.activeVariable.formControlName === input.formControlName) {\r\n return;\r\n }\r\n\r\n this.activeVariable = {\r\n ...this.activeVariable,\r\n formControlName: input.formControlName,\r\n label: input.label,\r\n inputId: input.id,\r\n parentInputId: input.multipleInputInEditId\r\n };\r\n }\r\n\r\n attachFunction(event: Event, funcValue: any) {\r\n event.stopPropagation();\r\n\r\n if (this.activeVariable.function === funcValue) {\r\n this.activeVariable.function = undefined;\r\n this.activeVariable.applyFunctionToCol = undefined;\r\n this.activeVariable.applyFunctionToLabel = undefined;\r\n } else {\r\n this.activeVariable.function = funcValue;\r\n this.activeVariable.applyFunctionToCol = this.activeVariable.formControlName;\r\n this.activeVariable.applyFunctionToLabel = this.activeVariable.label;\r\n }\r\n }\r\n\r\n cancelVariableConfig() {\r\n this.activeVariable = {};\r\n this.showVariableConfig = false;\r\n }\r\n\r\n saveNewVariable() {\r\n const currentVariables = this.tempValue?.variables || [];\r\n\r\n const newVar: calculationVariableInterface = {\r\n ...this.activeVariable,\r\n id: uuidv4(),\r\n variable: this.activeVariable.variable || '',\r\n } as calculationVariableInterface;\r\n\r\n if (this.inputIsInItemList(newVar)) {\r\n const input = this.formInputs?.find(\r\n (i) => i.formControlName === newVar.formControlName\r\n );\r\n if (input?.multipleInputInEditId) {\r\n (newVar as any)['parentInputId'] = input.multipleInputInEditId;\r\n }\r\n }\r\n\r\n this.tempValue = {\r\n ...this.tempValue,\r\n variables: [...currentVariables, newVar],\r\n formula: this.tempValue.formula || ''\r\n };\r\n\r\n this.activeVariable = {};\r\n this.showVariableConfig = false;\r\n }\r\n\r\n private inputIsInItemList(v: Partial<calculationVariableInterface>): boolean {\r\n const input = this.formInputs?.find(\r\n (i) => i.formControlName === v.formControlName\r\n );\r\n const hasParent = input ? !!input.multipleInputInEditId : false;\r\n const isInTable = (v as any).tableCell;\r\n return hasParent || isInTable;\r\n }\r\n\r\n // #endregion\r\n\r\n\r\n // #region Mathlive setup\r\n // onInput(event: string) {\r\n // // The event target is the <math-field> element\r\n \r\n \r\n // this.tempValue = {\r\n // ...this.tempValue,\r\n // formula:cleanLatexForMathJS(event)\r\n // }\r\n\r\n // // Update the local state with the new LaTeX value\r\n \r\n // }\r\n // get getFormular(){\r\n // return cleanMathJSForLatex(this.value?.formula||'')\r\n // }\r\n // #endregion\r\n}","<br>\r\n\r\n<!-- View Mode (Summary) -->\r\n@if (!isEditing) {\r\n<div class=\"view-mode-container\"\r\n style=\"display: flex; flex-direction: column; gap: 8px;background:var(--mat-sys-surface-variant)\">\r\n\r\n @if (!!value && !mapToData?.['id'] && !tableMode) {\r\n <div class=\"tree-instructions\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>Save the input first to enable calculated field configurations</span>\r\n </div>\r\n }\r\n\r\n <div\r\n style=\"display: flex; justify-content: space-between; align-items: center; border: 1px solid var(--mat-sys-outline-variant, #ccc); border-radius: 4px; padding: 12px;\">\r\n <div style=\"display: flex; flex-direction: column; width: 100%;\">\r\n <span style=\"font-size: 0.85em; opacity: 0.7;\">Current Formula</span>\r\n <span style=\"font-weight: 500; font-size: 1.1em; width: 100%;\">\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"true\"\r\n [value]=\"getFormular\">\r\n </math-field> -->\r\n\r\n <code>\r\n <pre>\r\n {{ value?.formula || 'No formula configured' }}\r\n </pre>\r\n </code>\r\n\r\n\r\n </span>\r\n @if(value?.decimalPlaces) {\r\n <span style=\"font-size: 0.8em; margin-top: 4px; opacity: 0.7;\">\r\n Decimals: {{value?.decimalPlaces}} | Rounding: {{value?.roundingMode || 'None'}}\r\n </span>\r\n }\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button style=\"width: 100%;margin-top: 16px;\" mat-stroked-button color=\"primary\" (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit Rules\r\n</button>\r\n}\r\n\r\n<!-- Edit Mode (Editor Card) -->\r\n@else {\r\n<mat-card appearance=\"outlined\" class=\"editor-card\" style=\"padding: 16px; border-color: var(--mat-sys-primary);\">\r\n <h3 style=\"margin-top: 0; margin-bottom: 16px; color: var(--mat-sys-primary);\">\r\n <mat-icon style=\"vertical-align: middle; margin-right: 8px;\">functions</mat-icon>\r\n Edit Calculation\r\n </h3>\r\n\r\n <section>\r\n <!-- Main Formula Input -->\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Equation</mat-label>\r\n <textarea matInput [(ngModel)]=\"tempValue['formula']\" placeholder=\"Enter calculation expression\"\r\n rows=\"3\"></textarea>\r\n <mat-hint>example: ((a+2)/(b-1))*2</mat-hint>\r\n </mat-form-field>\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"false\"\r\n [value]=\"getFormular\" \r\n [smartMode]=\"true\"\r\n (input)=\"onInput(mathfield.value)\">\r\n </math-field> -->\r\n <!-- Optional Source Link -->\r\n @if (!!tempValue?.getFormulaFromAFormInput) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\"\r\n style=\"margin-bottom: 8px; margin-top: 12px; width: 100%;\" appearance=\"outline\">\r\n <mat-label>Equation Source</mat-label>\r\n <mat-select matNativeControl [value]=\"tempValue.formControlWithFormula\"\r\n (selectionChange)=\"linkFormulaSource($event)\" placeholder=\"select Input with formula\">\r\n @for (input of formInputs; track input.id) {\r\n <mat-option [disabled]=\"checkIfInputCanBeLinkedToCalVariable(mapToData, input) || input.element !== 'select'\"\r\n [value]=\"input.formControlName\">\r\n {{input.label}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>Link formula to an input value</mat-hint>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- Variable Chips List -->\r\n <div style=\"margin-top: 12px; margin-bottom: 12px;\">\r\n <label style=\"font-size: 0.9em; opacity: 0.8; display: block; margin-bottom: 8px;\">Variables</label>\r\n <mat-chip-listbox aria-label=\"options\">\r\n @for (variable of (tempValue['variables'] || []); track variable.id) {\r\n <mat-chip (click)=\"appendVariableToFormula(variable.variable)\" (removed)=\"removeVariable(variable.id!)\">\r\n <div [style.color]=\"variable.tableCell ? 'var(--ion-color-purple)' : ''\" style=\"font-size: 0.8125em\">\r\n {{ variable.variable }} - {{ variable.label }}\r\n @if (variable.function) {\r\n <span style=\"opacity: 0.6; padding-left: 5px\">{{ variable.function }}</span>\r\n }\r\n </div>\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n\r\n <!-- Add/Close Variable Button -->\r\n <mat-chip highlighted=\"true\" [color]=\"showVariableConfig ? 'warn' : 'accent'\" (click)=\"toggleVariableConfig()\">\r\n <span>{{ showVariableConfig ? 'Close Variable Edit' : 'Add a new Variable' }}</span>\r\n <mat-icon matChipTrailingIcon>{{ showVariableConfig ? 'close' : 'add' }}</mat-icon>\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n </div>\r\n\r\n <!-- Variable Configuration Panel -->\r\n @if (showVariableConfig) {\r\n @defer (on immediate) {\r\n <ng-container *ngTemplateOutlet=\"variableConfigurationTpl\"></ng-container>\r\n }\r\n }\r\n\r\n <mat-divider style=\"margin: 16px 0;\"></mat-divider>\r\n\r\n <!-- Rounding Settings -->\r\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap;\">\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"flex: 1; min-width: 150px;\">\r\n <mat-label>Decimal Places</mat-label>\r\n <input matInput [(ngModel)]=\"tempValue['decimalPlaces']\" placeholder=\"0\" type=\"number\" min=\"0\">\r\n </mat-form-field>\r\n\r\n @if (tempValue['decimalPlaces']) {\r\n <div style=\"flex: 2;\">\r\n <label style=\"font-size: 0.85em; opacity: 0.8;\">Rounding Mode</label>\r\n <mat-chip-listbox aria-label=\"Rounding types\" style=\"margin-top: 4px;\">\r\n @for (type of roundingType; track type.value) {\r\n <mat-chip-option (click)=\"tempValue['roundingMode'] = type.value\"\r\n [selected]=\"tempValue['roundingMode'] === type.value\">\r\n {{type.label}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- Card Actions (Save/Cancel) -->\r\n <div style=\"display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px;\">\r\n <button mat-button (click)=\"cancelEdit()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveEdit()\">Save Changes</button>\r\n </div>\r\n</mat-card>\r\n}\r\n\r\n<!-- Variable Configuration Template -->\r\n<ng-template #variableConfigurationTpl>\r\n <div\r\n style=\"background: var(--mat-sys-surface-variant, #f5f5f5); border-radius: 8px; padding: 12px; margin-top: 8px; border: 1px dashed #ccc;\">\r\n <div class=\"tree-instructions\" style=\"background: azure; margin-bottom: 12px;\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>\r\n <strong>Configure variable</strong><br>\r\n Link a form input to a variable to use in the equation\r\n </span>\r\n </div>\r\n\r\n <!-- Input Selector -->\r\n <lib-form-input-selector [disabled]=\"!!activeVariable.formControlName\" [formInputs]=\"cachedNumberInputs\"\r\n [value]=\"activeVariable.inputId\" (click)=\"$event.stopPropagation()\" (change)=\"bindInput($event)\">\r\n </lib-form-input-selector>\r\n\r\n @if (activeVariable.formControlName) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"width: 100%; margin-top: 12px;\">\r\n <mat-label>Variable Name</mat-label>\r\n <textarea matInput (click)=\"$event.stopPropagation()\" [(ngModel)]=\"activeVariable.variable\"\r\n placeholder=\"enter variable\" rows=\"1\"></textarea>\r\n <mat-hint>A variable is an alphabet or term that represents a form input in the equation.</mat-hint>\r\n </mat-form-field>\r\n\r\n @if (activeVariable.parentInputId) {\r\n <br>\r\n <mat-label><small>list function ( ƒ )</small></mat-label>\r\n <mat-chip-listbox class=\"mat-mdc-chip-set-stacked\" aria-label=\"Calculation function\">\r\n @for (func of allCalculationFunction; track func) {\r\n <mat-chip-option (click)=\"attachFunction($event, func)\" [selected]=\"activeVariable.function === func\">\r\n {{func}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n\r\n <!-- Actions -->\r\n <mat-toolbar style=\"background: transparent; padding: 0; margin-top: 12px;\" lines=\"none\">\r\n <span class=\"spacer\"></span>\r\n <button mat-button (click)=\"cancelVariableConfig()\">Cancel</button>\r\n <button mat-flat-button color=\"primary\" [disabled]=\"!activeVariable.formControlName || !activeVariable.variable\"\r\n (click)=\"saveNewVariable()\">\r\n Add Variable\r\n </button>\r\n </mat-toolbar>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay for disabled state -->\r\n<ng-template cdkConnectedOverlay [cdkConnectedOverlayOpen]=\"disabled\">\r\n <div\r\n style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 10;\">\r\n </div>\r\n</ng-template>"],"names":["uuidv4","i2","i3","i4","i5","i6","i7","i8","i9","i11","i12"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-calculated-field-rules.component-Ct6_c_Lj.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/calculated-field-rules/calculated-field-rules.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/calculated-field-rules/calculated-field-rules.component.html"],"sourcesContent":["import {\r\n\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n\r\n OnChanges,\r\n\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n Self,\r\n// CUSTOM_ELEMENTS_SCHEMA,\r\n SimpleChanges,\r\n\r\n\r\n} from '@angular/core';\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalculatedFieldRules, TableConfigurationsInterface } from 'ngx-t-forms-types';\r\n\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { FormsModule, NgControl } from '@angular/forms';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { FormInputSelectorComponent } from '../form-input-selector/form-input-selector.component';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { CalculationFunctions, calculationVariableInterface } from \"ngx-t-forms-types\"\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { _isEqual } from '../../../../shared/functions/isEqual';\r\n// import 'mathlive';\r\n// Define the interface for the Mathfield element to avoid TS errors\r\n// declare global {\r\n// interface HTMLElementTagNameMap {\r\n// 'math-field': MathfieldElement;\r\n// }\r\n// }\r\n\r\n\r\n// import { MathfieldElement } from 'mathlive';\r\n// import { cleanLatexForMathJS, cleanMathJSForLatex } from '../../../../services/core/t-form-tower-controller/functions/lateToMathjs';\r\n@Component({\r\n selector: 'app-calculated-field-rules',\r\n templateUrl: './calculated-field-rules.component.html',\r\n styleUrls: ['./calculated-field-rules.component.scss'],\r\n standalone: true,\r\n imports: [\r\n MatModulesModule,\r\n CommonModule,\r\n FormsModule,\r\n FormInputSelectorComponent,\r\n OverlayModule\r\n ],\r\n // schemas: [CUSTOM_ELEMENTS_SCHEMA],\r\n providers: [{ provide: MatFormFieldControl, useExisting: CalculatedFieldRulesComponent }],\r\n})\r\nexport class CalculatedFieldRulesComponent implements OnInit, OnChanges, OnDestroy,\r\n MatFormFieldControl<CalculatedFieldRules | undefined> {\r\n static nextId = 0;\r\n\r\n // #region MatFormFieldControl Properties\r\n @HostBinding() id = `app-calculated-field-rules-${CalculatedFieldRulesComponent.nextId++}`;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n touched = false;\r\n controlType = 'app-calculated-field-rules';\r\n\r\n @Input() placeholder: string = '';\r\n @Input() required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n\r\n // #endregion\r\n\r\n // #region Component Inputs/Outputs\r\n @Input() mapToData: FormColumnInputs | undefined = undefined;\r\n @Input() formInputs: Array<FormColumnInputs> = [];\r\n @Input() errors: IConfigElementError[] | undefined = [];\r\n\r\n @Output() valueChange2dWithPath = new EventEmitter<any>();\r\n @Output() valueChanged = new EventEmitter<CalculatedFieldRules | null>();\r\n // #endregion\r\n\r\n // Internal State\r\n protected _value: CalculatedFieldRules | undefined;\r\n\r\n // Edit Mode State\r\n isEditing = false;\r\n tempValue: CalculatedFieldRules = {} as CalculatedFieldRules; // Local state for editing\r\n\r\n // Cache for performance (calculated in ngOnChanges)\r\n cachedNumberInputs: FormColumnInputs[] = [];\r\n\r\n // Variable config state\r\n activeVariable: Partial<calculationVariableInterface & { inputId?: string, parentInputId?: string }> = {};\r\n showVariableConfig = false;\r\n\r\n roundingType: {\r\n value: any;\r\n label: string;\r\n }[] = [\r\n { value: 'FLOOR', label: 'Round Down (FLOOR)' },\r\n { value: 'CEIL', label: 'Round Up (CEIL)' },\r\n { value: 'ROUND', label: 'Standard Rounding (ROUND)' },\r\n ];\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private _elementRef: ElementRef<HTMLElement>\r\n ) {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['formInputs']) {\r\n this.cachedNumberInputs = this.formInputs?.filter(\r\n (input) => input.dataType === 'number' || input.type === 'number'\r\n ) || [];\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n // #region Value Accessor & MatFormFieldControl Logic\r\n\r\n @Input()\r\n get value(): CalculatedFieldRules | undefined {\r\n return this._value;\r\n }\r\n\r\n set value(val: CalculatedFieldRules | undefined) {\r\n if (_isEqual(this._value, val)) return;\r\n this._value = val ? { \r\n \r\n ...val \r\n \r\n } : undefined;\r\n this.stateChanges.next();\r\n this.valueChanged.emit(this._value);\r\n this.onChange(this._value);\r\n }\r\n\r\n get empty(): boolean {\r\n return !this._value;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get errorState(): boolean {\r\n const hasCustomError = (this.errors || []).length > 0;\r\n const hasControlError = !!this.ngControl?.control?.errors;\r\n return (\r\n (this.touched && (hasControlError || hasCustomError)) ||\r\n (!!this.required && !this.value)\r\n );\r\n }\r\n\r\n onChange = (_: any) => { };\r\n onTouched = () => { };\r\n\r\n writeValue(value: CalculatedFieldRules): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n if (this._elementRef?.nativeElement) {\r\n const controlElement = this._elementRef.nativeElement.querySelector(\r\n '.app-calculated-field-rules'\r\n );\r\n if (controlElement) {\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n this.markAsTouched();\r\n }\r\n\r\n markAsTouched() {\r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Edit Mode Logic\r\n\r\n startEdit() {\r\n // Clone the current value into tempValue to prevent immediate emission\r\n this.tempValue = this.value\r\n ? JSON.parse(JSON.stringify(this.value))\r\n : {} as CalculatedFieldRules;\r\n this.isEditing = true;\r\n this.markAsTouched();\r\n }\r\n\r\n saveEdit() {\r\n // Commit tempValue to actual value\r\n this.value = this.tempValue;\r\n this.isEditing = false;\r\n }\r\n\r\n cancelEdit() {\r\n // Discard changes\r\n this.isEditing = false;\r\n this.tempValue = {} as CalculatedFieldRules;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Getters\r\n\r\n get allCalculationFunction() {\r\n return Object.values(CalculationFunctions);\r\n }\r\n\r\n get tableMode(): boolean {\r\n return !!this.mapToData?.tableConfig;\r\n }\r\n\r\n get tableConfig(): TableConfigurationsInterface | undefined {\r\n return this.mapToData?.tableConfig;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Logic (Refactored to use tempValue)\r\n\r\n checkIfInputCanBeLinkedToCalVariable(\r\n currentInput: FormColumnInputs | undefined,\r\n inputToDisable: { formControlName: any; parentInput?: any; multipleInputInEditId?: any }\r\n ): boolean {\r\n if (!currentInput) return false;\r\n\r\n if (currentInput.formControlName === inputToDisable.formControlName) {\r\n return true;\r\n }\r\n\r\n if (!currentInput.multipleInputInEditId) {\r\n return !!inputToDisable.parentInput || !!inputToDisable.multipleInputInEditId;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n linkFormulaSource(event: MatSelectChange) {\r\n this.tempValue = {\r\n ...this.tempValue,\r\n formControlWithFormula: event.value,\r\n formula: undefined as any // Reset formula when source changes\r\n };\r\n }\r\n\r\n removeVariable(variableId: string) {\r\n if (!this.tempValue?.variables) return;\r\n\r\n this.tempValue = {\r\n ...this.tempValue,\r\n variables: this.tempValue.variables.filter(v => v.id !== variableId)\r\n };\r\n }\r\n\r\n appendVariableToFormula(variableName: string) {\r\n const currentFormula = this.tempValue?.formula || '';\r\n this.tempValue = {\r\n ...this.tempValue,\r\n formula: `${currentFormula} ${variableName}`\r\n } as CalculatedFieldRules;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Variable Configuration\r\n\r\n toggleVariableConfig() {\r\n this.showVariableConfig = !this.showVariableConfig;\r\n if (!this.showVariableConfig) {\r\n this.activeVariable = {};\r\n }\r\n }\r\n\r\n bindInput(inputId: string) {\r\n const input = this.formInputs?.find((i) => i.id === inputId);\r\n if (!input) return;\r\n\r\n if (this.activeVariable.formControlName === input.formControlName) {\r\n return;\r\n }\r\n\r\n this.activeVariable = {\r\n ...this.activeVariable,\r\n formControlName: input.formControlName,\r\n label: input.label,\r\n inputId: input.id,\r\n parentInputId: input.multipleInputInEditId\r\n };\r\n }\r\n\r\n attachFunction(event: Event, funcValue: any) {\r\n event.stopPropagation();\r\n\r\n if (this.activeVariable.function === funcValue) {\r\n this.activeVariable.function = undefined;\r\n this.activeVariable.applyFunctionToCol = undefined;\r\n this.activeVariable.applyFunctionToLabel = undefined;\r\n } else {\r\n this.activeVariable.function = funcValue;\r\n this.activeVariable.applyFunctionToCol = this.activeVariable.formControlName;\r\n this.activeVariable.applyFunctionToLabel = this.activeVariable.label;\r\n }\r\n }\r\n\r\n cancelVariableConfig() {\r\n this.activeVariable = {};\r\n this.showVariableConfig = false;\r\n }\r\n\r\n saveNewVariable() {\r\n const currentVariables = this.tempValue?.variables || [];\r\n\r\n const newVar: calculationVariableInterface = {\r\n ...this.activeVariable,\r\n id: uuidv4(),\r\n variable: this.activeVariable.variable || '',\r\n } as calculationVariableInterface;\r\n\r\n if (this.inputIsInItemList(newVar)) {\r\n const input = this.formInputs?.find(\r\n (i) => i.formControlName === newVar.formControlName\r\n );\r\n if (input?.multipleInputInEditId) {\r\n (newVar as any)['parentInputId'] = input.multipleInputInEditId;\r\n }\r\n }\r\n\r\n this.tempValue = {\r\n ...this.tempValue,\r\n variables: [...currentVariables, newVar],\r\n formula: this.tempValue.formula || ''\r\n };\r\n\r\n this.activeVariable = {};\r\n this.showVariableConfig = false;\r\n }\r\n\r\n private inputIsInItemList(v: Partial<calculationVariableInterface>): boolean {\r\n const input = this.formInputs?.find(\r\n (i) => i.formControlName === v.formControlName\r\n );\r\n const hasParent = input ? !!input.multipleInputInEditId : false;\r\n const isInTable = (v as any).tableCell;\r\n return hasParent || isInTable;\r\n }\r\n\r\n // #endregion\r\n\r\n\r\n // #region Mathlive setup\r\n // onInput(event: string) {\r\n // // The event target is the <math-field> element\r\n \r\n \r\n // this.tempValue = {\r\n // ...this.tempValue,\r\n // formula:cleanLatexForMathJS(event)\r\n // }\r\n\r\n // // Update the local state with the new LaTeX value\r\n \r\n // }\r\n // get getFormular(){\r\n // return cleanMathJSForLatex(this.value?.formula||'')\r\n // }\r\n // #endregion\r\n}","<br>\r\n\r\n<!-- View Mode (Summary) -->\r\n@if (!isEditing) {\r\n<div class=\"view-mode-container\"\r\n style=\"display: flex; flex-direction: column; gap: 8px;background:var(--mat-sys-surface-variant)\">\r\n\r\n @if (!!value && !mapToData?.['id'] && !tableMode) {\r\n <div class=\"tree-instructions\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>Save the input first to enable calculated field configurations</span>\r\n </div>\r\n }\r\n\r\n <div\r\n style=\"display: flex; justify-content: space-between; align-items: center; border: 1px solid var(--mat-sys-outline-variant, #ccc); border-radius: 4px; padding: 12px;\">\r\n <div style=\"display: flex; flex-direction: column; width: 100%;\">\r\n <span style=\"font-size: 0.85em; opacity: 0.7;\">Current Formula</span>\r\n <span style=\"font-weight: 500; font-size: 1.1em; width: 100%;\">\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"true\"\r\n [value]=\"getFormular\">\r\n </math-field> -->\r\n\r\n <code>\r\n <pre>\r\n {{ value?.formula || 'No formula configured' }}\r\n </pre>\r\n </code>\r\n\r\n\r\n </span>\r\n @if(value?.decimalPlaces) {\r\n <span style=\"font-size: 0.8em; margin-top: 4px; opacity: 0.7;\">\r\n Decimals: {{value?.decimalPlaces}} | Rounding: {{value?.roundingMode || 'None'}}\r\n </span>\r\n }\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button style=\"width: 100%;margin-top: 16px;\" mat-stroked-button color=\"primary\" (click)=\"startEdit()\">\r\n <mat-icon>edit</mat-icon>\r\n Edit Rules\r\n</button>\r\n}\r\n\r\n<!-- Edit Mode (Editor Card) -->\r\n@else {\r\n<mat-card appearance=\"outlined\" class=\"editor-card\" style=\"padding: 16px; border-color: var(--mat-sys-primary);\">\r\n <h3 style=\"margin-top: 0; margin-bottom: 16px; color: var(--mat-sys-primary);\">\r\n <mat-icon style=\"vertical-align: middle; margin-right: 8px;\">functions</mat-icon>\r\n Edit Calculation\r\n </h3>\r\n\r\n <section>\r\n <!-- Main Formula Input -->\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\" style=\"width: 100%;\">\r\n <mat-label>Equation</mat-label>\r\n <textarea matInput [(ngModel)]=\"tempValue['formula']\" placeholder=\"Enter calculation expression\"\r\n rows=\"3\"></textarea>\r\n <mat-hint>example: ((a+2)/(b-1))*2</mat-hint>\r\n </mat-form-field>\r\n <!-- <math-field style=\"width: 100%;\" #mathfield \r\n [readOnly]=\"false\"\r\n [value]=\"getFormular\" \r\n [smartMode]=\"true\"\r\n (input)=\"onInput(mathfield.value)\">\r\n </math-field> -->\r\n <!-- Optional Source Link -->\r\n @if (!!tempValue?.getFormulaFromAFormInput) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\"\r\n style=\"margin-bottom: 8px; margin-top: 12px; width: 100%;\" appearance=\"outline\">\r\n <mat-label>Equation Source</mat-label>\r\n <mat-select matNativeControl [value]=\"tempValue.formControlWithFormula\"\r\n (selectionChange)=\"linkFormulaSource($event)\" placeholder=\"select Input with formula\">\r\n @for (input of formInputs; track input.id) {\r\n <mat-option [disabled]=\"checkIfInputCanBeLinkedToCalVariable(mapToData, input) || input.element !== 'select'\"\r\n [value]=\"input.formControlName\">\r\n {{input.label}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n <mat-hint>Link formula to an input value</mat-hint>\r\n </mat-form-field>\r\n }\r\n\r\n <!-- Variable Chips List -->\r\n <div style=\"margin-top: 12px; margin-bottom: 12px;\">\r\n <label style=\"font-size: 0.9em; opacity: 0.8; display: block; margin-bottom: 8px;\">Variables</label>\r\n <mat-chip-listbox aria-label=\"options\">\r\n @for (variable of (tempValue['variables'] || []); track variable.id) {\r\n <mat-chip (click)=\"appendVariableToFormula(variable.variable)\" (removed)=\"removeVariable(variable.id!)\">\r\n <div [style.color]=\"variable.tableCell ? 'var(--ion-color-purple)' : ''\" style=\"font-size: 0.8125em\">\r\n {{ variable.variable }} - {{ variable.label }}\r\n @if (variable.function) {\r\n <span style=\"opacity: 0.6; padding-left: 5px\">{{ variable.function }}</span>\r\n }\r\n </div>\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n\r\n <!-- Add/Close Variable Button -->\r\n <mat-chip highlighted=\"true\" [color]=\"showVariableConfig ? 'warn' : 'accent'\" (click)=\"toggleVariableConfig()\">\r\n <span>{{ showVariableConfig ? 'Close Variable Edit' : 'Add a new Variable' }}</span>\r\n <mat-icon matChipTrailingIcon>{{ showVariableConfig ? 'close' : 'add' }}</mat-icon>\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n </div>\r\n\r\n <!-- Variable Configuration Panel -->\r\n @if (showVariableConfig) {\r\n @defer (on immediate) {\r\n <ng-container *ngTemplateOutlet=\"variableConfigurationTpl\"></ng-container>\r\n }\r\n }\r\n\r\n <mat-divider style=\"margin: 16px 0;\"></mat-divider>\r\n\r\n <!-- Rounding Settings -->\r\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap;\">\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"flex: 1; min-width: 150px;\">\r\n <mat-label>Decimal Places</mat-label>\r\n <input matInput [(ngModel)]=\"tempValue['decimalPlaces']\" placeholder=\"0\" type=\"number\" min=\"0\">\r\n </mat-form-field>\r\n\r\n @if (tempValue['decimalPlaces']) {\r\n <div style=\"flex: 2;\">\r\n <label style=\"font-size: 0.85em; opacity: 0.8;\">Rounding Mode</label>\r\n <mat-chip-listbox aria-label=\"Rounding types\" style=\"margin-top: 4px;\">\r\n @for (type of roundingType; track type.value) {\r\n <mat-chip-option (click)=\"tempValue['roundingMode'] = type.value\"\r\n [selected]=\"tempValue['roundingMode'] === type.value\">\r\n {{type.label}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- Card Actions (Save/Cancel) -->\r\n <div style=\"display: flex; justify-content: flex-end; gap: 8px; margin-top: 24px;\">\r\n <button mat-button (click)=\"cancelEdit()\">Cancel</button>\r\n <button mat-raised-button color=\"primary\" (click)=\"saveEdit()\">Save Changes</button>\r\n </div>\r\n</mat-card>\r\n}\r\n\r\n<!-- Variable Configuration Template -->\r\n<ng-template #variableConfigurationTpl>\r\n <div\r\n style=\"background: var(--mat-sys-surface-variant, #f5f5f5); border-radius: 8px; padding: 12px; margin-top: 8px; border: 1px dashed #ccc;\">\r\n <div class=\"tree-instructions\" style=\"background: azure; margin-bottom: 12px;\">\r\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>\r\n <strong>Configure variable</strong><br>\r\n Link a form input to a variable to use in the equation\r\n </span>\r\n </div>\r\n\r\n <!-- Input Selector -->\r\n <lib-form-input-selector [disabled]=\"!!activeVariable.formControlName\" [formInputs]=\"cachedNumberInputs\"\r\n [value]=\"activeVariable.inputId\" (click)=\"$event.stopPropagation()\" (change)=\"bindInput($event)\">\r\n </lib-form-input-selector>\r\n\r\n @if (activeVariable.formControlName) {\r\n <mat-form-field [subscriptSizing]=\"'dynamic'\" [floatLabel]=\"'always'\" appearance=\"outline\"\r\n style=\"width: 100%; margin-top: 12px;\">\r\n <mat-label>Variable Name</mat-label>\r\n <textarea matInput (click)=\"$event.stopPropagation()\" [(ngModel)]=\"activeVariable.variable\"\r\n placeholder=\"enter variable\" rows=\"1\"></textarea>\r\n <mat-hint>A variable is an alphabet or term that represents a form input in the equation.</mat-hint>\r\n </mat-form-field>\r\n\r\n @if (activeVariable.parentInputId) {\r\n <br>\r\n <mat-label><small>list function ( ƒ )</small></mat-label>\r\n <mat-chip-listbox class=\"mat-mdc-chip-set-stacked\" aria-label=\"Calculation function\">\r\n @for (func of allCalculationFunction; track func) {\r\n <mat-chip-option (click)=\"attachFunction($event, func)\" [selected]=\"activeVariable.function === func\">\r\n {{func}}\r\n </mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n\r\n <!-- Actions -->\r\n <mat-toolbar style=\"background: transparent; padding: 0; margin-top: 12px;\" lines=\"none\">\r\n <span class=\"spacer\"></span>\r\n <button mat-button (click)=\"cancelVariableConfig()\">Cancel</button>\r\n <button mat-flat-button color=\"primary\" [disabled]=\"!activeVariable.formControlName || !activeVariable.variable\"\r\n (click)=\"saveNewVariable()\">\r\n Add Variable\r\n </button>\r\n </mat-toolbar>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Overlay for disabled state -->\r\n<ng-template cdkConnectedOverlay [cdkConnectedOverlayOpen]=\"disabled\">\r\n <div\r\n style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 10;\">\r\n </div>\r\n</ng-template>"],"names":["uuidv4","i2","i3","i4","i5","i6","i7","i8","i9","i11","i12"],"mappings":"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"}
|
|
@@ -5,10 +5,10 @@ import { Subject } from 'rxjs';
|
|
|
5
5
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
6
6
|
import { LiveAnnouncer } from '@angular/cdk/a11y';
|
|
7
7
|
import { ENTER, COMMA } from '@angular/cdk/keycodes';
|
|
8
|
-
import { M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-
|
|
8
|
+
import { M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-DP2koSL5.mjs';
|
|
9
9
|
import * as i1 from '@angular/forms';
|
|
10
10
|
import * as i4 from '@angular/material/chips';
|
|
11
|
-
import * as
|
|
11
|
+
import * as i3 from '@angular/material/icon';
|
|
12
12
|
|
|
13
13
|
class ChipOptionsCreatorEditorComponent {
|
|
14
14
|
static { this.nextId = 0; }
|
|
@@ -156,7 +156,7 @@ class ChipOptionsCreatorEditorComponent {
|
|
|
156
156
|
this.markAsTouched();
|
|
157
157
|
}
|
|
158
158
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ChipOptionsCreatorEditorComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: ChipOptionsCreatorEditorComponent, isStandalone: true, selector: "lib-chip-options-creator-editor", inputs: { disabled: "disabled", errors: "errors", required: "required", value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [{ provide: MatFormFieldControl, useExisting: ChipOptionsCreatorEditorComponent }], ngImport: i0, template: "<mat-chip-grid [disabled]=\"disabled\" #chipGrid aria-label=\"Account selection extension\" formControlName=\"additionalAccounts\">\r\n @for (segment of (value||[]); track segment) {\r\n <mat-chip-row\r\n (removed)=\"remove(segment)\"\r\n [editable]=\"true\"\r\n (edited)=\"edit(segment, $event)\"\r\n [aria-description]=\"'press enter to edit ' + segment\"\r\n >\r\n {{segment}}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + segment\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input\r\n placeholder=\"New selection...\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n </mat-chip-grid>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatModulesModule }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type:
|
|
159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: ChipOptionsCreatorEditorComponent, isStandalone: true, selector: "lib-chip-options-creator-editor", inputs: { disabled: "disabled", errors: "errors", required: "required", value: "value", placeholder: "placeholder" }, outputs: { valueChange: "valueChange" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [{ provide: MatFormFieldControl, useExisting: ChipOptionsCreatorEditorComponent }], ngImport: i0, template: "<mat-chip-grid [disabled]=\"disabled\" #chipGrid aria-label=\"Account selection extension\" formControlName=\"additionalAccounts\">\r\n @for (segment of (value||[]); track segment) {\r\n <mat-chip-row\r\n (removed)=\"remove(segment)\"\r\n [editable]=\"true\"\r\n (edited)=\"edit(segment, $event)\"\r\n [aria-description]=\"'press enter to edit ' + segment\"\r\n >\r\n {{segment}}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + segment\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input\r\n placeholder=\"New selection...\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n </mat-chip-grid>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatModulesModule }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
160
160
|
}
|
|
161
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ChipOptionsCreatorEditorComponent, decorators: [{
|
|
162
162
|
type: Component,
|
|
@@ -188,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
188
188
|
}] } });
|
|
189
189
|
|
|
190
190
|
export { ChipOptionsCreatorEditorComponent };
|
|
191
|
-
//# sourceMappingURL=ngx-t-forms-chip-options-creator-editor.component-
|
|
191
|
+
//# sourceMappingURL=ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-t-forms-chip-options-creator-editor.component-ItZ2K6AS.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/chip-options-creator-editor/chip-options-creator-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/chip-options-creator-editor/chip-options-creator-editor.component.html"],"sourcesContent":["import { Component, ElementRef, EventEmitter, HostBinding, inject, Input, Optional, Output, Self } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { NgControl } from '@angular/forms';\r\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\r\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { MatChipEditedEvent, MatChipInputEvent } from '@angular/material/chips';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\n@Component({\r\n selector: 'lib-chip-options-creator-editor',\r\n imports: [MatModulesModule],\r\n templateUrl: './chip-options-creator-editor.component.html',\r\n styleUrl: './chip-options-creator-editor.component.css',\r\n providers: [{ provide: MatFormFieldControl, useExisting: ChipOptionsCreatorEditorComponent }],\r\n})\r\nexport class ChipOptionsCreatorEditorComponent implements MatFormFieldControl<string[] | undefined> {\r\n readonly announcer = inject(LiveAnnouncer);\r\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n touched = false;\r\n @Input() disabled = false;\r\n controlType = 'lib-chip-options-creator-editor';\r\n autofilled = false;\r\n\r\n\r\n @Input() errors:IConfigElementError[] | undefined = [];\r\n @Output() valueChange = new EventEmitter<string[]|undefined>();\r\n\r\n private _required = false;\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _value: string[] | undefined = undefined;\r\n @Input()\r\n get value(): string[] | undefined {\r\n return this._value;\r\n }\r\n set value(val: string[] | undefined ) {\r\n this._value = val;\r\n this.onChange(val);\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @HostBinding() id = `lib-chip-options-creator-editor-${ChipOptionsCreatorEditorComponent.nextId++}`;\r\n @HostBinding('attr.aria-describedby') describedBy = '';\r\n @HostBinding('class.floating') get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get empty(): boolean {\r\n return !this.value || this.value.length === 0;\r\n }\r\n\r\n get errorState(): boolean {\r\n return !this.value && this.required && this.touched || !!this.ngControl?.errors || (this.errors||[]).length >0;\r\n }\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private _elementRef: ElementRef<HTMLElement>\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n writeValue(value: string[]|undefined): void {\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.stateChanges.next();\r\n }\r\n\r\n // MatFormFieldControl methods\r\n setDescribedByIds(ids: string[]): void {\r\n const element = this._elementRef?.nativeElement;\r\n if (element) {\r\n element.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n markAsTouched(): void {\r\n if (!this.touched) {\r\n this.touched = true;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n add(event: MatChipInputEvent): void {\r\n const value = (event.value || '').trim();\r\n const currentSegments = this.value || []\r\n const isDuplicate = currentSegments.some((segment: string) => segment === value);\r\n if (isDuplicate) {\r\n this.announcer.announce(`value ${value} already exists`);\r\n event.chipInput!.clear();\r\n return;\r\n }\r\n // Add our fruit\r\n if (value) {\r\n this.setValue([...(this.value || []), value]);\r\n }\r\n \r\n // Clear the input value\r\n event.chipInput!.clear();\r\n }\r\n edit(segment: string, event: MatChipEditedEvent) {\r\n const value = event.value.trim();\r\n\r\n // Remove fruit if it no longer has a name\r\n if (!value) {\r\n this.remove(segment);\r\n return;\r\n }\r\n\r\n // Edit existing fruit\r\n const segments = (this.value) || []\r\n\r\n const index = segments.indexOf(segment);\r\n if (index >= 0) {\r\n segments[index] = value;\r\n this.setValue([...segments]);\r\n return\r\n }\r\n this.setValue([...segments]);\r\n\r\n\r\n }\r\n \r\n remove(segment: string): void {\r\n const segments = (this.value) || []\r\n const index = segments.indexOf(segment);\r\n if (index < 0) {\r\n return \r\n }\r\n\r\n segments.splice(index, 1);\r\n this.announcer.announce(`Removed ${segment}`);\r\n this.setValue([...segments]);\r\n return\r\n\r\n }\r\n setValue(value: string[] | undefined): void {\r\n if(Array.isArray(value) === false) {\r\n throw new Error('value must be an array')\r\n return \r\n }\r\n this.value = value || [];\r\n this.valueChange.emit(value);\r\n this.markAsTouched();\r\n }\r\n}\r\n","<mat-chip-grid [disabled]=\"disabled\" #chipGrid aria-label=\"Account selection extension\" formControlName=\"additionalAccounts\">\r\n @for (segment of (value||[]); track segment) {\r\n <mat-chip-row\r\n (removed)=\"remove(segment)\"\r\n [editable]=\"true\"\r\n (edited)=\"edit(segment, $event)\"\r\n [aria-description]=\"'press enter to edit ' + segment\"\r\n >\r\n {{segment}}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + segment\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input\r\n placeholder=\"New selection...\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n </mat-chip-grid>"],"names":["i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-chip-options-creator-editor.component-yuM1KHho.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/chip-options-creator-editor/chip-options-creator-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/chip-options-creator-editor/chip-options-creator-editor.component.html"],"sourcesContent":["import { Component, ElementRef, EventEmitter, HostBinding, inject, Input, Optional, Output, Self } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { NgControl } from '@angular/forms';\r\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\r\nimport { COMMA, ENTER } from '@angular/cdk/keycodes';\r\nimport { MatChipEditedEvent, MatChipInputEvent } from '@angular/material/chips';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\n@Component({\r\n selector: 'lib-chip-options-creator-editor',\r\n imports: [MatModulesModule],\r\n templateUrl: './chip-options-creator-editor.component.html',\r\n styleUrl: './chip-options-creator-editor.component.css',\r\n providers: [{ provide: MatFormFieldControl, useExisting: ChipOptionsCreatorEditorComponent }],\r\n})\r\nexport class ChipOptionsCreatorEditorComponent implements MatFormFieldControl<string[] | undefined> {\r\n readonly announcer = inject(LiveAnnouncer);\r\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n focused = false;\r\n touched = false;\r\n @Input() disabled = false;\r\n controlType = 'lib-chip-options-creator-editor';\r\n autofilled = false;\r\n\r\n\r\n @Input() errors:IConfigElementError[] | undefined = [];\r\n @Output() valueChange = new EventEmitter<string[]|undefined>();\r\n\r\n private _required = false;\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _value: string[] | undefined = undefined;\r\n @Input()\r\n get value(): string[] | undefined {\r\n return this._value;\r\n }\r\n set value(val: string[] | undefined ) {\r\n this._value = val;\r\n this.onChange(val);\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n private _placeholder: string = '';\r\n\r\n @HostBinding() id = `lib-chip-options-creator-editor-${ChipOptionsCreatorEditorComponent.nextId++}`;\r\n @HostBinding('attr.aria-describedby') describedBy = '';\r\n @HostBinding('class.floating') get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n get empty(): boolean {\r\n return !this.value || this.value.length === 0;\r\n }\r\n\r\n get errorState(): boolean {\r\n return !this.value && this.required && this.touched || !!this.ngControl?.errors || (this.errors||[]).length >0;\r\n }\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private _elementRef: ElementRef<HTMLElement>\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n // ControlValueAccessor methods\r\n onChange = (_: any) => {};\r\n onTouched = () => {};\r\n\r\n writeValue(value: string[]|undefined): void {\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.stateChanges.next();\r\n }\r\n\r\n // MatFormFieldControl methods\r\n setDescribedByIds(ids: string[]): void {\r\n const element = this._elementRef?.nativeElement;\r\n if (element) {\r\n element.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n markAsTouched(): void {\r\n if (!this.touched) {\r\n this.touched = true;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n add(event: MatChipInputEvent): void {\r\n const value = (event.value || '').trim();\r\n const currentSegments = this.value || []\r\n const isDuplicate = currentSegments.some((segment: string) => segment === value);\r\n if (isDuplicate) {\r\n this.announcer.announce(`value ${value} already exists`);\r\n event.chipInput!.clear();\r\n return;\r\n }\r\n // Add our fruit\r\n if (value) {\r\n this.setValue([...(this.value || []), value]);\r\n }\r\n \r\n // Clear the input value\r\n event.chipInput!.clear();\r\n }\r\n edit(segment: string, event: MatChipEditedEvent) {\r\n const value = event.value.trim();\r\n\r\n // Remove fruit if it no longer has a name\r\n if (!value) {\r\n this.remove(segment);\r\n return;\r\n }\r\n\r\n // Edit existing fruit\r\n const segments = (this.value) || []\r\n\r\n const index = segments.indexOf(segment);\r\n if (index >= 0) {\r\n segments[index] = value;\r\n this.setValue([...segments]);\r\n return\r\n }\r\n this.setValue([...segments]);\r\n\r\n\r\n }\r\n \r\n remove(segment: string): void {\r\n const segments = (this.value) || []\r\n const index = segments.indexOf(segment);\r\n if (index < 0) {\r\n return \r\n }\r\n\r\n segments.splice(index, 1);\r\n this.announcer.announce(`Removed ${segment}`);\r\n this.setValue([...segments]);\r\n return\r\n\r\n }\r\n setValue(value: string[] | undefined): void {\r\n if(Array.isArray(value) === false) {\r\n throw new Error('value must be an array')\r\n return \r\n }\r\n this.value = value || [];\r\n this.valueChange.emit(value);\r\n this.markAsTouched();\r\n }\r\n}\r\n","<mat-chip-grid [disabled]=\"disabled\" #chipGrid aria-label=\"Account selection extension\" formControlName=\"additionalAccounts\">\r\n @for (segment of (value||[]); track segment) {\r\n <mat-chip-row\r\n (removed)=\"remove(segment)\"\r\n [editable]=\"true\"\r\n (edited)=\"edit(segment, $event)\"\r\n [aria-description]=\"'press enter to edit ' + segment\"\r\n >\r\n {{segment}}\r\n <button matChipRemove [attr.aria-label]=\"'remove ' + segment\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n }\r\n <input\r\n placeholder=\"New selection...\"\r\n [matChipInputFor]=\"chipGrid\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n />\r\n </mat-chip-grid>"],"names":["i2"],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@ import { Subject, BehaviorSubject, take, tap, catchError } from 'rxjs';
|
|
|
4
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
5
5
|
import * as i2 from '@angular/common';
|
|
6
6
|
import { CommonModule } from '@angular/common';
|
|
7
|
-
import { M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-
|
|
7
|
+
import { M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-DP2koSL5.mjs';
|
|
8
8
|
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
9
9
|
import * as i1 from '@angular/forms';
|
|
10
10
|
import * as i2$1 from '@angular/material/autocomplete';
|
|
11
11
|
import * as i2$2 from '@angular/material/button';
|
|
12
|
-
import * as
|
|
12
|
+
import * as i3 from '@angular/material/icon';
|
|
13
13
|
import * as i7 from '@angular/material/list';
|
|
14
|
-
import * as
|
|
14
|
+
import * as i3$1 from '@angular/material/select';
|
|
15
15
|
import * as i5 from '@angular/material/toolbar';
|
|
16
16
|
|
|
17
17
|
class ConfigMscoaAdditionalInputsComponent {
|
|
@@ -66,7 +66,6 @@ class ConfigMscoaAdditionalInputsComponent {
|
|
|
66
66
|
this.stateChanges.next();
|
|
67
67
|
}
|
|
68
68
|
markAsTouched() {
|
|
69
|
-
console.log('markAsTouched');
|
|
70
69
|
if (!this.touched) {
|
|
71
70
|
this.onTouched();
|
|
72
71
|
this.touched = true;
|
|
@@ -77,8 +76,7 @@ class ConfigMscoaAdditionalInputsComponent {
|
|
|
77
76
|
this.mscoaInitiated = true;
|
|
78
77
|
options$.pipe(take(1), tap((options) => {
|
|
79
78
|
this.accountTreeKeys = options?.accountTreeKeys || [];
|
|
80
|
-
}), catchError((
|
|
81
|
-
console.error('Error while fetching SCOA tree:', error);
|
|
79
|
+
}), catchError(() => {
|
|
82
80
|
return [null];
|
|
83
81
|
})).subscribe();
|
|
84
82
|
}
|
|
@@ -177,7 +175,7 @@ class ConfigMscoaAdditionalInputsComponent {
|
|
|
177
175
|
}];
|
|
178
176
|
}
|
|
179
177
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ConfigMscoaAdditionalInputsComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
180
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: ConfigMscoaAdditionalInputsComponent, isStandalone: true, selector: "app-config-mscoa-additional-inputs", inputs: { disabled: "disabled", errors: "errors", getMscoaTree: "getMscoaTree", mapToData: "mapToData", value: "value" }, outputs: { valueChanged: "valueChanged" }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: ConfigMscoaAdditionalInputsComponent }], ngImport: i0, template: "\n\n<mat-list *ngIf=\"(value?.length||0) > 0; else noInputs\">\n <mat-toolbar>\n Additional inputs configuration\n </mat-toolbar>\n <mat-form-field \n (mouseover)=\"hovered = i\"\n subscriptSizing=\"dynamic\" \n (mouseleave)=\"hovered = null\"\n *ngFor=\"let input of value; let i = index\" style=\" margin-bottom: 8px;\" appearance=\"outline\" >\n <mat-label>\n {{ input.label }}\n </mat-label>\n <mat-select [disabled]=\"disabled\" matNativeControl \n \n [value]=\"input.segment\"\n\n placeholder=\"select segment\" (selectionChange)=\"inputSegmentChanged($event,i)\"\n >\n \n \n @for (segment of limitInputTo; track segment.value) {\n <mat-option [value]=\"segment.value\" >{{segment.label}}</mat-option>\n }\n\n\n </mat-select>\n <mat-hint>\n Link formula to an input value\n </mat-hint>\n </mat-form-field>\n\n</mat-list>\n\n<ng-template #noInputs>\n <div *ngIf=\"mapToData?.id\" class=\"tree-instructions\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span><strong>\n No input configuration available. \n </strong> <br>\n Start by adding inputs below.</span>\n </div>\n\n</ng-template>\n\n\n\n\n<mat-toolbar *ngIf=\"!isAddingNew && editingIndex === null && mapToData?.id\">\n <button [disabled]=\"disabled\" style=\"width: 100%;\" (click)=\"startAddNew()\" mat-stroked-button>\n <mat-icon>\n add\n </mat-icon>\n Add New Input\n </button>\n</mat-toolbar>\n\n<ng-template #InputEditor>\n <h1>\n Not implemented yet\n </h1>\n\n not implemented\n</ng-template>\n", styles: [".tree-instructions{display:flex;align-items:center;gap:8px;padding:12px;background:azure;border-radius:4px;margin-bottom:16px}.info-icon{min-width:38px}\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: "ngmodule", type: MatModulesModule }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type:
|
|
178
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.5", type: ConfigMscoaAdditionalInputsComponent, isStandalone: true, selector: "app-config-mscoa-additional-inputs", inputs: { disabled: "disabled", errors: "errors", getMscoaTree: "getMscoaTree", mapToData: "mapToData", value: "value" }, outputs: { valueChanged: "valueChanged" }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: ConfigMscoaAdditionalInputsComponent }], ngImport: i0, template: "\n\n<mat-list *ngIf=\"(value?.length||0) > 0; else noInputs\">\n <mat-toolbar>\n Additional inputs configuration\n </mat-toolbar>\n <mat-form-field \n (mouseover)=\"hovered = i\"\n subscriptSizing=\"dynamic\" \n (mouseleave)=\"hovered = null\"\n *ngFor=\"let input of value; let i = index\" style=\" margin-bottom: 8px;\" appearance=\"outline\" >\n <mat-label>\n {{ input.label }}\n </mat-label>\n <mat-select [disabled]=\"disabled\" matNativeControl \n \n [value]=\"input.segment\"\n\n placeholder=\"select segment\" (selectionChange)=\"inputSegmentChanged($event,i)\"\n >\n \n \n @for (segment of limitInputTo; track segment.value) {\n <mat-option [value]=\"segment.value\" >{{segment.label}}</mat-option>\n }\n\n\n </mat-select>\n <mat-hint>\n Link formula to an input value\n </mat-hint>\n </mat-form-field>\n\n</mat-list>\n\n<ng-template #noInputs>\n <div *ngIf=\"mapToData?.id\" class=\"tree-instructions\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span><strong>\n No input configuration available. \n </strong> <br>\n Start by adding inputs below.</span>\n </div>\n\n</ng-template>\n\n\n\n\n<mat-toolbar *ngIf=\"!isAddingNew && editingIndex === null && mapToData?.id\">\n <button [disabled]=\"disabled\" style=\"width: 100%;\" (click)=\"startAddNew()\" mat-stroked-button>\n <mat-icon>\n add\n </mat-icon>\n Add New Input\n </button>\n</mat-toolbar>\n\n<ng-template #InputEditor>\n <h1>\n Not implemented yet\n </h1>\n\n not implemented\n</ng-template>\n", styles: [".tree-instructions{display:flex;align-items:center;gap:8px;padding:12px;background:azure;border-radius:4px;margin-bottom:16px}.info-icon{min-width:38px}\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: "ngmodule", type: MatModulesModule }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i3$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] }); }
|
|
181
179
|
}
|
|
182
180
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImport: i0, type: ConfigMscoaAdditionalInputsComponent, decorators: [{
|
|
183
181
|
type: Component,
|
|
@@ -206,4 +204,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.5", ngImpor
|
|
|
206
204
|
}] } });
|
|
207
205
|
|
|
208
206
|
export { ConfigMscoaAdditionalInputsComponent };
|
|
209
|
-
//# sourceMappingURL=ngx-t-forms-config-mscoa-additional-inputs.component-
|
|
207
|
+
//# sourceMappingURL=ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-config-mscoa-additional-inputs.component-BptpYSe-.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/config-mscoa-additional-inputs/config-mscoa-additional-inputs.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/config-mscoa-additional-inputs/config-mscoa-additional-inputs.component.html"],"sourcesContent":["import { Component, ElementRef, EventEmitter, HostBinding, inject, Input, OnInit, Optional, Output, Self } from '@angular/core';\r\nimport { BehaviorSubject, catchError, Observable, Subject, take, tap } from 'rxjs';\r\n\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { IGetTreeResponse } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { NgControl } from '@angular/forms';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\n\r\n\r\n\r\n\r\ninterface ConfiguredMscoaInput extends FormColumnInputs {\r\n segment:string\r\n}\r\n@Component({\r\n selector: 'app-config-mscoa-additional-inputs',\r\n standalone: true,\r\n imports:[\r\n CommonModule,\r\n MatModulesModule,\r\n ],\r\n templateUrl: './config-mscoa-additional-inputs.component.html',\r\n styleUrls: ['./config-mscoa-additional-inputs.component.scss'],\r\n providers: [{ provide: MatFormFieldControl, useExisting: ConfigMscoaAdditionalInputsComponent}],\r\n})\r\nexport class ConfigMscoaAdditionalInputsComponent implements OnInit, MatFormFieldControl<ConfiguredMscoaInput[]> {\r\n\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n \r\n @HostBinding() id = `app-config-mscoa-additional-inputs-${ConfigMscoaAdditionalInputsComponent .nextId++}`;\r\n \r\n placeholder: string = ''\r\n constructor(@Optional() @Self() public ngControl: NgControl, private _elementRef: ElementRef<HTMLElement>,) { }\r\n focused: boolean = false;\r\n get empty() {\r\n return !this.value\r\n }\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n required: boolean = false;\r\n @Input() disabled: boolean = false;\r\n get errorState(): boolean {\r\n const hasError = !!this.ngControl?.control?.errors || (this.errors||[]).length > 0 && this.touched\r\n return !this.value && !!this.required || hasError\r\n }\r\n \r\n controlType?: string | undefined;\r\n autofilled?: boolean | undefined;\r\n userAriaDescribedBy?: string | undefined;\r\n disableAutomaticLabeling?: boolean | undefined;\r\n setDescribedByIds(ids: string[]) {\r\n // Ensure the component view is initialized\r\n if (this._elementRef && this._elementRef.nativeElement) {\r\n const controlElement = this._elementRef.nativeElement.querySelector('.app-config-mscoa-additional-inputs');\r\n // Check if the controlElement exists before attempting to set its attribute\r\n if (controlElement) {\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n }\r\n onContainerClick(event: MouseEvent): void {\r\n this.markAsTouched();\r\n this.stateChanges.next();\r\n }\r\n \r\n touched: boolean = false;\r\n onTouched = () => {};\r\n markAsTouched() {\r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n } \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n mscoaInitiated = false\r\n @Input() errors:IConfigElementError[] |undefined = [];\r\n @Input() set getMscoaTree(options$:Observable<IGetTreeResponse| undefined> ){\r\n if(!!options$ &&!this.mscoaInitiated){\r\n this.mscoaInitiated = true\r\n options$.pipe(\r\n take(1),\r\n tap((options) => {\r\n this.accountTreeKeys = options?.accountTreeKeys || []\r\n }),\r\n catchError(() => {\r\n return [null];\r\n })\r\n ).subscribe();\r\n\r\n }\r\n }\r\n @Input() mapToData:FormColumnInputs | undefined = undefined;\r\n @Input() set value(val: ConfiguredMscoaInput[]) {\r\n this._value.next(val || []);\r\n }\r\n get value(): ConfiguredMscoaInput[] {\r\n return this._value.value;\r\n }\r\n _inputInEdit = new BehaviorSubject<ConfiguredMscoaInput|null>(null)\r\n inputInEdit:ConfiguredMscoaInput|undefined = undefined\r\n\r\n @Output() valueChanged = new EventEmitter<ConfiguredMscoaInput[]>();\r\n private _value = new BehaviorSubject<ConfiguredMscoaInput[]>([]);\r\n\r\n editingIndex: number | null = null;\r\n isAddingNew = false;\r\n accountTreeKeys: string[] = [];\r\n \r\n ngOnInit() {\r\n\r\n }\r\n hovered :null|number = null\r\n\r\n\r\n startAddNew() {\r\n this.isAddingNew = true;\r\n this.editingIndex = null;\r\n this.inputInEdit = undefined\r\n this.openElementEditor();\r\n }\r\n\r\n startEdit(index: number) {\r\n this.editingIndex = index;\r\n this.isAddingNew = false;\r\n this.inputInEdit = this.value[index]\r\n this.openElementEditor();\r\n }\r\n removeInput(index: number) {\r\n const updatedValue = this.value.filter((_, i) => i !== index);\r\n this._value.next(updatedValue);\r\n this.valueChanged.emit(updatedValue);\r\n }\r\n cancelEdit() {\r\n this.editingIndex = null;\r\n this.isAddingNew = false;\r\n }\r\n\r\n saveSegment() {\r\n // if (this.segmentForm.valid) {\r\n // const newSegment = ({\r\n // segment:this.segmentForm.value.segment,\r\n // label:this.toTitleCase(this.segmentForm.value.segment),\r\n // }) as IIncludedSegmentConfig;\r\n // const updatedValue = [...this.value];\r\n\r\n // if (this.isAddingNew) {\r\n // updatedValue.push(newSegment);\r\n // } else if (this.editingIndex !== null) {\r\n // updatedValue[this.editingIndex] = newSegment;\r\n // }\r\n\r\n \r\n // this._value.next(updatedValue);\r\n // this.valueChanged.emit(updatedValue);\r\n // this.cancelEdit();\r\n // }\r\n }\r\n hoveredIndex:number|null = null\r\n removeSegment(index: number) {\r\n const updatedValue = this.value.filter((_, i) => i !== index);\r\n this._value.next(updatedValue);\r\n this.valueChanged.emit(updatedValue);\r\n }\r\n parentId:string|undefined \r\n async openElementEditor() {\r\n\r\n this.openFormDialog()\r\n }\r\n inputSegmentChanged($event:any,i:number){\r\n if($event.detail.value === 'None'&&this.value[i] !== undefined){\r\n this.value[i]!.segment = undefined as any\r\n }else if(this.value[i] !== undefined){\r\n this.value[i]!.segment = $event.detail.value\r\n }\r\n this.valueChanged.emit(this.value)\r\n }\r\nreadonly dialog = inject(MatDialog);\r\nopenFormDialog() {\r\n // const dialogRef = this.dialog.open(FormElementModalEditorComponent,{\r\n // maxHeight:'95vh',\r\n // panelClass:'form-element-modal-editor',\r\n // data:{\r\n // inputInEdit:this.inputInEdit\r\n // }\r\n // });\r\n\r\n // dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\r\n // const {input,action} = result\r\n // if(action === 'add'){\r\n // this.value.push(input)\r\n // this.valueChanged.emit(this.value)\r\n // }\r\n // if(action === 'edit'&& this.editingIndex !== null){\r\n // this.value[this.editingIndex] = input\r\n // this.valueChanged.emit(this.value)\r\n // }\r\n // this.cancelEdit()\r\n // });\r\n}\r\nget limitInputTo(){\r\n return [...this.accountTreeKeys.map((key) => ({\r\n value: key,\r\n label: key,\r\n })),{\r\n value:undefined,\r\n label:'None'\r\n }]\r\n}\r\n\r\n}\r\n","\n\n<mat-list *ngIf=\"(value?.length||0) > 0; else noInputs\">\n <mat-toolbar>\n Additional inputs configuration\n </mat-toolbar>\n <mat-form-field \n (mouseover)=\"hovered = i\"\n subscriptSizing=\"dynamic\" \n (mouseleave)=\"hovered = null\"\n *ngFor=\"let input of value; let i = index\" style=\" margin-bottom: 8px;\" appearance=\"outline\" >\n <mat-label>\n {{ input.label }}\n </mat-label>\n <mat-select [disabled]=\"disabled\" matNativeControl \n \n [value]=\"input.segment\"\n\n placeholder=\"select segment\" (selectionChange)=\"inputSegmentChanged($event,i)\"\n >\n \n \n @for (segment of limitInputTo; track segment.value) {\n <mat-option [value]=\"segment.value\" >{{segment.label}}</mat-option>\n }\n\n\n </mat-select>\n <mat-hint>\n Link formula to an input value\n </mat-hint>\n </mat-form-field>\n\n</mat-list>\n\n<ng-template #noInputs>\n <div *ngIf=\"mapToData?.id\" class=\"tree-instructions\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span><strong>\n No input configuration available. \n </strong> <br>\n Start by adding inputs below.</span>\n </div>\n\n</ng-template>\n\n\n\n\n<mat-toolbar *ngIf=\"!isAddingNew && editingIndex === null && mapToData?.id\">\n <button [disabled]=\"disabled\" style=\"width: 100%;\" (click)=\"startAddNew()\" mat-stroked-button>\n <mat-icon>\n add\n </mat-icon>\n Add New Input\n </button>\n</mat-toolbar>\n\n<ng-template #InputEditor>\n <h1>\n Not implemented yet\n </h1>\n\n not implemented\n</ng-template>\n"],"names":["i3","i4","i5","i6","i7","i8"],"mappings":"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"}
|