ngx-t-forms 2.0.29 → 2.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs +104 -0
- package/fesm2022/ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs +85 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs +643 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs +97 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs +195 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs +261 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs +85 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs +156 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs +368 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs +704 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs +294 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs +240 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs +205 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs +86 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs +22 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs +179 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs +319 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs +379 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs +124 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs +31 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs +180 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs +2 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs +105 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs +181 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-map-mat-options-keys-CbdW82su.mjs → ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs} +12 -14
- package/fesm2022/ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs +66 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs +211 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs +165 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs +38 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs +38 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs +126 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs +336 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs +74 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs +905 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs +19461 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs +555 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs +748 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs +358 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs +272 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs +398 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs +38 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs +98 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs +150 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs +169 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs +204 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs +95 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs +82 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs +733 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs +1303 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs.map +1 -0
- package/fesm2022/ngx-t-forms.mjs +2 -1
- package/fesm2022/ngx-t-forms.mjs.map +1 -1
- package/package.json +20 -18
- package/styles/_editor-mixins.scss +62 -0
- package/styles/_json-editor-syntax.scss +26 -0
- package/styles/_signature-pad.scss +26 -0
- package/styles/_tokens.scss +148 -0
- package/types/ngx-t-forms.d.ts +1767 -621
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs +0 -313
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs +0 -191
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs +0 -207
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs +0 -204
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs +0 -289
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs +0 -134
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs +0 -22
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs +0 -270
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs +0 -345
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs +0 -147
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-map-mat-options-keys-CbdW82su.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs +0 -105
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs +0 -109
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs +0 -155
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs +0 -28
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs +0 -43
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs +0 -116
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs +0 -296
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs +0 -83
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs +0 -16844
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs +0 -613
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs +0 -269
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs +0 -190
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs +0 -291
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs +0 -156
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs +0 -186
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs +0 -187
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs +0 -215
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs","sources":["../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/colorCoding.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/configureCols.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/functions/getListCalculated.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.html"],"sourcesContent":["export class ColorScale {\r\n private min: number;\r\n private max: number;\r\n private alpha: number;\r\n private colorStops: Color[];\r\n\r\n constructor(\r\n min: number,\r\n max: number,\r\n colorStops: string[],\r\n alpha: number = 1\r\n ) {\r\n validateMinMaxValues(min, max);\r\n validateColorStops(colorStops);\r\n validateAlphaValue(alpha);\r\n\r\n this.min = min;\r\n this.max = max;\r\n this.alpha = alpha;\r\n this.colorStops = colorStops.map((colorStop) =>\r\n hexToColor(colorStop, alpha)\r\n );\r\n }\r\n\r\n getColor(value: number) {\r\n const numOfColorStops = this.colorStops.length;\r\n if (value < this.min) return this.colorStops[0];\r\n if (value > this.max) return this.colorStops[numOfColorStops - 1];\r\n\r\n const range = this.max - this.min;\r\n\r\n let weight = (value - this.min) / range;\r\n const colorStopIndex = Math.max(\r\n Math.ceil(weight * (numOfColorStops - 1)),\r\n 1\r\n );\r\n\r\n const minColor = this.colorStops[colorStopIndex - 1];\r\n const maxColor = this.colorStops[colorStopIndex];\r\n if(maxColor === undefined) return minColor;\r\n if(minColor === undefined) return maxColor;\r\n\r\n weight = weight * (numOfColorStops - 1) - (colorStopIndex - 1);\r\n\r\n const r = Math.floor(weight * maxColor.r + (1 - weight) * minColor.r);\r\n const g = Math.floor(weight * maxColor.g + (1 - weight) * minColor.g);\r\n const b = Math.floor(weight * maxColor.b + (1 - weight) * minColor.b);\r\n\r\n return new Color(r, g, b, this.alpha);\r\n }\r\n}\r\n\r\nexport function validateMinMaxValues(min: number, max: number) {\r\n if (min > max) {\r\n throw new Error('The minimum value must be less than the maximum value.');\r\n }\r\n}\r\n\r\nexport function validateColorStops(colorStops: string[]) {\r\n if (colorStops.length < 2) {\r\n throw new Error('At least two colors must be provided.');\r\n }\r\n\r\n colorStops.forEach((str) => {\r\n if (!isValidHexColor(str)) {\r\n throw new Error(`${str} is not a valid hex color.`);\r\n }\r\n });\r\n}\r\n\r\nexport function validateAlphaValue(alpha: number) {\r\n if (alpha < 0 || alpha > 1) {\r\n throw new Error('The alpha value must be between 0 and 1.');\r\n }\r\n}\r\n\r\nexport function hexToColor(hex: string, alpha: number) {\r\n if (isValid3DigitHexColor(hex)) {\r\n hex = convertTo6DigitHexColor(hex);\r\n }\r\n\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (!!result?.[1] && !!result?.[2] && !!result?.[3]) {\r\n return new Color(\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16),\r\n alpha\r\n );\r\n } else {\r\n throw new Error(`${hex} is not a valid hex color.`);\r\n }\r\n}\r\n\r\nexport function isValidHexColor(colorString: string) {\r\n return (\r\n isValid3DigitHexColor(colorString) || isValid6DigitHexColor(colorString)\r\n );\r\n}\r\n\r\nfunction isValid3DigitHexColor(colorString: string) {\r\n const hexColorRegex = /^#(?:[0-9a-fA-F]{3})$/;\r\n return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction isValid6DigitHexColor(colorString: string) {\r\n const hexColorRegex = /^#(?:[0-9a-fA-F]{6})$/;\r\n return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction convertTo6DigitHexColor(threeDigitHex: string) {\r\n return threeDigitHex\r\n .substring(1)\r\n .split('')\r\n .map((char) => {\r\n return char + char;\r\n })\r\n .join('');\r\n}\r\n\r\nfunction componentToHex(c: number) {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n}\r\n\r\nexport function rgbaToHex(color: Color) {\r\n const r = Math.floor(color.r * color.a);\r\n const g = Math.floor(color.g * color.a);\r\n const b = Math.floor(color.b * color.a);\r\n return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;\r\n}\r\n\r\nexport class Color {\r\n public r: number;\r\n public g: number;\r\n public b: number;\r\n public a: number;\r\n\r\n constructor(r: number, g: number, b: number, a: number = 1) {\r\n validateAlphaValue(a);\r\n\r\n this.r = r;\r\n this.g = g;\r\n this.b = b;\r\n this.a = a;\r\n }\r\n\r\n toRGBString() {\r\n return `rgb(${Math.floor(this.r * this.a)},${Math.floor(\r\n this.g * this.a\r\n )},${Math.floor(this.b * this.a)})`;\r\n }\r\n\r\n toRGBAString() {\r\n return `rgba(${this.r},${this.g},${this.b},${this.a})`;\r\n }\r\n\r\n toHexString() {\r\n return rgbaToHex(this);\r\n }\r\n}\r\n","\r\n\r\n\r\nimport { DocumentLitsLabelConfigInterfaceValueType, FormColumnInputs, InputDataTypes, InputPipeTypes } from \"ngx-t-forms-types\";\r\n\r\n/** Column metadata used by the multi-row table view. */\r\nexport interface ColumnConfigEntry {\r\n property: string;\r\n formControlName?: string;\r\n label?: string;\r\n dataType?: DocumentLitsLabelConfigInterfaceValueType | InputPipeTypes | InputDataTypes | string;\r\n type?: string;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function configureCols(inputConfig:FormColumnInputs,tempLabels:string[]):{displayedColumnsInOrder:string[],columnsConfig:Record<string, any>}\r\n{\r\n try {\r\n\r\n const labelInputs = ((inputConfig?.formInputs || []) as FormColumnInputs[]).filter(input=>input.showAsLabel || tempLabels.includes(input.formControlName) )\r\n const cols = [];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const colConfigs: Record<string, any> = {};\r\n for (\r\n let index = 0;\r\n index < ( labelInputs).length;\r\n index++\r\n ) {\r\n const c = labelInputs [index]\r\n const col = {...c} as FormColumnInputs;\r\n cols.push(`${inputConfig.id}.${col.id}`);\r\n if(!col.id){\r\n continue\r\n }\r\n colConfigs[`${inputConfig.id}.${col.id}`]={\r\n property :`${inputConfig.id}.${col.id}`,\r\n formControlName: col.formControlName,\r\n label: col.label,\r\n dataType: getDataType(col)\r\n }\r\n\r\n }\r\n \r\n //add remove section config\r\n cols.push('itemRemovalButton');\r\n colConfigs['itemRemovalButton'] = {\r\n property: 'itemRemovalButton',\r\n label: '',\r\n type: 'removal',\r\n };\r\n // end\r\n return {\r\n displayedColumnsInOrder : cols.filter((c) => !!c ) as string[],\r\n columnsConfig : colConfigs}\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to configure columns';\r\n throw new Error(message)\r\n \r\n }\r\n \r\n}\r\n\r\nfunction getDataType(input:FormColumnInputs):DocumentLitsLabelConfigInterfaceValueType|InputPipeTypes | InputDataTypes{\r\n try {\r\n if(input.pipe?.pipeType){\r\n return input.pipe.pipeType\r\n }\r\n const inputDataType = input.dataType;\r\n switch (inputDataType) {\r\n\r\n\r\n case InputDataTypes.Number:\r\n\r\n return DocumentLitsLabelConfigInterfaceValueType.number\r\n\r\n case InputDataTypes.Date:\r\n \r\n return DocumentLitsLabelConfigInterfaceValueType.date\r\n case InputDataTypes.Array:\r\n return InputDataTypes.Array\r\n case InputDataTypes.Boolean:\r\n return InputDataTypes.Boolean\r\n case InputDataTypes.Object:\r\n return InputDataTypes.Object\r\n\r\n\r\n \r\n \r\n\r\n default:\r\n return DocumentLitsLabelConfigInterfaceValueType.string\r\n \r\n }\r\n \r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Failed to get data type'\r\n throw new Error(msg)\r\n }\r\n}","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n computed,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n CalculationFunctions,\r\n IMultiple,\r\n ITowerStepColumn,\r\n MultipleInputAvailableOperations,\r\n TableColumnConfigInterface,\r\n} from 'ngx-t-forms-types';\r\n\r\nimport { ColorScale } from '../../../../../../services/core/t-input-controller/functions/colorCoding';\r\nimport { configureCols } from '../../../../../../services/core/t-input-controller/functions/configureCols';\r\nimport { FormatDataPipe } from '../../../../../../../lib/shared/pipes/format-Data.pipe';\r\nimport { TDynamicDataViewComponent } from '../../../../../t-dynamic-data-view/t-dynamic-data-view.component';\r\n\r\n/**\r\n * Row of a multiple-input data source. Each row is a heterogeneous record indexed by composite\r\n * column keys (`${parentId}.${inputId}`) plus the calculation-function system key. Cell values\r\n * are dynamic — narrowed at usage sites.\r\n */\r\ntype MultipleInputRow = Record<string, unknown> & { id?: string };\r\n\r\n/** Column config emitted by `configureCols`. */\r\ntype ColumnConfig = Partial<TableColumnConfigInterface> & {\r\n key?: string;\r\n dataType?: string;\r\n type?: string;\r\n};\r\n\r\n@Component({\r\n selector: 'lib-multiple-input-table-view',\r\n templateUrl: './multiple-input-table-view.component.html',\r\n styleUrl: './multiple-input-table-view.component.css',\r\n imports: [\r\n MatButtonModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatTooltipModule,\r\n FormatDataPipe,\r\n TDynamicDataViewComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableViewComponent {\r\n readonly inputConfig = input<ITowerStepColumn | undefined>(undefined);\r\n readonly dataSource = input<MatTableDataSource<MultipleInputRow>>(\r\n new MatTableDataSource<MultipleInputRow>(),\r\n );\r\n readonly applyOptionsTo = input<MultipleInputRow | undefined>(undefined);\r\n readonly formGroup = input<FormGroup | null>(null);\r\n\r\n readonly onEditItem = output<string>();\r\n readonly onDeleteItem = output<MultipleInputRow>();\r\n readonly onCopy = output<string>();\r\n readonly onApplyOptionsTo = output<MultipleInputRow>();\r\n readonly showItemAsLabel = output<void>();\r\n\r\n protected readonly colConfig = computed(() => {\r\n const cfg = this.inputConfig();\r\n if (!cfg) {\r\n return {\r\n columnsConfig: {} as Record<string, ColumnConfig>,\r\n displayedColumnsInOrder: [] as string[],\r\n };\r\n }\r\n return configureCols(cfg, this.tempLabels);\r\n });\r\n\r\n protected readonly displayedColumnsInOrderSig = computed(\r\n () => this.colConfig().displayedColumnsInOrder,\r\n );\r\n\r\n protected readonly allPossibleLabels = computed(() => {\r\n const cfg = this.inputConfig();\r\n const displayed = this.displayedColumnsInOrderSig();\r\n return (\r\n cfg?.formInputs?.map((inp) => ({\r\n label: inp.label,\r\n selected: displayed.includes(`${cfg?.id}.${inp.id}`),\r\n formControlName: inp.formControlName,\r\n })) || []\r\n );\r\n });\r\n\r\n protected readonly userCanEdit = computed(() => {\r\n const cfg = this.inputConfig();\r\n if (!cfg) return false;\r\n if (!cfg.multipleInputAvailableOperations) return true;\r\n return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Update);\r\n });\r\n\r\n protected readonly userCanRemove = computed(() => {\r\n const cfg = this.inputConfig();\r\n if (!cfg) return false;\r\n if (!cfg.multipleInputAvailableOperations) return true;\r\n return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Remove);\r\n });\r\n\r\n protected readonly userCanAdd = computed(() => {\r\n const cfg = this.inputConfig();\r\n if (!cfg) return false;\r\n if (!cfg.multipleInputAvailableOperations) return true;\r\n return cfg.multipleInputAvailableOperations.includes(MultipleInputAvailableOperations.Add);\r\n });\r\n\r\n protected readonly userCanApplyOptionsTo = computed(() => {\r\n return this.userCanEdit() || this.userCanRemove() || this.userCanAdd();\r\n });\r\n\r\n protected applyOptionsToFn(item: MultipleInputRow): void {\r\n this.onApplyOptionsTo.emit(item);\r\n }\r\n\r\n protected editItem(row: MultipleInputRow): void {\r\n const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n this.onEditItem.emit(rowId);\r\n }\r\n\r\n protected copy(row: MultipleInputRow): void {\r\n const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n this.onCopy.emit(rowId);\r\n }\r\n\r\n protected areYouSureYouWantToDeleteRow: Record<string, boolean> = {};\r\n\r\n protected isAboutToDeleteRow(row: MultipleInputRow): boolean {\r\n return !!this.areYouSureYouWantToDeleteRow[row[`${this.inputConfig()?.id}.id`] as string];\r\n }\r\n\r\n protected countDownDate: Date = new Date();\r\n protected deletionTimers: Record<string, ReturnType<typeof setTimeout>> = {};\r\n\r\n protected getCountdownSeconds(): number {\r\n const now = new Date();\r\n const timeElapsed = (now.getTime() - this.countDownDate.getTime()) / 1000;\r\n const percentage = Math.min(Math.round((timeElapsed / 3) * 100), 100);\r\n return percentage;\r\n }\r\n\r\n protected secondsCountDown(): string {\r\n return (3 - ((this.getCountdownSeconds() / 100) * 3)).toFixed(1);\r\n }\r\n\r\n protected multipleInputRemoveItem(event: Event, row: MultipleInputRow): void {\r\n const rowId = row[`${this.inputConfig()?.id}.id`] as string;\r\n\r\n if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n if (this.deletionTimers[rowId]) {\r\n clearTimeout(this.deletionTimers[rowId]);\r\n delete this.deletionTimers[rowId];\r\n }\r\n delete this.areYouSureYouWantToDeleteRow[rowId];\r\n } else {\r\n this.areYouSureYouWantToDeleteRow[rowId] = true;\r\n this.countDownDate = new Date();\r\n\r\n this.deletionTimers[rowId] = setTimeout(() => {\r\n if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n this.onDeleteItem.emit(row);\r\n delete this.areYouSureYouWantToDeleteRow[rowId];\r\n delete this.deletionTimers[rowId];\r\n }\r\n }, 3000);\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n protected returnBackground(row: MultipleInputRow, columnsConfig?: ColumnConfig): string | undefined {\r\n let background = '';\r\n const ds = this.dataSource();\r\n if (\r\n ds\r\n ? ds.data.length > 1\r\n ? columnsConfig?.['colorScale']\r\n : false\r\n : false\r\n ) {\r\n const inputCfg = this.inputConfig() as IMultiple;\r\n const colKey = columnsConfig?.['key'] ?? '';\r\n const point = Number(row[colKey]);\r\n const inputIsGrouped = inputCfg.groupBy;\r\n const groupKey = inputCfg.groupBy?.[0] || '';\r\n const dataSet = inputIsGrouped\r\n ? ds.data.filter(\r\n (s) => (s as MultipleInputRow)[groupKey] === row[groupKey],\r\n )\r\n : new Array(ds.data);\r\n const arrayValues: number[] = dataSet.map((vr) => Number((vr as MultipleInputRow)[colKey]));\r\n const max = Math.max(...arrayValues);\r\n const min = Math.min(...arrayValues);\r\n const hasNun = isNaN(max) || isNaN(min);\r\n if (!hasNun && Number(max) !== Number(min)) {\r\n const colorScale = new ColorScale(\r\n min,\r\n max,\r\n ['#2fdf75', '#FFA500', '#ff4961'],\r\n 0.8,\r\n );\r\n\r\n const color: string | undefined = colorScale.getColor(point)?.toRGBAString();\r\n background = color ?? '';\r\n }\r\n }\r\n return background;\r\n }\r\n\r\n protected hasTopBorder(row: MultipleInputRow): boolean {\r\n const inputCfg = this.inputConfig() as IMultiple;\r\n const inputIsGrouped = inputCfg?.groupBy;\r\n const ds = this.dataSource();\r\n if (inputIsGrouped) {\r\n const indexOfRow = ds.data.indexOf(row);\r\n const rowIsFirstInTable = indexOfRow === 0;\r\n\r\n if (!inputCfg.groupBy) {\r\n return false;\r\n }\r\n const groupKey = inputCfg.groupBy?.[0] ?? '';\r\n const isFirstInGroup = rowIsFirstInTable\r\n ? true\r\n : (ds.data[indexOfRow - 1] as MultipleInputRow)[groupKey] !==\r\n row[groupKey];\r\n\r\n return isFirstInGroup;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n protected getCalculationFunction(row: MultipleInputRow): string {\r\n const func = row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] as CalculationFunctions;\r\n\r\n switch (func) {\r\n case CalculationFunctions.Sum:\r\n return 'TOTAL';\r\n case CalculationFunctions.Avg:\r\n return 'AVERAGE';\r\n case CalculationFunctions.Max:\r\n return 'MAX';\r\n case CalculationFunctions.Min:\r\n return 'MIN';\r\n default:\r\n return func;\r\n }\r\n }\r\n\r\n protected tempLabels: string[] = [];\r\n protected toggleTepLabel(event: Event, label: string): void {\r\n if (this.tempLabels.includes(label)) {\r\n this.tempLabels = this.tempLabels.filter((l) => l !== label);\r\n } else {\r\n this.tempLabels.push(label);\r\n }\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n get getColConfig() {\r\n return this.colConfig();\r\n }\r\n\r\n get displayedColumnsInOrder(): string[] {\r\n return this.displayedColumnsInOrderSig();\r\n }\r\n\r\n protected SYSTEM_KEY_IN_EDIT: string | null = null;\r\n protected rowIsInEdit(row: MultipleInputRow): boolean {\r\n const cfg = this.inputConfig();\r\n const fg = this.formGroup();\r\n return (\r\n !!cfg?.formIsOpen &&\r\n fg?.controls[`${cfg?.id}.id`]?.value === row[`${cfg?.id}.id`]\r\n );\r\n }\r\n\r\n protected overlayOpen = false;\r\n protected overlayData: unknown = null;\r\n protected overlayPosition: { top: number; left: number } = { top: 0, left: 0 };\r\n\r\n protected openDataOverlay(event: MouseEvent, data: unknown): void {\r\n event.stopPropagation();\r\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n this.overlayData = data;\r\n this.overlayPosition = { top: rect.bottom + 4, left: rect.left };\r\n this.overlayOpen = true;\r\n }\r\n\r\n protected closeDataOverlay(): void {\r\n this.overlayOpen = false;\r\n this.overlayData = null;\r\n }\r\n\r\n protected fullView = false;\r\n}\r\n","@defer (on viewport) {\n\n @if (getColConfig.displayedColumnsInOrder.length === 0) {\n <div class=\"mit-state mit-state--inline\">No columns</div>\n }\n\n <div class=\"table-container\">\n\n <table mat-table [dataSource]=\"(dataSource() || [])\" class=\"mit-table\" matSort matSortActive=\"created\"\n matSortDisableClear matSortDirection=\"desc\">\n @for (col of (displayedColumnsInOrder || []); track col) {\n <ng-container [matColumnDef]=\"col\">\n <th mat-header-cell *matHeaderCellDef>\n <span class=\"mit-th-label\">\n {{ getColConfig.columnsConfig?.[col]?.[\"label\"] }}\n </span>\n @if ($last) {\n <button matTooltip=\"Show other values\" [matMenuTriggerFor]=\"colOptions\" [matMenuTriggerData]=\"{}\"\n class=\"mit-th-action\" mat-icon-button>\n <mat-icon>label</mat-icon>\n </button>\n }\n </th>\n <td [class.functionClass]=\"row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION']\"\n [style.background]=\"returnBackground(row, getColConfig.columnsConfig?.[col])\"\n mat-cell *matCellDef=\"let row\">\n @if (getColConfig.columnsConfig?.[col]?.['type'] === 'removal') {\n <div class=\"cellClass\">\n\n @if (!!row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] && !row['id'] && !inputConfig()?.multipleInputInEditId ||\n !!row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] && inputConfig()?.multipleInputInEditId &&\n inputConfig()?.multipleInputInEditId !== row['id']) {\n <div class=\"mit-fn-label\">\n <strong>{{ getCalculationFunction(row) }}</strong>\n </div>\n }\n @if (\n userCanApplyOptionsTo() &&\n !row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] &&\n row[''] !== 'true' && !inputConfig()?.readonly\n ) {\n <button mat-icon-button [color]=\"t.menuOpen ? 'primary' : 'basic'\" [matMenuTriggerFor]=\"rowOptions\" [matMenuTriggerData]=\"{row:row}\" #t=\"matMenuTrigger\"\n (click)=\"applyOptionsToFn(row)\"\n class=\"mit-row-trigger\">\n @if (rowIsInEdit(row)) {\n <mat-icon color=\"primary\">edit</mat-icon>\n } @else {\n <mat-icon>{{ t.menuOpen ? 'close' : 'more_horiz' }}</mat-icon>\n }\n </button>\n }\n\n @if (row['SYSTEM_KEY_IN_EDIT']) {\n <mat-chip>In {{ inputConfig()?.readonly ? 'View' : 'Edit' }}</mat-chip>\n }\n\n </div>\n }\n @if (getColConfig.columnsConfig && getColConfig.columnsConfig?.[col]?.type !== 'removal') {\n <div class=\"cellClass\">\n <span>\n @if (getColConfig.columnsConfig?.[col].dataType === 'array' || getColConfig.columnsConfig?.[col].dataType === 'object') {\n <button mat-icon-button class=\"mit-data-button\"\n matTooltip=\"View data\"\n (click)=\"openDataOverlay($event, row[col])\">\n <mat-icon class=\"mit-data-icon\">data_object</mat-icon>\n </button>\n } @else {\n {{ row[col] | formatData: getColConfig.columnsConfig?.[col].dataType }}\n }\n </span>\n </div>\n }\n </td>\n </ng-container>\n }\n\n\n <tr mat-header-row *matHeaderRowDef=\"getColConfig.displayedColumnsInOrder\"></tr>\n <tr [class.mit-group-start]=\"hasTopBorder(row)\" mat-row\n *matRowDef=\"let row; columns: getColConfig.displayedColumnsInOrder\"></tr>\n </table>\n\n @if (!(dataSource().data) || (dataSource().data).length === 0) {\n <div class=\"mit-empty\">\n <mat-icon class=\"mit-empty-icon\">list</mat-icon>\n <strong class=\"mit-empty-title\">No items yet</strong>\n <p class=\"mit-empty-text\">\n <strong>Click the add button</strong> to create a new row. You'll fill in details using a form, and each\n saved entry appears as a row here.\n </p>\n </div>\n }\n </div>\n} @placeholder {\n <div class=\"mit-placeholder\">\n <mat-spinner diameter=\"32\" />\n </div>\n}\n\n@if (overlayOpen) {\n <div class=\"data-overlay-backdrop\" (click)=\"closeDataOverlay()\"></div>\n <div class=\"data-overlay-panel\"\n [style.top.px]=\"overlayPosition.top\"\n [style.left.px]=\"overlayPosition.left\"\n (click)=\"$event.stopPropagation()\">\n <div class=\"data-overlay-header\">\n <span class=\"data-overlay-title\">\n <mat-icon class=\"data-overlay-title-icon\">data_object</mat-icon>\n Data\n </span>\n <button mat-icon-button class=\"mit-data-button\" (click)=\"closeDataOverlay()\">\n <mat-icon class=\"mit-data-icon\">close</mat-icon>\n </button>\n </div>\n <div class=\"data-overlay-body\">\n <lib-t-dynamic-data-view [data]=\"overlayData\" />\n </div>\n </div>\n}\n\n<mat-menu #colOptions=\"matMenu\">\n <ng-template matMenuContent>\n @for (label of allPossibleLabels(); track label.label) {\n <button mat-menu-item (click)=\"toggleTepLabel($event, label.formControlName);\">\n <mat-icon>{{ label.selected ? 'check_circle' : 'radio_button_unchecked' }}</mat-icon>\n {{ label.label }}\n </button>\n }\n </ng-template>\n</mat-menu>\n\n<mat-menu #rowOptions=\"matMenu\">\n <ng-template matMenuContent let-row=\"row\">\n @if (!inputConfig()?.readonly) {\n @if (userCanEdit()) {\n <button mat-menu-item (click)=\"editItem(row)\">\n <mat-icon>edit</mat-icon>\n <div class=\"option-text\">\n <div class=\"option-main-text\">Edit</div>\n <div class=\"option-sub-text\">\n {{ inputConfig()?.readonly ? 'View item properties' : 'Modify item properties' }}\n </div>\n </div>\n </button>\n }\n @if (userCanAdd()) {\n <button mat-menu-item (click)=\"copy(row)\">\n <mat-icon>content_copy</mat-icon>\n <div class=\"option-text\">\n <div class=\"option-main-text\">Duplicate</div>\n <div class=\"option-sub-text\">Create a copy with same values</div>\n </div>\n </button>\n }\n\n @if (userCanRemove()) {\n @if (isAboutToDeleteRow(row)) {\n <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\n <mat-icon color=\"accent\">cancel</mat-icon>\n <div class=\"option-text\">\n <div class=\"option-main-text option-main-text--cancel\">Cancel Deletion</div>\n <div class=\"option-sub-text\">Auto-deleting in {{ secondsCountDown() }} seconds...</div>\n </div>\n </button>\n <div class=\"deletion-progress-container\">\n <mat-progress-bar color=\"warn\" mode=\"determinate\" [value]=\"getCountdownSeconds()\"></mat-progress-bar>\n @if (getCountdownSeconds() > 75) {\n <div class=\"deletion-message\">Deleting soon...</div>\n }\n </div>\n } @else {\n <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\n <mat-icon color=\"warn\">delete_outline</mat-icon>\n <div class=\"option-text\">\n <div class=\"option-main-text\">Delete</div>\n <div class=\"option-sub-text\">Will delete after 3 seconds (click to cancel)</div>\n </div>\n </button>\n }\n }\n }\n </ng-template>\n</mat-menu>\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { TFormInputComponent } from '../../../../t-form-input.component';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { Subject, takeUntil, tap, timer } from 'rxjs';\r\nimport { CalculationFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { IMultipleInputCal } from 'ngx-t-forms-types';\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n\r\n@Component({\r\n selector: 'lib-multiple-input-table-edit',\r\n imports: [\r\n CommonModule,\r\n DragDropModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatDividerModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ],\r\n templateUrl: './multiple-input-table-edit.component.html',\r\n styleUrl: './multiple-input-table-edit.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableEditComponent implements OnDestroy {\r\n protected readonly InputComponent = TFormInputComponent;\r\n\r\n readonly inputConfig = input.required<ITowerStepColumn>();\r\n readonly editorMode = input<boolean>(false);\r\n readonly formGroup = input<FormGroup | null>(null);\r\n readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n\r\n readonly onSaveMultipleInputForm = output<void>();\r\n readonly editMultipleInput = output<ITowerStepColumn>();\r\n readonly deleteInput = output<ITowerStepColumn>();\r\n readonly showItemAsLabel = output<ITowerStepColumn>();\r\n readonly addFunction = output<IMultipleInputCal>();\r\n readonly reorderItems = output<CdkDragDrop<ITowerStepColumn[], unknown, unknown>>();\r\n\r\n protected readonly calculationFunctions = Object.values(CalculationFunctions);\r\n\r\n protected activeInput: string = '';\r\n protected dragging: boolean = false;\r\n protected overId: string | null = null;\r\n protected areYouSure: boolean = false;\r\n\r\n protected countdownSeconds: {\r\n [key: string]: {\r\n count: number | null;\r\n stop$: Subject<void>;\r\n };\r\n } = {};\r\n\r\n protected readonly innerInputs = computed(() => {\r\n const cfg = this.inputConfig();\r\n return (\r\n cfg?.formInputs?.map(\r\n (input) =>\r\n ({\r\n ...input,\r\n originalId: input.id,\r\n id: `${cfg?.id}.${input.id}`,\r\n } as ITowerStepColumn),\r\n ) || []\r\n );\r\n });\r\n\r\n protected readonly rowInUpdate = computed(() => {\r\n const cfg = this.inputConfig();\r\n const fg = this.formGroup();\r\n return !!cfg?.formIsOpen && !!fg?.controls[`${cfg?.id}.id`]?.value;\r\n });\r\n\r\n protected readonly formInvalid = computed(() => {\r\n const cfg = this.inputConfig();\r\n const fg = this.formGroup();\r\n const allControls: AbstractControl<unknown, unknown>[] = [];\r\n cfg?.formInputs?.forEach((input) => {\r\n const control = fg?.controls[`${cfg?.id}.${input.id}`];\r\n if (control) {\r\n allControls.push(control);\r\n }\r\n });\r\n return allControls.some((control) => control?.invalid || !control);\r\n });\r\n\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n ngOnDestroy(): void {\r\n Object.values(this.countdownSeconds).forEach(({ stop$ }) => stop$.complete());\r\n }\r\n\r\n protected saveMultipleInputForm(): void {\r\n this.onSaveMultipleInputForm.emit();\r\n }\r\n\r\n protected inputWillBeRemovedIn(id: string): number | null | undefined {\r\n return this.countdownSeconds[id]?.count;\r\n }\r\n\r\n protected removeInput(item: ITowerStepColumn): void {\r\n if (this.countdownSeconds[item.id]) {\r\n this.stopDeletion(item.id);\r\n return;\r\n }\r\n\r\n this.countdownSeconds[item.id] = {\r\n count: 5,\r\n stop$: new Subject<void>(),\r\n };\r\n\r\n const countdown$ = timer(0, 1000).pipe(\r\n tap((secondsElapsed) => {\r\n const data = this.countdownSeconds[item.id];\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const remainingTime = 5 - secondsElapsed;\r\n if (remainingTime <= 0) {\r\n this.formDeleteInput(item);\r\n this.stopDeletion(item.id);\r\n } else {\r\n data.count = remainingTime;\r\n }\r\n }),\r\n takeUntil(this.countdownSeconds[item.id]!.stop$),\r\n takeUntilDestroyed(this.#destroyRef),\r\n );\r\n\r\n countdown$.subscribe({\r\n complete: () => {},\r\n });\r\n }\r\n\r\n protected stopDeletion(id: string): void {\r\n if (this.countdownSeconds[id]) {\r\n this.countdownSeconds[id]?.stop$.next();\r\n delete this.countdownSeconds[id];\r\n }\r\n }\r\n\r\n protected formDeleteInput(item: ITowerStepColumn): void {\r\n this.deleteInput.emit(item);\r\n }\r\n\r\n protected dropItems(event: CdkDragDrop<ITowerStepColumn[], unknown, unknown>): void {\r\n this.reorderItems.emit(event);\r\n }\r\n\r\n protected editInput(input: ITowerStepColumn): void {\r\n this.editMultipleInput.emit(input);\r\n }\r\n\r\n protected toggleLabel(item: ITowerStepColumn): void {\r\n this.showItemAsLabel.emit(item);\r\n }\r\n\r\n protected toggleFunction(func: CalculationFunctions, _inputId: string): void {\r\n const addFunction: IMultipleInputCal = {\r\n id: uuidv4(),\r\n inputId: this.activeInput,\r\n func,\r\n } as IMultipleInputCal;\r\n this.addFunction.emit(addFunction);\r\n }\r\n\r\n protected selectedFunction(func: CalculationFunctions): IMultipleInputCal | undefined {\r\n return this.inputConfig()?.calculateListFunctions?.find(\r\n (f) => f.inputId === this.activeInput && f.func === func,\r\n );\r\n }\r\n\r\n protected closeMultipleInput(): void {\r\n if (this.areYouSure) {\r\n this.formBuilderFunctions()?.multipleInputToggleForm(this.inputConfig().id, false);\r\n this.areYouSure = false;\r\n return;\r\n }\r\n this.areYouSure = true;\r\n }\r\n}\r\n","<mat-card appearance=\"outlined\" class=\"edit-card mat-elevation-z4\">\n <mat-card-content>\n <div class=\"list row\" (cdkDropListDropped)=\"dropItems($event)\"\n [cdkDropListData]=\"innerInputs()\" cdkDropList #InputList=\"cdkDropList\">\n @for (innerInput of innerInputs(); track innerInput.id) {\n <ng-container>\n @if (editorMode()) {\n @if (!!formGroup()) {\n <mat-card (mouseover)=\"activeInput = innerInput.id\" cdkDrag\n (cdkDragStarted)=\"dragging = true\" (cdkDragReleased)=\"dragging = false\"\n [class.inputCardElevated]=\"activeInput === innerInput.id\"\n [class.inputCard]=\"activeInput !== innerInput.id\"\n [class]=\"'col-md-' + (dragging ? '12' : innerInput.colSize)\" class=\"box\">\n <ng-container *ngComponentOutlet=\"InputComponent;\n inputs: {\n inputConfig: innerInput,\n formGroup: formGroup(),\n formBuilderFunctions: formBuilderFunctions(),\n }\">\n </ng-container>\n @if (activeInput === innerInput.id) {\n <mat-card-actions class=\"input-actions\">\n <span class=\"spacer\"></span>\n <button [matTooltip]=\"'Edit Input: ' + innerInput.label\"\n (click)=\"editInput(innerInput)\" mat-icon-button>\n <mat-icon>edit</mat-icon>\n </button>\n @if (!!inputWillBeRemovedIn(innerInput.id)) {\n <button (mouseover)=\"overId = innerInput.id\" (mouseout)=\"overId = null\"\n (click)=\"removeInput(innerInput)\" color=\"warn\" mat-stroked-button>\n <div class=\"countdown-button\">\n <mat-progress-spinner class=\"cancelProgress\" color=\"primary\"\n [value]=\"((inputWillBeRemovedIn(innerInput.id) || 0) / 5) * 100\">\n </mat-progress-spinner>\n {{ overId === innerInput.id ? 'Click to cancel' : 'Deleting in' }}\n {{ inputWillBeRemovedIn(innerInput.id) }}\n </div>\n </button>\n } @else if (inputConfig().systemDefault !== true && innerInput.systemDefault !== true) {\n <button [matTooltip]=\"'Delete input ' + innerInput.label\"\n (click)=\"removeInput(innerInput)\" mat-icon-button>\n <mat-icon>delete</mat-icon>\n </button>\n }\n <span class=\"action-divider\"></span>\n @if (!!innerInput.showAsLabel && innerInput.dataType === 'number' || !!innerInput.showAsLabel && innerInput.type === 'number') {\n <button\n [matMenuTriggerFor]=\"calculationMenu\"\n [matMenuTriggerData]=\"{inputId:innerInput.originalId || innerInput.id}\"\n [matTooltip]=\"'calculate sum,avg,min,max'\"\n mat-icon-button>\n <mat-icon>calculate</mat-icon>\n </button>\n }\n <button [color]=\"innerInput.showAsLabel ? 'primary' : ''\"\n (click)=\"toggleLabel(innerInput)\"\n [matTooltip]=\"innerInput.showAsLabel ? 'Hide as label' : 'Show as label'\"\n mat-icon-button>\n <mat-icon>label</mat-icon>\n </button>\n <span class=\"spacer\"></span>\n </mat-card-actions>\n }\n </mat-card>\n }\n } @else {\n <div [class]=\"'col-md-' + (dragging ? '12' : innerInput.colSize)\" class=\"box\">\n <ng-container *ngComponentOutlet=\"InputComponent;\n inputs: {\n inputConfig: innerInput,\n formGroup: formGroup(),\n formBuilderFunctions: formBuilderFunctions(),\n }\">\n </ng-container>\n </div>\n }\n </ng-container>\n }\n @if (!!editorMode() && innerInputs().length === 0) {\n <div class=\"tree-instructions\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span>\n <strong>Add Form Input</strong>\n <br>\n Manage your list by adding, editing, or removing items. Each item is customizable through a form.\n </span>\n </div>\n }\n </div>\n </mat-card-content>\n @if (innerInputs().length !== 0) {\n <mat-divider></mat-divider>\n <mat-card-actions align=\"end\" class=\"edit-card-actions\">\n <button [color]=\"areYouSure ? 'warn' : ''\"\n [class.confirm-leave]=\"areYouSure\" mat-button\n (click)=\"closeMultipleInput()\">\n {{ areYouSure ? \"leave without saving\" : \"cancel\" }}\n </button>\n @if (!inputConfig().readonly) {\n <button [disabled]=\"!!formInvalid()\" class=\"save-button\" color=\"primary\"\n (click)=\"saveMultipleInputForm()\" mat-raised-button>\n {{ rowInUpdate() ? \"Update\" : \"Save\" }}\n </button>\n }\n </mat-card-actions>\n }\n</mat-card>\n\n\n<mat-menu #calculationMenu=\"matMenu\">\n <ng-template matMenuContent let-inputId=\"sectionId\">\n @for (func of calculationFunctions; track func) {\n <button (click)=\"toggleFunction(func, inputId)\" mat-menu-item>\n {{ func }}\n @if (selectedFunction(func)) {\n <mat-icon color=\"primary\">check_circle</mat-icon>\n }\n </button>\n }\n </ng-template>\n</mat-menu>\n","\r\nimport { calculateListOveralFunctions } from \"../../../../../services/core/t-form-controller/function/calculateInputValue\";\r\nimport { CalculationFunctions, FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\ntype CalculatedRow = Record<string, unknown> & {\r\n SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION?: CalculationFunctions;\r\n};\r\n\r\nexport function getCaluculatedTableData(\r\n inputConfig: FormColumnInputs | undefined,\r\n data: Record<string, unknown>[],\r\n): Record<string, unknown>[] {\r\n try {\r\n if (!Array.isArray(data) || !inputConfig) return data;\r\n const input: FormColumnInputs = inputConfig;\r\n const funcs = (input?.calculateListFunctions || []);\r\n const allUniqueFunctionNames = [\r\n ...new Set(funcs.map((f: { inputId: string; func: CalculationFunctions }) => f.func)),\r\n ];\r\n const calculatedData: CalculatedRow[] = allUniqueFunctionNames.map((func) => {\r\n const newCalculatedData: CalculatedRow = {\r\n SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION: func,\r\n };\r\n funcs.filter((f) => f.func === func).forEach((f) => {\r\n const arrayValues = data.map((d) => Number(d[f.inputId]));\r\n newCalculatedData[f.inputId] = calculateListOveralFunctions(func, arrayValues);\r\n });\r\n return newCalculatedData;\r\n });\r\n return [...data, ...calculatedData];\r\n } catch (error) {\r\n return data;\r\n }\r\n}","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n ViewEncapsulation,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormGroup, NgControl } from '@angular/forms';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nimport { IMultiple, IMultipleInputCal, ITowerStepColumn, MultipleInputAvailableOperations } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport { MultipleInputTableViewComponent } from '../multiple-input-table-view/multiple-input-table-view.component';\r\nimport { MultipleInputTableEditComponent } from '../multiple-input-table-edit/multiple-input-table-edit.component';\r\n\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { getCaluculatedTableData } from '../../functions/getListCalculated';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\n\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\n\r\n/**\r\n * A single row inside a multiple-input table. Keys are dynamic — composed from the input\r\n * config id plus child input ids — so values are typed as `unknown`. Narrow at access sites.\r\n */\r\ntype MultipleInputRow = Record<string, unknown> & { id?: string };\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'app-multiple-input-table',\r\n nextId: 0,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-multiple-input-table',\r\n templateUrl: './multiple-input-table.component.html',\r\n styleUrls: ['./multiple-input-table.component.css'],\r\n imports: [\r\n MatButtonModule,\r\n MatIconModule,\r\n MultipleInputTableEditComponent,\r\n MultipleInputTableViewComponent,\r\n ],\r\n providers: [{ provide: MatFormFieldControl, useExisting: MultipleInputTableComponent }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class MultipleInputTableComponent extends BaseCustomInput<MultipleInputRow[] | null> {\r\n readonly editorMode = input<boolean>(false);\r\n readonly formGroup = input.required<FormGroup>();\r\n readonly inputConfig = input.required<ITowerStepColumn>();\r\n readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n super(\r\n inject(NgControl, { self: true, optional: true })!,\r\n inject<ElementRef<HTMLElement>>(ElementRef),\r\n customInputConfig,\r\n );\r\n this.listenToValueChanges();\r\n }\r\n\r\n /**\r\n * Manages custom validation errors on the form control.\r\n * Intended to be called from the ngDoCheck lifecycle hook.\r\n * This function handles both the 'required' error and the new\r\n * 'multipleInputListMissingSomeFields' custom error.\r\n */\r\n override checkValidationsAnErrors() {\r\n const control = this.ngControl?.control;\r\n\r\n // 1. Early exit if there's no form control to work with.\r\n if (!control) {\r\n return;\r\n }\r\n\r\n // --- DEFINE THE DESIRED ERROR STATE ---\r\n\r\n // 2. Determine if the custom \"multiple fields\" error should exist.\r\n let shouldHaveCustomError = false;\r\n const formInputs = (this.inputConfig() as IMultiple)?.formInputs;\r\n\r\n if (Array.isArray(formInputs) && Array.isArray(this.value)) {\r\n const requiredFieldIds = formInputs\r\n .filter(i => i.required)\r\n .map(i => i.id);\r\n\r\n if (requiredFieldIds.length > 0) {\r\n const configId = this.inputConfig().id;\r\n shouldHaveCustomError = this.value.some(item =>\r\n requiredFieldIds.some(id => this._isNilOrEmpty(item?.[`${configId}.${id}`]))\r\n );\r\n }\r\n }\r\n\r\n // 3. Determine if the standard 'required' error should exist.\r\n const shouldHaveRequiredError = this.required && this._isNilOrEmpty(this.value);\r\n\r\n\r\n // --- APPLY THE ERROR STATE TO THE CONTROL ---\r\n\r\n // 4. Preserve other errors that might be on the control (e.g., minlength, pattern).\r\n const newErrors = { ...control.errors };\r\n delete newErrors['required'];\r\n delete newErrors['multipleInputListMissingSomeFields'];\r\n\r\n\r\n // 5. Add our managed errors back if their conditions are met.\r\n if (shouldHaveRequiredError) {\r\n newErrors['required'] = true;\r\n }\r\n if (shouldHaveCustomError) {\r\n newErrors['multipleInputListMissingSomeFields'] = { value: true }; // Or simply 'true'\r\n }\r\n\r\n // 6. Finalize the error object. If no errors, it must be null.\r\n const finalErrors = Object.keys(newErrors).length > 0 ? newErrors : null;\r\n\r\n // 7. IMPORTANT: Only update the control if the errors have actually changed.\r\n // This prevents infinite loops within ngDoCheck. A simple stringify is a\r\n // dependency-free way to compare the error objects.\r\n if (JSON.stringify(control.errors) !== JSON.stringify(finalErrors)) {\r\n control.setErrors(finalErrors);\r\n }\r\n }\r\n\r\n\r\n override get empty() {\r\n return !this.value;\r\n }\r\n\r\n override get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n override get errorState(): boolean {\r\n // 1. Check for standard validation errors from Angular's Forms API.\r\n const hasStandardError = !!this.ngControl?.errors;\r\n\r\n // 2. Check for custom validation errors specific to 'IMultiple' type.\r\n let hasCustomError = false;\r\n const formInputs = (this.inputConfig() as IMultiple)?.formInputs;\r\n\r\n // This custom logic only runs if the config and value are the expected array types.\r\n if (Array.isArray(formInputs) && Array.isArray(this.value)) {\r\n const requiredFieldIds = formInputs\r\n .filter(input => input.required)\r\n .map(input => input.id);\r\n\r\n // The custom error is true if any item in our value array is missing\r\n // a value for any of its required sub-fields.\r\n if (requiredFieldIds.length > 0) {\r\n hasCustomError = this.value.some(item =>\r\n requiredFieldIds.some(id => this._isNilOrEmpty(item?.[`${this.inputConfig().id}.${id}`]))\r\n );\r\n }\r\n }\r\n\r\n // 3. The final error state is true if *any* validation fails,\r\n // AND the control has been \"touched\" by the user.\r\n return (hasStandardError || hasCustomError) && this.touched;\r\n }\r\n\r\n private _isNilOrEmpty(value: unknown): boolean {\r\n return value === null || value === undefined || value === '';\r\n }\r\n\r\n\r\n /// En of implementations of MatFormFieldControl\r\n applyOptionsTo: MultipleInputRow | undefined;\r\n dataSource!: MatTableDataSource<MultipleInputRow>;\r\n\r\n listenToValueChanges(): void {\r\n this.stateChanges\r\n .pipe(takeUntilDestroyed(this.#destroyRef))\r\n .subscribe(() => {\r\n this.checkItemList();\r\n });\r\n }\r\n\r\n checkItemList(): boolean {\r\n try {\r\n if (this.value) {\r\n const config = this.inputConfig();\r\n const TableData: MultipleInputRow[] = ((config as IMultiple).groupBy?.length ?? 0) > 0\r\n ? addGroups(\r\n this.value,\r\n (config as IMultiple).groupBy,\r\n )\r\n : this.value;\r\n const data = getCaluculatedTableData(config, TableData) as MultipleInputRow[];\r\n\r\n if (!this.dataSource) {\r\n this.dataSource = new MatTableDataSource<MultipleInputRow>(data);\r\n this.dataSource;\r\n } else {\r\n this.dataSource.data = data;\r\n }\r\n }\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n multipleInputRemoveItem(item: MultipleInputRow | undefined): void {\r\n if (!item) return;\r\n if (!this.value) return;\r\n this.value = this.value.filter((i) => !_isEqual(i, item));\r\n\r\n this.applyOptionsTo = undefined;\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n }\r\n\r\n\r\n generateMultipleInputForm(): void {\r\n const id = this.inputConfig()?.id;\r\n if (!id) return;\r\n this.formBuilderFunctions()?.multipleInputToggleForm(id, true);\r\n }\r\n\r\n rowInViewOnly: string | undefined = undefined;\r\n\r\n editRow(rowId: string): void {\r\n if (!rowId) {\r\n throw new Error('Row id not provided');\r\n }\r\n\r\n const config = this.inputConfig();\r\n const fbf = this.formBuilderFunctions();\r\n if (!fbf || !config) return;\r\n\r\n fbf.multipleInputEditRow(config.id, rowId);\r\n\r\n // if( !this.inputConfig?.multipleInputController){\r\n // return\r\n // }\r\n // this.inputConfig.multipleInputInEditId = this.applyOptionsTo.id;\r\n // this.inputConfig.applyMultipleInputValuesToForm(\r\n // this.applyOptionsTo\r\n // );\r\n }\r\n\r\n copy(rowId: string): void {\r\n const config = this.inputConfig();\r\n const fbf = this.formBuilderFunctions();\r\n if (!fbf || !config) return;\r\n fbf.multipleInputDuplicateRow(config.id, rowId);\r\n // this.generateMultipleInputForm();\r\n // this.inputConfig?.applyMultipleInputValuesToForm(\r\n // this.applyOptionsTo\r\n // );\r\n // this.applyOptionsTo = undefined;\r\n }\r\n\r\n protected get handleLabel(): string | undefined {\r\n return (this.inputConfig() as IMultiple)?.handleLabel;\r\n }\r\n\r\n handleIcon(): string {\r\n // NOTE(phase-4): `handleIcon` is declared on `IBasicFormInput` but not on `IMultiple` directly;\r\n // narrow through `ITowerStepColumn` (which extends FormColumnInputs) and provide a string fallback.\r\n const cfg = this.inputConfig() as ITowerStepColumn & { handleIcon?: string };\r\n return cfg?.handleIcon || 'add';\r\n }\r\n\r\n saveMultipleInputForm(): void {\r\n this.formBuilderFunctions()?.multipleInputSaveForm(this.inputConfig().id);\r\n\r\n // const value: any = this.inputConfig?.multipleInputFormValue();\r\n\r\n // value['id'] = uuidv4();\r\n\r\n // if (!this.inputConfig) {\r\n // return\r\n // }\r\n\r\n // const previousValue = this.value\r\n // if (!previousValue) {\r\n // this.value = [value];\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // } else {\r\n // if (this.inputConfig?.multipleInputInEditId) {\r\n // let inEdit = previousValue.find(\r\n // (i: { id: any }) =>\r\n // i.id === this.inputConfig?.multipleInputInEditId\r\n // );\r\n // Object.keys(inEdit).every((s) => {\r\n // s;\r\n // inEdit[s] = value[s];\r\n // return !!inEdit[s];\r\n // });\r\n\r\n // this.value = [...previousValue],\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // } else {\r\n\r\n\r\n // this.value = [...previousValue, value];\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // }\r\n // }\r\n // this.onChange(this.value);\r\n // this.stateChanges.next();\r\n // this.checkItemList(this.value || []);\r\n // return\r\n\r\n\r\n }\r\n\r\n editInput(input: ITowerStepColumn): void {\r\n const fbf = this.formBuilderFunctions();\r\n if (typeof fbf?.editInput !== 'function') {\r\n throw new Error('editInput function not defined in formBuilderFunctions');\r\n }\r\n fbf.editInput(input);\r\n }\r\n\r\n deleteItemInput(input: ITowerStepColumn): void {\r\n this.formBuilderFunctions()?.deleteInput(input);\r\n }\r\n\r\n showItemAsLabel(input: ITowerStepColumn): void {\r\n this.formBuilderFunctions()?.multipleInputToggleLabel(input);\r\n }\r\n\r\n addFunction(func: IMultipleInputCal): void {\r\n this.formBuilderFunctions()?.addFunction(func, this.inputConfig()?.id);\r\n }\r\n\r\n // `FormBuilderFunctions.reorderItems` is now generic over the row shape; the\r\n // container/data slots stay `unknown` (opaque drag payload).\r\n reorderItems(event: CdkDragDrop<ITowerStepColumn[], unknown, unknown>): void {\r\n const config = this.inputConfig();\r\n const fbf = this.formBuilderFunctions();\r\n if (!fbf || !config) return;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Phase-4 TODO: deduplicate @angular/cdk peer dep in typings package; CdkDragDrop types are nominally distinct across copies.\r\n (fbf.reorderItems as any)(event, config.id);\r\n }\r\n\r\n protected get parentFormGroup(): FormGroup | null {\r\n return this.ngControl?.control?.parent as FormGroup;\r\n }\r\n\r\n protected get canAddRecords() {\r\n const config = this.inputConfig();\r\n if (!config) return false;\r\n //NOTE: Temporary backward compatibility for older versions of the config that might not have the new property\r\n if (!config.multipleInputAvailableOperations) return true;\r\n return config.multipleInputAvailableOperations?.includes(MultipleInputAvailableOperations.Add);\r\n }\r\n}\r\n\r\n\r\n\r\nfunction addGroups(tableValue: MultipleInputRow[], groupBy: string[] | undefined): MultipleInputRow[] {\r\n throw new Error('Function not implemented.');\r\n}\r\n","<lib-multiple-input-table-view\n [inputConfig]=\"inputConfig()\"\n [dataSource]=\"dataSource\"\n [applyOptionsTo]=\"applyOptionsTo\"\n [formGroup]=\"parentFormGroup\"\n (onEditItem)=\"editRow($event)\"\n (showItemAsLabel)=\"showItemAsLabel(inputConfig())\"\n (onDeleteItem)=\"multipleInputRemoveItem(applyOptionsTo)\"\n (onCopy)=\"copy($event)\"\n (onApplyOptionsTo)=\"applyOptionsTo = $event\"\n></lib-multiple-input-table-view>\n\n@if (!!inputConfig().formIsOpen || !!rowInViewOnly) {\n <lib-multiple-input-table-edit\n [editorMode]=\"editorMode()\"\n (editMultipleInput)=\"editInput($event)\"\n (deleteInput)=\"deleteItemInput($event)\"\n (addFunction)=\"addFunction($event)\"\n (showItemAsLabel)=\"showItemAsLabel($event)\"\n (onSaveMultipleInputForm)=\"saveMultipleInputForm()\"\n (reorderItems)=\"reorderItems($event)\"\n [formBuilderFunctions]=\"formBuilderFunctions()\"\n [formGroup]=\"parentFormGroup\"\n [inputConfig]=\"inputConfig()\"\n ></lib-multiple-input-table-edit>\n}\n\n@if (!inputConfig().readonly && !inputConfig().formIsOpen && canAddRecords) {\n <section class=\"add-row-bar\">\n <button class=\"add-row-button\" (click)=\"generateMultipleInputForm()\" mat-stroked-button>\n <mat-icon class=\"add-row-icon\">{{ handleIcon() }}</mat-icon>\n <span class=\"add-row-label\">{{ handleLabel }}</span>\n </button>\n </section>\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport type { FormBuilderFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { MultipleInputTableComponent } from './core/multiple-input-table/multiple-input-table.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n/** Wraps a multi-row input table inside a `mat-form-field`. */\r\n@Component({\r\n selector: 'lib-multiple-input-input-element',\r\n templateUrl: './multiple-input-input-element.component.html',\r\n styleUrl: './multiple-input-input-element.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n TFormInputStatusComponent,\r\n MultipleInputTableComponent,\r\n ],\r\n})\r\nexport class MultipleInputInputElementComponent {\r\n readonly inputConfig = input.required<ITowerStepColumn>();\r\n readonly formGroup = input.required<FormGroup>();\r\n readonly editorMode = input<boolean>(false);\r\n readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n readonly reload = output<void>();\r\n\r\n protected readonly errorMessage = computed(() =>\r\n getInputErrorMessage(this.inputConfig(), this.formGroup()),\r\n );\r\n}\r\n","<form [formGroup]=\"formGroup()\">\n @if (inputConfig(); as inputConfig) {\n <mat-form-field\n class=\"multiple-input-field\"\n [appearance]=\"inputConfig.appearance || 'fill'\"\n subscriptSizing=\"dynamic\"\n floatLabel=\"always\"\n >\n <mat-label>\n {{ inputConfig.label }}\n <lib-t-form-input-status [inputConfig]=\"inputConfig\"></lib-t-form-input-status>\n </mat-label>\n\n @if (inputConfig.id) {\n <lib-multiple-input-table\n [editorMode]=\"editorMode()\"\n [required]=\"inputConfig.required\"\n [formGroup]=\"formGroup()\"\n [formBuilderFunctions]=\"formBuilderFunctions()\"\n [formControlName]=\"inputConfig.id\"\n [inputConfig]=\"inputConfig\"\n ></lib-multiple-input-table>\n }\n\n @if (inputConfig.hintLabel || inputConfig.temporaryHint) {\n <mat-hint class=\"inputHint\">\n {{ inputConfig.temporaryHint || inputConfig.hintLabel }}\n </mat-hint>\n }\n\n @if (!!errorMessage()) {\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{ errorMessage() }}</mat-error>\n }\n\n @if (inputConfig.canReload?.canReload) {\n <button\n mat-icon-button\n matTooltip=\"Click to refresh this field.\"\n class=\"input-sync-button\"\n (click)=\"inputConfig.canReload.emit()\"\n matSuffix\n >\n <mat-icon>sync</mat-icon>\n </button>\n }\n\n @if (inputConfig.prefixIcon) {\n <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\n }\n\n @if (inputConfig.suffixIcon && inputConfig.id !== 'password') {\n <mat-icon matSuffix>{{ inputConfig.suffixIcon }}</mat-icon>\n }\n\n @if (inputConfig.prefixText) {\n <span class=\"affix-text\" matPrefix>{{ inputConfig.prefixText }}</span>\n }\n @if (inputConfig.suffixText) {\n <span class=\"affix-text affix-text--suffix\" matSuffix>{{ inputConfig.suffixText }}</span>\n }\n\n @if (inputConfig.maxLength && formGroup()) {\n <mat-hint align=\"end\">\n {{ (formGroup().controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength }}\n </mat-hint>\n }\n </mat-form-field>\n }\n</form>\n"],"names":["i2","i4","i5","i6","i3","i7","i8","i9","uuidv4","i1"],"mappings":"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"}
|