ngx-t-forms 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/README.md +27 -0
  2. package/fesm2022/ngx-t-forms-api-value-access-rules.component-4ZPgovTx.mjs +436 -0
  3. package/fesm2022/ngx-t-forms-api-value-access-rules.component-4ZPgovTx.mjs.map +1 -0
  4. package/fesm2022/ngx-t-forms-calculated-field-rules.component-tCsyuHd3.mjs +311 -0
  5. package/fesm2022/ngx-t-forms-calculated-field-rules.component-tCsyuHd3.mjs.map +1 -0
  6. package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-C8jU6DUH.mjs +208 -0
  7. package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-C8jU6DUH.mjs.map +1 -0
  8. package/fesm2022/ngx-t-forms-convertPostmanCollectionToTree-DktdVBeQ.mjs +29 -0
  9. package/fesm2022/ngx-t-forms-convertPostmanCollectionToTree-DktdVBeQ.mjs.map +1 -0
  10. package/fesm2022/ngx-t-forms-form-input-selector.component-6eGpxdN5.mjs +132 -0
  11. package/fesm2022/ngx-t-forms-form-input-selector.component-6eGpxdN5.mjs.map +1 -0
  12. package/fesm2022/ngx-t-forms-form-json-view.component-DwEXL85v.mjs +22 -0
  13. package/fesm2022/ngx-t-forms-form-json-view.component-DwEXL85v.mjs.map +1 -0
  14. package/fesm2022/ngx-t-forms-form-section-stepper.component-B5gtKLLC.mjs +220 -0
  15. package/fesm2022/ngx-t-forms-form-section-stepper.component-B5gtKLLC.mjs.map +1 -0
  16. package/fesm2022/ngx-t-forms-forms-builder-menu.component-Bo1CKQsC.mjs +347 -0
  17. package/fesm2022/ngx-t-forms-forms-builder-menu.component-Bo1CKQsC.mjs.map +1 -0
  18. package/fesm2022/ngx-t-forms-getInputIllustration-GCSKx5e5.mjs +9 -0
  19. package/fesm2022/ngx-t-forms-getInputIllustration-GCSKx5e5.mjs.map +1 -0
  20. package/fesm2022/ngx-t-forms-input-editor.component-C1kH_GDD.mjs +126 -0
  21. package/fesm2022/ngx-t-forms-input-editor.component-C1kH_GDD.mjs.map +1 -0
  22. package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DY7Tsn5l.mjs +88 -0
  23. package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DY7Tsn5l.mjs.map +1 -0
  24. package/fesm2022/ngx-t-forms-mat-slider-editor.component-Dgd5gyUu.mjs +108 -0
  25. package/fesm2022/ngx-t-forms-mat-slider-editor.component-Dgd5gyUu.mjs.map +1 -0
  26. package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-ClM2gqVq.mjs +153 -0
  27. package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-ClM2gqVq.mjs.map +1 -0
  28. package/fesm2022/ngx-t-forms-missing-form-configs.component-DubPFwTw.mjs +32 -0
  29. package/fesm2022/ngx-t-forms-missing-form-configs.component-DubPFwTw.mjs.map +1 -0
  30. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-DtmVJG6v.mjs +230 -0
  31. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-DtmVJG6v.mjs.map +1 -0
  32. package/fesm2022/ngx-t-forms-ngx-t-forms-B-w5W1gG.mjs +9292 -0
  33. package/fesm2022/ngx-t-forms-ngx-t-forms-B-w5W1gG.mjs.map +1 -0
  34. package/fesm2022/ngx-t-forms-pipeline-generator.component-DieETx2I.mjs +776 -0
  35. package/fesm2022/ngx-t-forms-pipeline-generator.component-DieETx2I.mjs.map +1 -0
  36. package/fesm2022/ngx-t-forms-required-inputs.component-Bi1wJdw3.mjs +188 -0
  37. package/fesm2022/ngx-t-forms-required-inputs.component-Bi1wJdw3.mjs.map +1 -0
  38. package/fesm2022/ngx-t-forms-rest-api-call-setup.component-Cd59pfG7.mjs +292 -0
  39. package/fesm2022/ngx-t-forms-rest-api-call-setup.component-Cd59pfG7.mjs.map +1 -0
  40. package/fesm2022/ngx-t-forms-section-report.component-CBXHr1qQ.mjs +156 -0
  41. package/fesm2022/ngx-t-forms-section-report.component-CBXHr1qQ.mjs.map +1 -0
  42. package/fesm2022/ngx-t-forms-selection-options-editor.component-DBlBUGkw.mjs +143 -0
  43. package/fesm2022/ngx-t-forms-selection-options-editor.component-DBlBUGkw.mjs.map +1 -0
  44. package/fesm2022/ngx-t-forms-validators-config.component-gtr6Ohn3.mjs +216 -0
  45. package/fesm2022/ngx-t-forms-validators-config.component-gtr6Ohn3.mjs.map +1 -0
  46. package/fesm2022/ngx-t-forms.mjs +2 -0
  47. package/fesm2022/ngx-t-forms.mjs.map +1 -0
  48. package/index.d.ts +5 -0
  49. package/lib/components/dialog-template/dialog-template.component.d.ts +10 -0
  50. package/lib/components/form-builder/elements/default-element/default-element.component.d.ts +12 -0
  51. package/lib/components/form-builder/elements/form-json-view/form-json-view.component.d.ts +9 -0
  52. package/lib/components/form-builder/elements/form-section-stepper/form-section-stepper.component.d.ts +146 -0
  53. package/lib/components/form-builder/elements/form-submissions-config/config.d.ts +18 -0
  54. package/lib/components/form-builder/elements/form-submissions-config/form-submissions-config.component.d.ts +61 -0
  55. package/lib/components/form-builder/elements/forms-builder-menu/forms-builder-menu.component.d.ts +35 -0
  56. package/lib/components/form-builder/elements/input-editor/input-editor.component.d.ts +18 -0
  57. package/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.d.ts +42 -0
  58. package/lib/components/form-builder/elements/missing-form-configs/missing-form-configs.component.d.ts +12 -0
  59. package/lib/components/form-builder/elements/section-report/section-report.component.d.ts +23 -0
  60. package/lib/components/form-builder/elements/select-form-template/select-form-template.component.d.ts +17 -0
  61. package/lib/components/form-builder/form-builder.component.d.ts +29 -0
  62. package/lib/components/forms/forms.component.d.ts +44 -0
  63. package/lib/components/forms/functions/cloneCopyFormInput.d.ts +3 -0
  64. package/lib/components/forms/functions/elementBlur.d.ts +2 -0
  65. package/lib/components/forms/functions/elementConfigurationChanged.d.ts +2 -0
  66. package/lib/components/forms/functions/findFormInput.d.ts +2 -0
  67. package/lib/components/forms/functions/formHttpSubmissions.d.ts +6 -0
  68. package/lib/components/forms/functions/selectInputTemplate.d.ts +3 -0
  69. package/lib/components/forms/store/Form-actions-formBuilder.d.ts +34 -0
  70. package/lib/components/forms/store/Form-selectors-FormBuilder.d.ts +42 -0
  71. package/lib/components/forms/store/Forms-Actions.d.ts +75 -0
  72. package/lib/components/forms/store/Forms-Effects.d.ts +14 -0
  73. package/lib/components/forms/store/Forms-selectors.d.ts +24 -0
  74. package/lib/components/forms/store/forms-store.service.d.ts +246 -0
  75. package/lib/components/index.d.ts +11 -0
  76. package/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/api-value-access-rules.component.d.ts +59 -0
  77. package/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/elements/data-tree/data-tree.component.d.ts +60 -0
  78. package/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/functions/convertDataToTree.d.ts +57 -0
  79. package/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/functions/extractNodeFromTree.d.ts +3 -0
  80. package/lib/components/t-dynamic-data-edit/elements/calculated-field-rules/calculated-field-rules.component.d.ts +92 -0
  81. package/lib/components/t-dynamic-data-edit/elements/config-mscoa-additional-inputs/config-mscoa-additional-inputs.component.d.ts +73 -0
  82. package/lib/components/t-dynamic-data-edit/elements/form-input-selector/form-input-selector.component.d.ts +48 -0
  83. package/lib/components/t-dynamic-data-edit/elements/json-editor/json-editor.component.d.ts +26 -0
  84. package/lib/components/t-dynamic-data-edit/elements/mat-chip-list-editor/mat-chip-list-editor.component.d.ts +43 -0
  85. package/lib/components/t-dynamic-data-edit/elements/mat-slider-editor/mat-slider-editor.component.d.ts +44 -0
  86. package/lib/components/t-dynamic-data-edit/elements/mat-slider-toggle-editor/mat-slider-toggle-editor.component.d.ts +48 -0
  87. package/lib/components/t-dynamic-data-edit/elements/mscoa-segment-config/mscoa-segment-config.component.d.ts +75 -0
  88. package/lib/components/t-dynamic-data-edit/elements/pipeline-generator/elements/aggregate-stage-editor/aggregate-stage-editor.component.d.ts +33 -0
  89. package/lib/components/t-dynamic-data-edit/elements/pipeline-generator/pipeline-generator.component.d.ts +92 -0
  90. package/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/convertPostmanCollectionToTree.d.ts +4 -0
  91. package/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/filterCollectionItems.d.ts +3 -0
  92. package/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/methodColors.d.ts +1 -0
  93. package/lib/components/t-dynamic-data-edit/elements/postman-collections/postman-collections.component.d.ts +28 -0
  94. package/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.d.ts +57 -0
  95. package/lib/components/t-dynamic-data-edit/elements/rest-api-call-setup/rest-api-call-setup.component.d.ts +46 -0
  96. package/lib/components/t-dynamic-data-edit/elements/selection-options-editor/selection-options-editor.component.d.ts +48 -0
  97. package/lib/components/t-dynamic-data-edit/elements/t-workflow-picker/t-workflow-picker.component.d.ts +19 -0
  98. package/lib/components/t-dynamic-data-edit/elements/validators-config/validators-config.component.d.ts +60 -0
  99. package/lib/components/t-dynamic-data-edit/functions/testData.d.ts +2 -0
  100. package/lib/components/t-dynamic-data-edit/t-dynamic-data-edit.component.d.ts +48 -0
  101. package/lib/components/t-dynamic-data-view/t-dynamic-data-view.component.d.ts +14 -0
  102. package/lib/components/t-form-input/elements/Geo-location-form-input/elements/geo-location-form-input/geo-location-form-input.component.d.ts +18 -0
  103. package/lib/components/t-form-input/elements/Geo-location-form-input/functions/getGeoLocation.d.ts +2 -0
  104. package/lib/components/t-form-input/elements/Geo-location-form-input/geo-location.component.d.ts +16 -0
  105. package/lib/components/t-form-input/elements/auto-complete-input-element/auto-complete-input-element.component.d.ts +14 -0
  106. package/lib/components/t-form-input/elements/basic-input-input-element/basic-input-input-element.component.d.ts +17 -0
  107. package/lib/components/t-form-input/elements/basic-input-input-element/core/input-custom/input-custom.component.d.ts +17 -0
  108. package/lib/components/t-form-input/elements/date-picker-input-element/date-picker-input-element.component.d.ts +14 -0
  109. package/lib/components/t-form-input/elements/date-range-picker-input-element/date-range-picker-input-element.component.d.ts +14 -0
  110. package/lib/components/t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component.d.ts +18 -0
  111. package/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/config.d.ts +9 -0
  112. package/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/form-input-rich-text-editor.component.d.ts +14 -0
  113. package/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/sync-editor/sync-editor.component.d.ts +10 -0
  114. package/lib/components/t-form-input/elements/editor-input-element/editor-input-element.component.d.ts +14 -0
  115. package/lib/components/t-form-input/elements/file-upload-input-element/core/file-uploader/camera-functions.d.ts +3 -0
  116. package/lib/components/t-form-input/elements/file-upload-input-element/core/file-uploader/file-uploader.component.d.ts +30 -0
  117. package/lib/components/t-form-input/elements/file-upload-input-element/file-upload-input-element.component.d.ts +14 -0
  118. package/lib/components/t-form-input/elements/image-capture-input-element/core/camera-capture/camera-capture.component.d.ts +28 -0
  119. package/lib/components/t-form-input/elements/image-capture-input-element/image-capture-input-element.component.d.ts +13 -0
  120. package/lib/components/t-form-input/elements/mscoa-form-input/elements/account-value/account-value.component.d.ts +37 -0
  121. package/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-chart/mscoa-chart.component.d.ts +93 -0
  122. package/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-computation/mscoa-computation.component.d.ts +62 -0
  123. package/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-reactive-form-field/mscoa-reactive-form-field.component.d.ts +21 -0
  124. package/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-account-table/scoa-account-table.component.d.ts +83 -0
  125. package/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-input/scoa-input.component.d.ts +27 -0
  126. package/lib/components/t-form-input/elements/mscoa-form-input/mscoa-form-input.component.d.ts +16 -0
  127. package/lib/components/t-form-input/elements/mscoa-form-input/store/accountConstants.d.ts +5 -0
  128. package/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-actions.d.ts +19 -0
  129. package/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-component-store.service.d.ts +61 -0
  130. package/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-effects.d.ts +8 -0
  131. package/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-selectors.d.ts +32 -0
  132. package/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.d.ts +37 -0
  133. package/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.d.ts +52 -0
  134. package/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.d.ts +39 -0
  135. package/lib/components/t-form-input/elements/multiple-input-input-element/functions/getListCalculated.d.ts +2 -0
  136. package/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.d.ts +16 -0
  137. package/lib/components/t-form-input/elements/section-title/section-title.component.d.ts +7 -0
  138. package/lib/components/t-form-input/elements/select-input-element/select-input-element.component.d.ts +23 -0
  139. package/lib/components/t-form-input/elements/select-table-input/elements/input-table/input-table.component.d.ts +29 -0
  140. package/lib/components/t-form-input/elements/select-table-input/select-table-input.component.d.ts +13 -0
  141. package/lib/components/t-form-input/elements/signature-input-element/config/signature.d.ts +2 -0
  142. package/lib/components/t-form-input/elements/signature-input-element/core/signature-pad-input/signature-pad-input.component.d.ts +40 -0
  143. package/lib/components/t-form-input/elements/signature-input-element/signature-input-element.component.d.ts +13 -0
  144. package/lib/components/t-form-input/elements/textarea-input-element/textarea-input-element.component.d.ts +13 -0
  145. package/lib/components/t-form-input/elements/toggle-input-element/core/toggle/toggle.component.d.ts +15 -0
  146. package/lib/components/t-form-input/elements/toggle-input-element/toggle-input-element.component.d.ts +13 -0
  147. package/lib/components/t-form-input/t-form-input.component.d.ts +24 -0
  148. package/lib/components/t-form-input-status/t-form-input-status.component.d.ts +10 -0
  149. package/lib/components/user-form-stepper/user-form-stepper.component.d.ts +23 -0
  150. package/lib/injection-tokens/index.d.ts +14 -0
  151. package/lib/ngx-t-forms.component.d.ts +5 -0
  152. package/lib/ngx-t-forms.service.d.ts +6 -0
  153. package/lib/services/core/t-form-builder/functions/addFormInputToForm.d.ts +8 -0
  154. package/lib/services/core/t-form-builder/functions/addMultipleInputFunction.d.ts +2 -0
  155. package/lib/services/core/t-form-builder/functions/addNewSection.d.ts +2 -0
  156. package/lib/services/core/t-form-builder/functions/deleteSection.d.ts +2 -0
  157. package/lib/services/core/t-form-builder/functions/formCanSave.d.ts +3 -0
  158. package/lib/services/core/t-form-builder/functions/inputElementEditorConfigs.d.ts +91 -0
  159. package/lib/services/core/t-form-builder/functions/moveFormInput.d.ts +4 -0
  160. package/lib/services/core/t-form-builder/functions/moveInputToDiffSection.d.ts +2 -0
  161. package/lib/services/core/t-form-builder/functions/multipleInputToggleLabel.d.ts +2 -0
  162. package/lib/services/core/t-form-builder/functions/removeItem.d.ts +7 -0
  163. package/lib/services/core/t-form-builder/functions/sectionDrop.d.ts +3 -0
  164. package/lib/services/core/t-form-builder/functions/stepTitleChangeStep.d.ts +14 -0
  165. package/lib/services/core/t-form-controller/function/calculateInputValue.d.ts +11 -0
  166. package/lib/services/core/t-form-controller/function/getApiDataFetching.d.ts +4 -0
  167. package/lib/services/core/t-form-controller/function/postApiDataFetching.d.ts +16 -0
  168. package/lib/services/core/t-form-controller/function/validateMinInputForPostRequest.d.ts +8 -0
  169. package/lib/services/core/t-form-environment-injection/functions/provideNgxTforms.d.ts +3 -0
  170. package/lib/services/core/t-form-section-controller/Functions/commonFormOperations.d.ts +21 -0
  171. package/lib/services/core/t-form-section-controller/Functions/errorResolver.d.ts +7 -0
  172. package/lib/services/core/t-form-section-controller/Functions/formGenerator.d.ts +29 -0
  173. package/lib/services/core/t-form-section-controller/Functions/getValueFromPathMap.d.ts +6 -0
  174. package/lib/services/core/t-form-tower-controller/form-tower-controller.service.d.ts +99 -0
  175. package/lib/services/core/t-form-tower-controller/functions/allFormInputs.d.ts +3 -0
  176. package/lib/services/core/t-form-tower-controller/functions/createEmptyForm.d.ts +2 -0
  177. package/lib/services/core/t-form-tower-controller/functions/extractInitFunctions.d.ts +8 -0
  178. package/lib/services/core/t-form-tower-controller/functions/getAllFunctionTypes.d.ts +12 -0
  179. package/lib/services/core/t-form-tower-controller/functions/getFormValue.d.ts +3 -0
  180. package/lib/services/core/t-form-tower-controller/functions/getSubmissionStatus.d.ts +7 -0
  181. package/lib/services/core/t-form-tower-controller/functions/handleStepChange.d.ts +3 -0
  182. package/lib/services/core/t-form-tower-controller/functions/multipleInputRowIDControllInput.d.ts +2 -0
  183. package/lib/services/core/t-form-tower-controller/functions/prePoPulateForm.d.ts +85 -0
  184. package/lib/services/core/t-form-tower-controller/functions/saveMultipleInputForm.d.ts +10 -0
  185. package/lib/services/core/t-form-tower-controller/functions/selectFormSteps.d.ts +4 -0
  186. package/lib/services/core/t-form-tower-controller/functions/setControlTempErrors.d.ts +3 -0
  187. package/lib/services/core/t-form-tower-controller/functions/setInputAsTouchedAndDirty.d.ts +2 -0
  188. package/lib/services/core/t-form-tower-controller/functions/setInputError.d.ts +5 -0
  189. package/lib/services/core/t-form-tower-controller/functions/setInputStatus.d.ts +3 -0
  190. package/lib/services/core/t-form-tower-controller/functions/setSectionAsSeen.d.ts +3 -0
  191. package/lib/services/core/t-form-tower-controller/functions/startTowerFormChangesEventListener.d.ts +10 -0
  192. package/lib/services/core/t-form-tower-controller/functions/toggleMultipleInput.d.ts +5 -0
  193. package/lib/services/core/t-form-tower-controller/functions/updateChangeHistory.d.ts +2 -0
  194. package/lib/services/core/t-form-tower-controller/functions/updateFormInputConfig.d.ts +6 -0
  195. package/lib/services/core/t-form-tower-controller/functions/updateValue.d.ts +2 -0
  196. package/lib/services/core/t-input-controller/functions/baseCustomInput.d.ts +104 -0
  197. package/lib/services/core/t-input-controller/functions/colorCoding.d.ts +24 -0
  198. package/lib/services/core/t-input-controller/functions/configureCols.d.ts +5 -0
  199. package/lib/services/core/t-input-controller/functions/generateInputSecret.d.ts +2 -0
  200. package/lib/services/core/t-input-controller/functions/inputErrorMessage.d.ts +3 -0
  201. package/lib/services/hhtpResources/Pipeline/pipeline.service.d.ts +80 -0
  202. package/lib/services/index.d.ts +5 -0
  203. package/lib/shared/functions/assignDeepPropertyToObject.d.ts +1 -0
  204. package/lib/shared/functions/camelize.d.ts +6 -0
  205. package/lib/shared/functions/daysAgoTransform.d.ts +1 -0
  206. package/lib/shared/functions/enryption.d.ts +9 -0
  207. package/lib/shared/functions/evaluateArrayAccessRules.d.ts +14 -0
  208. package/lib/shared/functions/getAvatar.d.ts +1 -0
  209. package/lib/shared/functions/getDeepObject.d.ts +138 -0
  210. package/lib/shared/functions/getInputIllustration.d.ts +2 -0
  211. package/lib/shared/functions/isEqual.d.ts +12 -0
  212. package/lib/shared/functions/migrationCheck.d.ts +3 -0
  213. package/lib/shared/functions/replaceUrlVariables.d.ts +2 -0
  214. package/lib/shared/functions/searchArray.d.ts +1 -0
  215. package/lib/shared/functions/textIconsForUserHints.d.ts +20 -0
  216. package/lib/shared/index.d.ts +6 -0
  217. package/lib/shared/modules/mat-modules.module.d.ts +50 -0
  218. package/lib/shared/pipes/date/days-ago.pipe.d.ts +7 -0
  219. package/package.json +67 -0
  220. package/public-api.d.ts +6 -0
@@ -0,0 +1,292 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Input, Output, Component, HostBinding, Optional, Self } from '@angular/core';
3
+ import * as i2 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i1$1 from '@angular/forms';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { e as TreeComponent, M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-B-w5W1gG.mjs';
8
+ import * as i1 from '@angular/common/http';
9
+ import { HttpErrorResponse } from '@angular/common/http';
10
+ import { BehaviorSubject, take, tap, catchError, throwError, Subject } from 'rxjs';
11
+ import { c as convertPostmanFolderItemsToTree } from './ngx-t-forms-convertPostmanCollectionToTree-DktdVBeQ.mjs';
12
+ import * as i3 from '@angular/material/button';
13
+ import * as i5 from '@angular/material/divider';
14
+ import * as i5$1 from '@angular/material/icon';
15
+ import * as i8 from '@angular/material/progress-spinner';
16
+ import * as i9 from '@angular/material/toolbar';
17
+ import * as i8$1 from '@angular/material/tooltip';
18
+ import * as i3$1 from '@angular/material/tree';
19
+ import { DataSources } from 'ngx-t-forms-types';
20
+ import { MatFormFieldControl } from '@angular/material/form-field';
21
+
22
+ // Update the filter function signature
23
+ function filterCollectionItems(collections, searchKey) {
24
+ const items = collections.collection.item;
25
+ const searchText = searchKey.trim().toLowerCase();
26
+ if (!searchText) {
27
+ return items;
28
+ }
29
+ return items.filter(collection => {
30
+ return searchInItems(collection.item, searchText);
31
+ });
32
+ }
33
+ function searchInItems(items, searchText) {
34
+ if (!items)
35
+ return false;
36
+ for (const item of items) {
37
+ // Check if current item matches search
38
+ if (item.name?.toLowerCase().includes(searchText) ||
39
+ item.description?.toLowerCase().includes(searchText)) {
40
+ return true;
41
+ }
42
+ // Recursively search in nested items
43
+ if (item.item && searchInItems(item.item, searchText)) {
44
+ return true;
45
+ }
46
+ }
47
+ return false;
48
+ }
49
+
50
+ function methodColor(method) {
51
+ switch (method) {
52
+ case 'GET':
53
+ return 'green';
54
+ case 'POST':
55
+ return 'chocolate';
56
+ case 'PUT':
57
+ return 'yellow';
58
+ case 'DELETE':
59
+ return 'red';
60
+ default:
61
+ return 'currentColor';
62
+ }
63
+ }
64
+
65
+ class PostmanCollectionsComponent {
66
+ get collection$() {
67
+ return this._collection$.asObservable();
68
+ }
69
+ constructor(httpClient) {
70
+ this.httpClient = httpClient;
71
+ this._collection$ = new BehaviorSubject(undefined);
72
+ this.treeComponent = new TreeComponent();
73
+ this.nodeSelectionChanged = new EventEmitter();
74
+ this._searchKey = '';
75
+ this.loadingEndPoints = [];
76
+ this.loading = false;
77
+ }
78
+ ngOnInit() {
79
+ this.initializePostmanService();
80
+ }
81
+ selectNode(node) {
82
+ this.nodeSelectionChanged.emit(node);
83
+ }
84
+ isValidConfig(config) {
85
+ return Boolean(config?.collectionUrl && config?.collectionKey);
86
+ }
87
+ initializePostmanService() {
88
+ const isValidConfig = this.isValidConfig(this.postmanCollectionConfig);
89
+ if (!isValidConfig) {
90
+ this.error = new HttpErrorResponse({
91
+ error: 'Invalid Postman Collection Config',
92
+ });
93
+ return;
94
+ }
95
+ const { collectionUrl, collectionKey } = this.postmanCollectionConfig;
96
+ const requestOptions = {
97
+ params: {
98
+ apikey: collectionKey,
99
+ clearSystemHeaders: true
100
+ },
101
+ headers: {
102
+ 'Content-Type': 'application/json',
103
+ }
104
+ };
105
+ this.loading = true;
106
+ this.httpClient.get(collectionUrl, requestOptions).pipe(take(1), tap((data) => {
107
+ this._collection$.next(data);
108
+ // To ensure the data can be shown as a tree
109
+ const treeData = convertPostmanFolderItemsToTree(data.collection.item);
110
+ this.treeComponent.assignDataSourceData(treeData);
111
+ this.error = undefined;
112
+ this.loading = false;
113
+ }), catchError((err) => {
114
+ this.loading = false;
115
+ this.error = err;
116
+ console.error(err);
117
+ return throwError(err);
118
+ })).subscribe();
119
+ }
120
+ methodColor(method) {
121
+ return methodColor(method);
122
+ }
123
+ searchTree(event) {
124
+ const search = event.target.value;
125
+ this.collection$.pipe(take(1), tap((collection) => {
126
+ if (!collection) {
127
+ return;
128
+ }
129
+ const items = filterCollectionItems(collection, search);
130
+ const treeData = convertPostmanFolderItemsToTree(items);
131
+ this.treeComponent.assignDataSourceData(treeData);
132
+ })).subscribe();
133
+ }
134
+ getNodeLines(level) {
135
+ return Array(level).fill(0).map((_, i) => i + 1);
136
+ }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PostmanCollectionsComponent, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: PostmanCollectionsComponent, isStandalone: true, selector: "app-postman-collections", inputs: { postmanCollectionConfig: "postmanCollectionConfig", loadingEndPoints: "loadingEndPoints" }, outputs: { nodeSelectionChanged: "nodeSelectionChanged" }, ngImport: i0, template: "\n@if (!!loading ) {\n<div class=\"loadingContainer\">\n <mat-spinner></mat-spinner>\n</div>\n\n}\n@if(!loading){\n <mat-toolbar class=\"search-container\">\n <mat-icon>\n search\n </mat-icon>\n <input type=\"search\" \n placeholder=\"Search api\" \n class=\"search-field\"\n (input)=\"searchTree($event)\"> \n </mat-toolbar>\n <mat-divider ></mat-divider>\n <ng-container *ngIf=\"treeComponent as tree\">\n <mat-tree [dataSource]=\"tree.dataSource\" [treeControl]=\" tree.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n @if (loadingEndPoints.includes(node.value.id)) {\n <mat-spinner diameter=\"22\" class=\"loading-spinner\" >\n \n </mat-spinner>\n }\n <div class=\"line\" *ngFor=\"let line of getNodeLines(node.level)\" [style.left]=\"line* 40 +8 + 'px'\"></div>\n <button [disabled]=\"!node.value?.request?.body?.raw && node.value.request.method ==='POST' || !node.value?.request?.url?.raw \"\n (click)=\"selectNode(node.value)\" [matTooltip]=\"node.value?.request?.url?.raw || 'Invalid Postman config,missing Endpoint URL'\" class=\"item\" mat-button\n *ngIf=\"node.value?.request\">\n \n <span class=\"node-key method\" [style.color]=\" methodColor(node.value.request.method)\">\n <!-- -->\n\n {{node.value.request.method}}</span>\n <span>\n \n {{ node.key }} \n \n </span>\n </button>\n \n </mat-tree-node>\n \n <mat-tree-node *matTreeNodeDef=\"let node; when: tree.hasChild\" matTreeNodePadding>\n <button style=\"padding: 0px; \n \" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n \n {{tree.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n \n </button>\n \n <mat-icon style=\"color: var(--ion-color-medium)\">\n {{tree.treeControl.isExpanded(node) ? 'folder_open' : 'folder'}}\n\n </mat-icon>\n <span style=\"margin-left: 8px;font-weight:500\">\n \n {{ node.key }}\n </span>\n \n </mat-tree-node>\n </mat-tree>\n \n </ng-container>\n <ng-container *ngIf=\"error\">\n <mat-toolbar>\n <span style=\"color: red ;font-size:14px; line-height: normal;\n text-wrap: auto;\">\n {{error.message}}\n </span>\n </mat-toolbar>\n </ng-container>\n}\n", styles: ["mat-tree-node{min-height:28px!important;height:32px!important}.breadcrumb-container{display:flex;align-items:center;flex-wrap:wrap;padding:8px 0}.breadcrumb-item{display:inline-flex;align-items:center;margin:0;transition:background-color .3s ease}.breadcrumb-separator{margin:0}.breadcrumb-separator .mat-icon{font-size:16px;width:16px;height:16px}.suggestion-container{display:flex;width:100%;gap:14px}.suggestion-column{flex:1;min-width:0}.button-container{display:flex;flex-wrap:wrap}.suggestion-button{--padding-start: 8px;--padding-end: 8px;--padding-top: 2px;--padding-bottom: 4px;height:auto;font-size:.8em;text-transform:capitalize}.suggestion-button ::ng-deep ion-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}h5{margin-bottom:8px;font-size:1em}mat-tree{background:none}.item{text-align:left;display:flex;width:100%;justify-content:left;font-size:small;white-space:nowrap;font-weight:400;overflow:hidden}.method{display:inline-block;width:38px;text-align:right}.line{position:absolute;height:32px;left:48px;background:var(--mat-divider-color, var(--mat-app-outline));width:1px}.loadingContainer{display:flex;justify-content:center;align-items:center;padding:24px;height:100%}.search-field{width:100%;padding:8px;border:1px solid var(--mat-divider-color, var(--mat-app-outline));border-radius:4px;margin-left:14px}.search-container{background:inherit;padding-left:12px;padding-right:12px;height:48px}\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: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i5$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i8$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i3$1.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3$1.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3$1.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3$1.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3$1.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: FormsModule }] }); }
139
+ }
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: PostmanCollectionsComponent, decorators: [{
141
+ type: Component,
142
+ args: [{ selector: 'app-postman-collections', standalone: true, imports: [CommonModule, MatModulesModule, FormsModule], template: "\n@if (!!loading ) {\n<div class=\"loadingContainer\">\n <mat-spinner></mat-spinner>\n</div>\n\n}\n@if(!loading){\n <mat-toolbar class=\"search-container\">\n <mat-icon>\n search\n </mat-icon>\n <input type=\"search\" \n placeholder=\"Search api\" \n class=\"search-field\"\n (input)=\"searchTree($event)\"> \n </mat-toolbar>\n <mat-divider ></mat-divider>\n <ng-container *ngIf=\"treeComponent as tree\">\n <mat-tree [dataSource]=\"tree.dataSource\" [treeControl]=\" tree.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n @if (loadingEndPoints.includes(node.value.id)) {\n <mat-spinner diameter=\"22\" class=\"loading-spinner\" >\n \n </mat-spinner>\n }\n <div class=\"line\" *ngFor=\"let line of getNodeLines(node.level)\" [style.left]=\"line* 40 +8 + 'px'\"></div>\n <button [disabled]=\"!node.value?.request?.body?.raw && node.value.request.method ==='POST' || !node.value?.request?.url?.raw \"\n (click)=\"selectNode(node.value)\" [matTooltip]=\"node.value?.request?.url?.raw || 'Invalid Postman config,missing Endpoint URL'\" class=\"item\" mat-button\n *ngIf=\"node.value?.request\">\n \n <span class=\"node-key method\" [style.color]=\" methodColor(node.value.request.method)\">\n <!-- -->\n\n {{node.value.request.method}}</span>\n <span>\n \n {{ node.key }} \n \n </span>\n </button>\n \n </mat-tree-node>\n \n <mat-tree-node *matTreeNodeDef=\"let node; when: tree.hasChild\" matTreeNodePadding>\n <button style=\"padding: 0px; \n \" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n \n {{tree.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n \n </button>\n \n <mat-icon style=\"color: var(--ion-color-medium)\">\n {{tree.treeControl.isExpanded(node) ? 'folder_open' : 'folder'}}\n\n </mat-icon>\n <span style=\"margin-left: 8px;font-weight:500\">\n \n {{ node.key }}\n </span>\n \n </mat-tree-node>\n </mat-tree>\n \n </ng-container>\n <ng-container *ngIf=\"error\">\n <mat-toolbar>\n <span style=\"color: red ;font-size:14px; line-height: normal;\n text-wrap: auto;\">\n {{error.message}}\n </span>\n </mat-toolbar>\n </ng-container>\n}\n", styles: ["mat-tree-node{min-height:28px!important;height:32px!important}.breadcrumb-container{display:flex;align-items:center;flex-wrap:wrap;padding:8px 0}.breadcrumb-item{display:inline-flex;align-items:center;margin:0;transition:background-color .3s ease}.breadcrumb-separator{margin:0}.breadcrumb-separator .mat-icon{font-size:16px;width:16px;height:16px}.suggestion-container{display:flex;width:100%;gap:14px}.suggestion-column{flex:1;min-width:0}.button-container{display:flex;flex-wrap:wrap}.suggestion-button{--padding-start: 8px;--padding-end: 8px;--padding-top: 2px;--padding-bottom: 4px;height:auto;font-size:.8em;text-transform:capitalize}.suggestion-button ::ng-deep ion-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}h5{margin-bottom:8px;font-size:1em}mat-tree{background:none}.item{text-align:left;display:flex;width:100%;justify-content:left;font-size:small;white-space:nowrap;font-weight:400;overflow:hidden}.method{display:inline-block;width:38px;text-align:right}.line{position:absolute;height:32px;left:48px;background:var(--mat-divider-color, var(--mat-app-outline));width:1px}.loadingContainer{display:flex;justify-content:center;align-items:center;padding:24px;height:100%}.search-field{width:100%;padding:8px;border:1px solid var(--mat-divider-color, var(--mat-app-outline));border-radius:4px;margin-left:14px}.search-container{background:inherit;padding-left:12px;padding-right:12px;height:48px}\n"] }]
143
+ }], ctorParameters: () => [{ type: i1.HttpClient }], propDecorators: { nodeSelectionChanged: [{
144
+ type: Output
145
+ }], postmanCollectionConfig: [{
146
+ type: Input
147
+ }], loadingEndPoints: [{
148
+ type: Input
149
+ }] } });
150
+
151
+ class RestApiCallSetupComponent {
152
+ static { this.nextId = 0; }
153
+ constructor(ngControl, _elementRef) {
154
+ this.ngControl = ngControl;
155
+ this._elementRef = _elementRef;
156
+ this.stateChanges = new Subject();
157
+ this.id = `lib-rest-api-call-setup-${RestApiCallSetupComponent.nextId++}`;
158
+ this.placeholder = '';
159
+ this.focused = false;
160
+ this.required = false;
161
+ this.disabled = false;
162
+ this.touched = false;
163
+ this.onTouched = () => { };
164
+ this.httpGetDataFunction = undefined;
165
+ this.errors = [];
166
+ this.valueChanged = new EventEmitter();
167
+ this.loadingEndPoints = [];
168
+ }
169
+ get empty() {
170
+ return !this.value;
171
+ }
172
+ get shouldLabelFloat() {
173
+ return this.focused || !this.empty;
174
+ }
175
+ get errorState() {
176
+ const hasError = !!this.ngControl?.control?.errors || (this.errors || []).length > 0 && this.touched;
177
+ return !this.value && !!this.required || hasError;
178
+ }
179
+ setDescribedByIds(ids) {
180
+ // Ensure the component view is initialized
181
+ if (this._elementRef && this._elementRef.nativeElement) {
182
+ const controlElement = this._elementRef.nativeElement.querySelector('.lib-rest-api-call-setup');
183
+ // Check if the controlElement exists before attempting to set its attribute
184
+ if (controlElement) {
185
+ controlElement.setAttribute('aria-describedby', ids.join(' '));
186
+ }
187
+ }
188
+ }
189
+ onContainerClick(event) {
190
+ this.markAsTouched();
191
+ this.stateChanges.next();
192
+ }
193
+ markAsTouched() {
194
+ console.log('markAsTouched');
195
+ if (!this.touched) {
196
+ this.onTouched();
197
+ this.touched = true;
198
+ }
199
+ }
200
+ set value(val) {
201
+ if (JSON.stringify(val) !== JSON.stringify(this._value)) {
202
+ this._value = val;
203
+ }
204
+ }
205
+ get value() {
206
+ return this._value;
207
+ }
208
+ async nodeSelectionChanged(node) {
209
+ const { id, name, request, response } = node;
210
+ if (!request || !response)
211
+ return;
212
+ let requestBody;
213
+ try {
214
+ requestBody = JSON.parse(request?.body?.raw || '{}');
215
+ }
216
+ catch (error) {
217
+ console.error("API BODY PARSE ERROR");
218
+ requestBody = {};
219
+ }
220
+ const keyExtraction = (key, value, primaryKey) => {
221
+ return ({
222
+ name: key,
223
+ type: typeof value,
224
+ primaryKey
225
+ });
226
+ };
227
+ // if(request.method === 'GET'){
228
+ // this.loadingEndPoints.push(id)
229
+ // try {
230
+ // responseBody = await this.httpGetDataFunction?.(request.url.raw)
231
+ // } catch (error) {
232
+ // console.error(error)
233
+ // this.loadingEndPoints = this.loadingEndPoints.filter((item) => item !== id)
234
+ // }
235
+ // }
236
+ const secondaryKeys = Object.entries(requestBody['data'] || {}).map(([key, value]) => keyExtraction(key, value, false));
237
+ delete requestBody['data'];
238
+ const primaryKeys = Object.entries(requestBody).map(([key, value]) => keyExtraction(key, value, true));
239
+ const minimumInputRequired = request?.method === 'POST' ? [...primaryKeys, ...secondaryKeys] : [];
240
+ const transformedNode = {
241
+ _id: id,
242
+ name: name,
243
+ httpEndPoint: request.url.raw,
244
+ httpMethod: request.method,
245
+ source: DataSources.Api,
246
+ postFormData: request.method === 'POST',
247
+ backEndConfig: {
248
+ minimumInputRequired,
249
+ },
250
+ };
251
+ const fetch = transformedNode;
252
+ console.log(fetch);
253
+ this.valueChanged.emit(fetch);
254
+ }
255
+ clearValue() {
256
+ const source = this.value?.source;
257
+ this._value = undefined;
258
+ this.valueChanged.emit(undefined);
259
+ this.valueChanged.emit({ source: source });
260
+ }
261
+ methodColor(method) {
262
+ return methodColor(method || 'POST');
263
+ }
264
+ get hasValidValue() {
265
+ return Boolean(this.value) && Boolean(this.value?.httpEndPoint) && Boolean(this.value?.httpMethod);
266
+ }
267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RestApiCallSetupComponent, deps: [{ token: i1$1.NgControl, optional: true, self: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.1", type: RestApiCallSetupComponent, isStandalone: true, selector: "lib-rest-api-call-setup", inputs: { postmanCollectionConfig: "postmanCollectionConfig", httpGetDataFunction: "httpGetDataFunction", value: "value", errors: "errors" }, outputs: { valueChanged: "valueChanged" }, host: { properties: { "id": "this.id" } }, providers: [{ provide: MatFormFieldControl, useExisting: RestApiCallSetupComponent }], ngImport: i0, template: "\r\n@if(postmanCollectionConfig && !hasValidValue ){\r\n <app-postman-collections \r\n (nodeSelectionChanged)=\"nodeSelectionChanged($event)\"\r\n [loadingEndPoints]=\"loadingEndPoints\"\r\n [postmanCollectionConfig]=\"postmanCollectionConfig\" >\r\n \r\n </app-postman-collections>\r\n}\r\n\r\n@if(!!hasValidValue && !!postmanCollectionConfig){\r\n<mat-toolbar>\r\n \r\n <button \r\n (click)=\"clearValue()\" [matTooltip]=\"value?.httpEndPoint\" class=\"item\" mat-flat-button\r\n >\r\n\r\n <span class=\"node-key method\" [style.color]=\" methodColor(value?.httpMethod)\">\r\n {{value?.httpMethod}}</span>\r\n <span>\r\n {{ value?.name }} \r\n\r\n </span>\r\n </button> \r\n</mat-toolbar>\r\n\r\n}\r\n\r\n@if(!postmanCollectionConfig) {\r\n <mat-toolbar color=\"warn\">\r\n <p style=\"font-size: 14px; white-space: normal;\r\n line-height: normal;\">\r\n No postman collection configured. \r\n Add Postman collection Id and Api key\r\n </p>\r\n \r\n </mat-toolbar>\r\n \r\n}\r\n", styles: [".item{text-align:left;display:flex;width:100%;justify-content:left;font-size:small;white-space:nowrap;font-weight:400;overflow:hidden}.center{display:flex!important;align-items:center}\n"], dependencies: [{ kind: "component", type: PostmanCollectionsComponent, selector: "app-postman-collections", inputs: ["postmanCollectionConfig", "loadingEndPoints"], outputs: ["nodeSelectionChanged"] }, { kind: "ngmodule", type: MatModulesModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i8$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: CommonModule }] }); }
269
+ }
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: RestApiCallSetupComponent, decorators: [{
271
+ type: Component,
272
+ args: [{ selector: 'lib-rest-api-call-setup', standalone: true, imports: [PostmanCollectionsComponent, MatModulesModule, CommonModule], providers: [{ provide: MatFormFieldControl, useExisting: RestApiCallSetupComponent }], template: "\r\n@if(postmanCollectionConfig && !hasValidValue ){\r\n <app-postman-collections \r\n (nodeSelectionChanged)=\"nodeSelectionChanged($event)\"\r\n [loadingEndPoints]=\"loadingEndPoints\"\r\n [postmanCollectionConfig]=\"postmanCollectionConfig\" >\r\n \r\n </app-postman-collections>\r\n}\r\n\r\n@if(!!hasValidValue && !!postmanCollectionConfig){\r\n<mat-toolbar>\r\n \r\n <button \r\n (click)=\"clearValue()\" [matTooltip]=\"value?.httpEndPoint\" class=\"item\" mat-flat-button\r\n >\r\n\r\n <span class=\"node-key method\" [style.color]=\" methodColor(value?.httpMethod)\">\r\n {{value?.httpMethod}}</span>\r\n <span>\r\n {{ value?.name }} \r\n\r\n </span>\r\n </button> \r\n</mat-toolbar>\r\n\r\n}\r\n\r\n@if(!postmanCollectionConfig) {\r\n <mat-toolbar color=\"warn\">\r\n <p style=\"font-size: 14px; white-space: normal;\r\n line-height: normal;\">\r\n No postman collection configured. \r\n Add Postman collection Id and Api key\r\n </p>\r\n \r\n </mat-toolbar>\r\n \r\n}\r\n", styles: [".item{text-align:left;display:flex;width:100%;justify-content:left;font-size:small;white-space:nowrap;font-weight:400;overflow:hidden}.center{display:flex!important;align-items:center}\n"] }]
273
+ }], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
274
+ type: Optional
275
+ }, {
276
+ type: Self
277
+ }] }, { type: i0.ElementRef }], propDecorators: { id: [{
278
+ type: HostBinding
279
+ }], postmanCollectionConfig: [{
280
+ type: Input
281
+ }], httpGetDataFunction: [{
282
+ type: Input
283
+ }], value: [{
284
+ type: Input
285
+ }], errors: [{
286
+ type: Input
287
+ }], valueChanged: [{
288
+ type: Output
289
+ }] } });
290
+
291
+ export { RestApiCallSetupComponent };
292
+ //# sourceMappingURL=ngx-t-forms-rest-api-call-setup.component-Cd59pfG7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-t-forms-rest-api-call-setup.component-Cd59pfG7.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/filterCollectionItems.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/methodColors.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/postman-collections/postman-collections.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/postman-collections/postman-collections.component.html","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/rest-api-call-setup/rest-api-call-setup.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/rest-api-call-setup/rest-api-call-setup.component.html"],"sourcesContent":["import { IFolderItem, IGetPostmanCollections } from 'ngx-t-forms-types';\r\n\r\n// Update the filter function signature\r\nexport function filterCollectionItems(\r\n collections: IGetPostmanCollections,\r\n searchKey: string\r\n): IFolderItem[] {\r\n const items = collections.collection.item;\r\n const searchText = searchKey.trim().toLowerCase();\r\n if (!searchText) {\r\n return items\r\n }\r\n\r\n return items.filter(collection => {\r\n return searchInItems(collection.item, searchText);\r\n })\r\n \r\n}\r\n\r\nexport function searchInItems(\r\n items: IFolderItem[], \r\n searchText: string\r\n): boolean {\r\n if (!items) return false;\r\n\r\n for (const item of items) {\r\n // Check if current item matches search\r\n if (item.name?.toLowerCase().includes(searchText) || \r\n item.description?.toLowerCase().includes(searchText)) {\r\n return true;\r\n }\r\n\r\n // Recursively search in nested items\r\n if (item.item && searchInItems(item.item, searchText)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}","export function methodColor(method: string): string {\r\n switch (method) {\r\n case 'GET':\r\n return 'green';\r\n case 'POST':\r\n return 'chocolate';\r\n case 'PUT':\r\n return 'yellow'; \r\n case 'DELETE':\r\n return 'red';\r\n default:\r\n return 'currentColor';\r\n }\r\n }","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TreeComponent } from '../api-value-access-rules/functions/convertDataToTree';\r\nimport { IFolderItem, IGetPostmanCollections, IPostmanCollectionConfig } from \"ngx-t-forms-types\";\r\n\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { BehaviorSubject, catchError, Observable, take, tap, throwError } from 'rxjs';\r\nimport { convertPostmanFolderItemsToTree } from './functions/convertPostmanCollectionToTree';\r\nimport { filterCollectionItems } from './functions/filterCollectionItems';\r\nimport { methodColor } from './functions/methodColors';\r\n\r\n@Component({\r\n selector: 'app-postman-collections',\r\n templateUrl: './postman-collections.component.html',\r\n styleUrls: ['./postman-collections.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, FormsModule]\r\n})\r\nexport class PostmanCollectionsComponent implements OnInit {\r\n\r\n private _collection$: BehaviorSubject<IGetPostmanCollections | undefined> = new BehaviorSubject<IGetPostmanCollections | undefined>(undefined)\r\n get collection$(): Observable<IGetPostmanCollections | undefined> {\r\n return this._collection$.asObservable();\r\n }\r\n treeComponent = new TreeComponent();\r\n\r\n\r\n @Output() nodeSelectionChanged = new EventEmitter<IFolderItem>();\r\n\r\n constructor(private readonly httpClient: HttpClient) { }\r\n ngOnInit(): void {\r\n this.initializePostmanService()\r\n }\r\n _searchKey: string = ''\r\n\r\n @Input() postmanCollectionConfig: IPostmanCollectionConfig | undefined\r\n @Input() loadingEndPoints:string[] = []\r\n \r\n selectNode(node: IFolderItem): void {\r\n this.nodeSelectionChanged.emit(node);\r\n }\r\n\r\n private isValidConfig(config: IPostmanCollectionConfig | undefined): boolean {\r\n return Boolean(config?.collectionUrl && config?.collectionKey);\r\n }\r\n\r\n\r\n error: HttpErrorResponse | undefined\r\n loading: boolean = false\r\n private initializePostmanService(): void {\r\n const isValidConfig = this.isValidConfig(this.postmanCollectionConfig)\r\n if (!isValidConfig) {\r\n this.error = new HttpErrorResponse({\r\n error: 'Invalid Postman Collection Config',\r\n })\r\n return\r\n }\r\n const { collectionUrl, collectionKey } = this.postmanCollectionConfig!\r\n \r\n const requestOptions = {\r\n params: {\r\n apikey: collectionKey,\r\n clearSystemHeaders: true\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n\r\n }\r\n }\r\n this.loading = true\r\n this.httpClient.get<IGetPostmanCollections>(\r\n collectionUrl,\r\n requestOptions\r\n ).pipe(\r\n take(1),\r\n tap((data) => {\r\n this._collection$.next(data)\r\n // To ensure the data can be shown as a tree\r\n const treeData = convertPostmanFolderItemsToTree(data.collection.item);\r\n this.treeComponent.assignDataSourceData(treeData)\r\n this.error = undefined\r\n this.loading = false\r\n }),\r\n catchError((err: HttpErrorResponse) => {\r\n this.loading = false\r\n this.error = err\r\n console.error(err)\r\n return throwError(err)\r\n })\r\n ).subscribe();\r\n }\r\n methodColor(method: string): string {\r\n return methodColor(method)\r\n }\r\n searchTree(event: any): void {\r\n const search: string = event.target.value\r\n this.collection$.pipe(\r\n take(1),\r\n tap((collection) => {\r\n if (!collection) {\r\n return\r\n }\r\n const items = filterCollectionItems(collection, search)\r\n const treeData = convertPostmanFolderItemsToTree(items);\r\n this.treeComponent.assignDataSourceData(treeData)\r\n\r\n\r\n })\r\n ).subscribe()\r\n }\r\n getNodeLines(level: number): number[] {\r\n return Array(level).fill(0).map((_, i) => i + 1)\r\n }\r\n}\r\n","\n@if (!!loading ) {\n<div class=\"loadingContainer\">\n <mat-spinner></mat-spinner>\n</div>\n\n}\n@if(!loading){\n <mat-toolbar class=\"search-container\">\n <mat-icon>\n search\n </mat-icon>\n <input type=\"search\" \n placeholder=\"Search api\" \n class=\"search-field\"\n (input)=\"searchTree($event)\"> \n </mat-toolbar>\n <mat-divider ></mat-divider>\n <ng-container *ngIf=\"treeComponent as tree\">\n <mat-tree [dataSource]=\"tree.dataSource\" [treeControl]=\" tree.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n @if (loadingEndPoints.includes(node.value.id)) {\n <mat-spinner diameter=\"22\" class=\"loading-spinner\" >\n \n </mat-spinner>\n }\n <div class=\"line\" *ngFor=\"let line of getNodeLines(node.level)\" [style.left]=\"line* 40 +8 + 'px'\"></div>\n <button [disabled]=\"!node.value?.request?.body?.raw && node.value.request.method ==='POST' || !node.value?.request?.url?.raw \"\n (click)=\"selectNode(node.value)\" [matTooltip]=\"node.value?.request?.url?.raw || 'Invalid Postman config,missing Endpoint URL'\" class=\"item\" mat-button\n *ngIf=\"node.value?.request\">\n \n <span class=\"node-key method\" [style.color]=\" methodColor(node.value.request.method)\">\n <!-- -->\n\n {{node.value.request.method}}</span>\n <span>\n \n {{ node.key }} \n \n </span>\n </button>\n \n </mat-tree-node>\n \n <mat-tree-node *matTreeNodeDef=\"let node; when: tree.hasChild\" matTreeNodePadding>\n <button style=\"padding: 0px; \n \" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n \n {{tree.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n \n </button>\n \n <mat-icon style=\"color: var(--ion-color-medium)\">\n {{tree.treeControl.isExpanded(node) ? 'folder_open' : 'folder'}}\n\n </mat-icon>\n <span style=\"margin-left: 8px;font-weight:500\">\n \n {{ node.key }}\n </span>\n \n </mat-tree-node>\n </mat-tree>\n \n </ng-container>\n <ng-container *ngIf=\"error\">\n <mat-toolbar>\n <span style=\"color: red ;font-size:14px; line-height: normal;\n text-wrap: auto;\">\n {{error.message}}\n </span>\n </mat-toolbar>\n </ng-container>\n}\n","import { Component, ElementRef, EventEmitter, HostBinding, Input, Optional, Output, Self } from '@angular/core';\r\nimport { PostmanCollectionsComponent } from '../postman-collections/postman-collections.component';\r\nimport { IFolderItem, IPostmanCollectionConfig } from \"ngx-t-forms-types\";\r\nimport { APIDataFetchingConfigurationInterface } from 'ngx-t-forms-types';\r\nimport { DataSources } from \"ngx-t-forms-types\";\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { methodColor } from '../postman-collections/functions/methodColors';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { NgControl } from '@angular/forms';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\n\r\n@Component({\r\n selector: 'lib-rest-api-call-setup',\r\n standalone: true,\r\n imports: [PostmanCollectionsComponent,MatModulesModule,CommonModule],\r\n providers: [{ provide: MatFormFieldControl, useExisting:RestApiCallSetupComponent}],\r\n templateUrl: './rest-api-call-setup.component.html',\r\n styleUrl: './rest-api-call-setup.component.css'\r\n})\r\nexport class RestApiCallSetupComponent implements MatFormFieldControl<APIDataFetchingConfigurationInterface | undefined> {\r\n \r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n \r\n @HostBinding() id = `lib-rest-api-call-setup-${RestApiCallSetupComponent.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 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('.lib-rest-api-call-setup');\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 console.log('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 @Input() postmanCollectionConfig: IPostmanCollectionConfig | undefined\r\n @Input() httpGetDataFunction: ((url: string,options:any) => Observable<any>) | undefined = undefined\r\n private _value: APIDataFetchingConfigurationInterface | undefined;\r\n @Input() \r\n set value(val: APIDataFetchingConfigurationInterface | undefined) {\r\n if (JSON.stringify(val) !== JSON.stringify(this._value)) {\r\n this._value = val;\r\n }\r\n }\r\n get value(): APIDataFetchingConfigurationInterface | undefined {\r\n return this._value;\r\n }\r\n @Input() errors:IConfigElementError[] |undefined = [];\r\n @Output() valueChanged = new EventEmitter<APIDataFetchingConfigurationInterface | undefined >();\r\n loadingEndPoints: string[] = []\r\n async nodeSelectionChanged(node: IFolderItem) {\r\n\r\n const { id, name, request, response } = node;\r\n if(!request || !response) return;\r\n let requestBody\r\n try {\r\n requestBody = JSON.parse(request?.body?.raw || '{}')\r\n } catch (error) {\r\n console.error(\"API BODY PARSE ERROR\")\r\n requestBody = {}\r\n }\r\n \r\n\r\n \r\n const keyExtraction = (key: string, value: any, primaryKey: boolean) => {\r\n return ({\r\n name: key,\r\n type: typeof value,\r\n primaryKey\r\n }) as any\r\n }\r\n\r\n // if(request.method === 'GET'){\r\n // this.loadingEndPoints.push(id)\r\n // try {\r\n // responseBody = await this.httpGetDataFunction?.(request.url.raw)\r\n // } catch (error) {\r\n // console.error(error)\r\n // this.loadingEndPoints = this.loadingEndPoints.filter((item) => item !== id)\r\n // }\r\n\r\n // }\r\n \r\n const secondaryKeys = Object.entries(requestBody['data'] || {}).map(([key, value]) => keyExtraction(key, value, false))\r\n delete requestBody['data']\r\n\r\n const primaryKeys = Object.entries(requestBody).map(([key, value]) => keyExtraction(key, value, true))\r\n const minimumInputRequired: any = request?.method === 'POST' ? [...primaryKeys, ...secondaryKeys] : []\r\n const transformedNode= {\r\n _id: id,\r\n name: name,\r\n httpEndPoint: request.url.raw,\r\n httpMethod: request.method,\r\n source: DataSources.Api,\r\n postFormData: request.method === 'POST',\r\n backEndConfig: {\r\n minimumInputRequired,\r\n },\r\n \r\n } as APIDataFetchingConfigurationInterface \r\n const fetch: any = transformedNode;\r\n console.log(fetch)\r\n this.valueChanged.emit(fetch);\r\n }\r\n clearValue() {\r\n const source = this.value?.source as any\r\n this._value = undefined;\r\n this.valueChanged.emit(undefined);\r\n this.valueChanged.emit({source:source} as any);\r\n }\r\n methodColor(method: string| undefined): string {\r\n return methodColor(method||'POST')\r\n }\r\n get hasValidValue(){\r\n return Boolean(this.value) && Boolean(this.value?.httpEndPoint) && Boolean(this.value?.httpMethod) \r\n }\r\n \r\n}\r\n","\r\n@if(postmanCollectionConfig && !hasValidValue ){\r\n <app-postman-collections \r\n (nodeSelectionChanged)=\"nodeSelectionChanged($event)\"\r\n [loadingEndPoints]=\"loadingEndPoints\"\r\n [postmanCollectionConfig]=\"postmanCollectionConfig\" >\r\n \r\n </app-postman-collections>\r\n}\r\n\r\n@if(!!hasValidValue && !!postmanCollectionConfig){\r\n<mat-toolbar>\r\n \r\n <button \r\n (click)=\"clearValue()\" [matTooltip]=\"value?.httpEndPoint\" class=\"item\" mat-flat-button\r\n >\r\n\r\n <span class=\"node-key method\" [style.color]=\" methodColor(value?.httpMethod)\">\r\n {{value?.httpMethod}}</span>\r\n <span>\r\n {{ value?.name }} \r\n\r\n </span>\r\n </button> \r\n</mat-toolbar>\r\n\r\n}\r\n\r\n@if(!postmanCollectionConfig) {\r\n <mat-toolbar color=\"warn\">\r\n <p style=\"font-size: 14px; white-space: normal;\r\n line-height: normal;\">\r\n No postman collection configured. \r\n Add Postman collection Id and Api key\r\n </p>\r\n \r\n </mat-toolbar>\r\n \r\n}\r\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA;AACgB,SAAA,qBAAqB,CACjC,WAAmC,EACnC,SAAiB,EAAA;AAEjB,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI;IACzC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACjD,IAAI,CAAC,UAAU,EAAE;AACb,QAAA,OAAO,KAAK;;AAGhB,IAAA,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,IAAG;QACzB,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC;AACrD,KAAC,CAAC;AAEV;AAEgB,SAAA,aAAa,CACzB,KAAoB,EACpB,UAAkB,EAAA;AAElB,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK;AAExB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;;QAEtB,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACtD,YAAA,OAAO,IAAI;;;AAIf,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI;;;AAInB,IAAA,OAAO,KAAK;AAChB;;ACvCM,SAAU,WAAW,CAAC,MAAc,EAAA;IACtC,QAAQ,MAAM;AACZ,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,MAAM;AACT,YAAA,OAAO,WAAW;AACpB,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,QAAQ;AACjB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,KAAK;AACd,QAAA;AACE,YAAA,OAAO,cAAc;;AAE3B;;MCOW,2BAA2B,CAAA;AAGtC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAOzC,IAAA,WAAA,CAA6B,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;AAT/B,QAAA,IAAA,CAAA,YAAY,GAAwD,IAAI,eAAe,CAAqC,SAAS,CAAC;AAI9I,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,aAAa,EAAE;AAGzB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAe;QAMhE,IAAU,CAAA,UAAA,GAAW,EAAE;QAGd,IAAgB,CAAA,gBAAA,GAAY,EAAE;QAYvC,IAAO,CAAA,OAAA,GAAY,KAAK;;IAlBxB,QAAQ,GAAA;QACN,IAAI,CAAC,wBAAwB,EAAE;;AAOjC,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAG9B,IAAA,aAAa,CAAC,MAA4C,EAAA;QAChE,OAAO,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,MAAM,EAAE,aAAa,CAAC;;IAMxD,wBAAwB,GAAA;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAiB,CAAC;AACjC,gBAAA,KAAK,EAAE,mCAAmC;AAC3C,aAAA,CAAC;YACF;;QAEF,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,uBAAwB;AAEtE,QAAA,MAAM,cAAc,GAAG;AACrB,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE,aAAa;AACrB,gBAAA,kBAAkB,EAAE;AACrB,aAAA;AACD,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AAEnC;SACF;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,aAAa,EACb,cAAc,CACf,CAAC,IAAI,CACJ,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,IAAI,KAAI;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;YAE5B,MAAM,QAAQ,GAAG,+BAA+B,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACtE,YAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,SAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAsB,KAAI;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AAClB,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE;;AAEf,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC;;AAE5B,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,MAAM,GAAW,KAAK,CAAC,MAAM,CAAC,KAAK;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,UAAU,KAAI;YACjB,IAAI,CAAC,UAAU,EAAE;gBACf;;YAEF,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC;AACvD,YAAA,MAAM,QAAQ,GAAG,+BAA+B,CAAC,KAAK,CAAC;AACvD,YAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AAGnD,SAAC,CAAC,CACH,CAAC,SAAS,EAAE;;AAEf,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;8GA7FvC,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,oPCpBxC,09EA4EA,EAAA,MAAA,EAAA,CAAA,s5CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1DY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,ozDAAE,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAE1C,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EAGvB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,09EAAA,EAAA,MAAA,EAAA,CAAA,s5CAAA,CAAA,EAAA;+EAW5C,oBAAoB,EAAA,CAAA;sBAA7B;gBAQQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;;;MEhBU,yBAAyB,CAAA;aAE3B,IAAM,CAAA,MAAA,GAAG,CAAH,CAAK;IAMlB,WAAuC,CAAA,SAAoB,EAAU,WAAoC,EAAA;QAAlE,IAAS,CAAA,SAAA,GAAT,SAAS;QAAqB,IAAW,CAAA,WAAA,GAAX,WAAW;AALhF,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAEnB,QAAA,IAAA,CAAA,EAAE,GAAG,CAA2B,wBAAA,EAAA,yBAAyB,CAAC,MAAM,EAAE,EAAE;QAEnF,IAAW,CAAA,WAAA,GAAW,EAAE;QAExB,IAAO,CAAA,OAAA,GAAY,KAAK;QAOxB,IAAQ,CAAA,QAAA,GAAY,KAAK;QACzB,IAAQ,CAAA,QAAA,GAAY,KAAK;QAyBzB,IAAO,CAAA,OAAA,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAG;QAYb,IAAmB,CAAA,mBAAA,GAA+D,SAAS;QAWzF,IAAM,CAAA,MAAA,GAAoC,EAAE;AAC7C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAsD;QAChG,IAAgB,CAAA,gBAAA,GAAa,EAAE;;AA1D5B,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK;;AAEpB,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;AAIpC,IAAA,IAAI,UAAU,GAAA;QACb,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAE,EAAE,EAAE,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO;AAClG,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAK,QAAQ;;AAOnD,IAAA,iBAAiB,CAAC,GAAa,EAAA;;QAE7B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AACtD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,0BAA0B,CAAC;;YAE/F,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;;;AAIpE,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QAChC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAK1B,aAAa,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;;IASzB,IACI,KAAK,CAAC,GAAsD,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACvD,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG;;;AAGrB,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;IAKrB,MAAM,oBAAoB,CAAC,IAAiB,EAAA;QAEzC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI;AAC5C,QAAA,IAAG,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE;AAC1B,QAAA,IAAI,WAAW;AACf,QAAA,IAAI;AACH,YAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;;QACnD,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;YACrC,WAAW,GAAG,EAAE;;QAKlB,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,UAAmB,KAAI;AACrE,YAAA,QAAQ;AACN,gBAAA,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,OAAO,KAAK;gBAClB;AACD,aAAA;AACH,SAAC;;;;;;;;;;AAaD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACvH,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC;AAE1B,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACtG,MAAM,oBAAoB,GAAQ,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE;AACtG,QAAA,MAAM,eAAe,GAAE;AACrB,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;YAC7B,UAAU,EAAE,OAAO,CAAC,MAAM;YAC1B,MAAM,EAAE,WAAW,CAAC,GAAG;AACvB,YAAA,YAAY,EAAE,OAAO,CAAC,MAAM,KAAK,MAAM;AACvC,YAAA,aAAa,EAAE;gBACb,oBAAoB;AACrB,aAAA;SAEuC;QAC1C,MAAM,KAAK,GAAQ,eAAe;AAClC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;IAE/B,UAAU,GAAA;AACR,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAa;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,MAAM,EAAQ,CAAC;;AAEhD,IAAA,WAAW,CAAC,MAAyB,EAAA;AACnC,QAAA,OAAO,WAAW,CAAC,MAAM,IAAE,MAAM,CAAC;;AAEnC,IAAA,IAAI,aAAa,GAAA;QACd,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;;8GArI3F,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0SAJxB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAC,yBAAyB,EAAC,CAAC,0BClBtF,4jCAuCA,EAAA,MAAA,EAAA,CAAA,4LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBY,2BAA2B,EAAC,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,6mBAAC,YAAY,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAKxD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EACvB,IAAI,EACP,OAAA,EAAA,CAAC,2BAA2B,EAAC,gBAAgB,EAAC,YAAY,CAAC,aACxD,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,yBAA0B,EAAC,CAAC,EAAA,QAAA,EAAA,4jCAAA,EAAA,MAAA,EAAA,CAAA,4LAAA,CAAA,EAAA;;0BAYrE;;0BAAY;kEAHV,EAAE,EAAA,CAAA;sBAAhB;gBAiDM,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAGG,KAAK,EAAA,CAAA;sBADR;gBASU,MAAM,EAAA,CAAA;sBAAd;gBACO,YAAY,EAAA,CAAA;sBAArB;;;;;"}
@@ -0,0 +1,156 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, computed, ViewChild, Input, Component } from '@angular/core';
3
+ import { F as FormsStoreService, M as MatModulesModule } from './ngx-t-forms-ngx-t-forms-B-w5W1gG.mjs';
4
+ import * as i4$1 from '@angular/material/sort';
5
+ import { MatSort } from '@angular/material/sort';
6
+ import { MatPaginator } from '@angular/material/paginator';
7
+ import * as i5$1 from '@angular/material/table';
8
+ import { MatTableDataSource } from '@angular/material/table';
9
+ import * as i2 from '@angular/common';
10
+ import { CommonModule } from '@angular/common';
11
+ import { toSignal } from '@angular/core/rxjs-interop';
12
+ import { ElementTypes, validateFormSlide } from 'ngx-t-forms-types';
13
+ import * as i4 from '@angular/material/chips';
14
+ import * as i5 from '@angular/material/icon';
15
+ import * as i9 from '@angular/material/toolbar';
16
+
17
+ class SectionReportComponent {
18
+ constructor() {
19
+ this.sectionId = '';
20
+ this.displayedColumns = ['icon', 'name', 'description', 'value'];
21
+ this.dataSource = new MatTableDataSource();
22
+ this.store = inject(FormsStoreService);
23
+ this.selectFormInEdit$ = this.store.selectors.selectFormInEdit$;
24
+ this.selectFormInEdit = toSignal(this.selectFormInEdit$);
25
+ this.section = computed(() => {
26
+ const form = this.selectFormInEdit();
27
+ return form?.form.slides.find((slide) => slide.sectionId === this.sectionId) || null;
28
+ });
29
+ this.sectionData = computed(() => {
30
+ const section = this.section();
31
+ return this.updateTableData(section);
32
+ });
33
+ }
34
+ ngOnInit() {
35
+ }
36
+ updateTableData(data) {
37
+ if (!data)
38
+ return [];
39
+ const allInputs = data.columns.flatMap(column => column.element === ElementTypes.MultipleInput ? [...(column?.formInputs || []), column] : [column]).filter((input) => input.sectionId === this.sectionId);
40
+ const calculatedInputs = allInputs.filter((input) => input.calculatedFieldRules?.formula && input.calculatedFieldRules?.formula !== '');
41
+ const inputsWithManualValidations = allInputs.filter((input) => input.validators?.some((validator) => Object.keys(validator).length > 0));
42
+ const allSectionInputConfigErrors = validateFormSlide(data);
43
+ const metrics = [
44
+ {
45
+ icon: 'input',
46
+ name: 'Total Inputs',
47
+ value: Object.keys(allInputs || {}).length,
48
+ color: '#2196f3',
49
+ description: 'Total number of form inputs in section',
50
+ trend: 'stable',
51
+ category: 'inputs'
52
+ },
53
+ {
54
+ icon: 'calculate',
55
+ name: 'Calculated Fields',
56
+ value: calculatedInputs.length,
57
+ details: calculatedInputs,
58
+ color: '#4caf50',
59
+ description: 'Fields with calculation formulas',
60
+ trend: 'monitoring',
61
+ category: 'calculations'
62
+ },
63
+ {
64
+ icon: 'rule',
65
+ name: 'Manual Validations',
66
+ value: inputsWithManualValidations.length,
67
+ details: inputsWithManualValidations,
68
+ color: '#ff9800',
69
+ description: 'Fields with custom validation rules',
70
+ trend: 'warning',
71
+ category: 'validation'
72
+ },
73
+ {
74
+ icon: 'bug_report',
75
+ name: 'Config Errors',
76
+ value: allSectionInputConfigErrors.length,
77
+ color: '#f44336',
78
+ description: 'Configuration errors detected',
79
+ trend: 'critical',
80
+ category: 'errors'
81
+ },
82
+ // {
83
+ // icon: 'api',
84
+ // name: 'GET Methods',
85
+ // value: data.getMethodInputs.length,
86
+ // details: data.getMethodInputs,
87
+ // color: '#2196f3',
88
+ // description: 'Fields using GET API calls',
89
+ // trend: 'stable',
90
+ // category: 'api'
91
+ // },
92
+ // {
93
+ // icon: 'sync',
94
+ // name: 'POST Methods',
95
+ // value: data.postMethodInputs.length,
96
+ // details: data.postMethodInputs,
97
+ // color: '#673ab7',
98
+ // description: 'Fields using POST API calls',
99
+ // trend: 'monitoring',
100
+ // category: 'api'
101
+ // },
102
+ // {
103
+ // icon: 'visibility',
104
+ // name: 'Hidden Fields',
105
+ // value: Object.values(data.sectionInputs || {})
106
+ // .filter((input: TInputControllerService) => input.input.readonly).length,
107
+ // color: '#9e9e9e',
108
+ // description: 'Number of hidden/conditional fields',
109
+ // trend: 'neutral',
110
+ // category: 'visibility'
111
+ // },
112
+ // {
113
+ // icon: 'multiple_stop',
114
+ // name: 'Multiple Inputs',
115
+ // value: Object.values(data.sectionInputs || {})
116
+ // .filter((input: TInputControllerService) => input.input.element ===ElementTypes.MultipleInput).length,
117
+ // color: '#795548',
118
+ // description: 'Fields allowing multiple values',
119
+ // trend: 'stable',
120
+ // category: 'inputs'
121
+ // },
122
+ // {
123
+ // icon: 'error_outline',
124
+ // name: 'Required Fields',
125
+ // value: Object.values(data.sectionInputs || {})
126
+ // .filter((input: TInputControllerService) => input.input.required).length,
127
+ // color: '#e91e63',
128
+ // description: 'Mandatory input fields',
129
+ // trend: 'warning',
130
+ // category: 'validation'
131
+ // }
132
+ ];
133
+ return metrics;
134
+ }
135
+ applyFilter(event) {
136
+ const filterValue = event.target.value;
137
+ this.dataSource.filter = filterValue.trim().toLowerCase();
138
+ }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SectionReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.1", type: SectionReportComponent, isStandalone: true, selector: "app-section-report", inputs: { sectionId: "sectionId" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"report-container\" *ngIf=\"(section())\">\r\n\r\n\r\n <mat-toolbar style=\"padding: 0px;\">\r\n <mat-icon class=\"section-icon\">analytics</mat-icon>\r\n <small>\r\n Form Section Diagnostic Report\r\n </small>\r\n\r\n <span class=\"spacer\"></span>\r\n <div class=\"status-chips\">\r\n <div class=\"status-chip\" >\r\n <mat-icon>check_circle</mat-icon>\r\n \r\n </div>\r\n <div class=\"status-chip initialized\" *ngIf=\"(section())?.sectionIsSeen\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <table mat-table [dataSource]=\"(sectionData())||[]\" matSort class=\"w-full\">\r\n <!-- Icon Column -->\r\n <ng-container matColumnDef=\"icon\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-icon [ngStyle]=\"{'color': row.color}\">{{ row.icon }}</mat-icon>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- description Column -->\r\n <ng-container matColumnDef=\"description\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>description</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.description }}</td>\r\n </ng-container>\r\n\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Type</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.name }}</td>\r\n </ng-container>\r\n\r\n <!-- Value Column -->\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.value }}</td>\r\n </ng-container>\r\n\r\n <!-- Details Column -->\r\n <ng-container matColumnDef=\"details\">\r\n <th mat-header-cell *matHeaderCellDef>Details</th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-chip-set *ngIf=\"row.details?.length\">\r\n <mat-chip *ngFor=\"let detail of row.details\" class=\"detail-chip\">\r\n {{ detail }}\r\n </mat-chip>\r\n </mat-chip-set>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n</div>", styles: [".report-container{padding:20px;display:flex;flex-direction:column;gap:20px;background:var(--mat-toolbar-container-background-color, var(--mat-app-surface))}.header-card{background:#fff}.title-section{display:flex;align-items:center;gap:12px}.section-icon{color:#4f46e5;font-size:28px;width:28px;height:28px;margin-right:8px}h1{margin:0;font-size:20px;font-weight:500}.subtitle{margin:4px 0 0;color:#666;font-size:14px}.status-chips{display:flex;gap:8px;margin-left:auto}.status-chip{display:flex;align-items:center;gap:4px;padding:4px 12px;border-radius:16px;background:#22c55e;color:#fff;font-size:14px}.status-chip.invalid{background:#ef4444}.status-chip.initialized{background:#3b82f6}.status-chip mat-icon{font-size:18px;width:18px;height:18px}.filter-field{width:100%;margin-bottom:16px}.detail-chip{font-size:12px;height:24px}mat-card-content{padding:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatModulesModule }, { 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.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i4$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }] }); }
141
+ }
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SectionReportComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'app-section-report', standalone: true, imports: [CommonModule, MatModulesModule], template: "<div class=\"report-container\" *ngIf=\"(section())\">\r\n\r\n\r\n <mat-toolbar style=\"padding: 0px;\">\r\n <mat-icon class=\"section-icon\">analytics</mat-icon>\r\n <small>\r\n Form Section Diagnostic Report\r\n </small>\r\n\r\n <span class=\"spacer\"></span>\r\n <div class=\"status-chips\">\r\n <div class=\"status-chip\" >\r\n <mat-icon>check_circle</mat-icon>\r\n \r\n </div>\r\n <div class=\"status-chip initialized\" *ngIf=\"(section())?.sectionIsSeen\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <table mat-table [dataSource]=\"(sectionData())||[]\" matSort class=\"w-full\">\r\n <!-- Icon Column -->\r\n <ng-container matColumnDef=\"icon\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-icon [ngStyle]=\"{'color': row.color}\">{{ row.icon }}</mat-icon>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- description Column -->\r\n <ng-container matColumnDef=\"description\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>description</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.description }}</td>\r\n </ng-container>\r\n\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Type</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.name }}</td>\r\n </ng-container>\r\n\r\n <!-- Value Column -->\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.value }}</td>\r\n </ng-container>\r\n\r\n <!-- Details Column -->\r\n <ng-container matColumnDef=\"details\">\r\n <th mat-header-cell *matHeaderCellDef>Details</th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-chip-set *ngIf=\"row.details?.length\">\r\n <mat-chip *ngFor=\"let detail of row.details\" class=\"detail-chip\">\r\n {{ detail }}\r\n </mat-chip>\r\n </mat-chip-set>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n</div>", styles: [".report-container{padding:20px;display:flex;flex-direction:column;gap:20px;background:var(--mat-toolbar-container-background-color, var(--mat-app-surface))}.header-card{background:#fff}.title-section{display:flex;align-items:center;gap:12px}.section-icon{color:#4f46e5;font-size:28px;width:28px;height:28px;margin-right:8px}h1{margin:0;font-size:20px;font-weight:500}.subtitle{margin:4px 0 0;color:#666;font-size:14px}.status-chips{display:flex;gap:8px;margin-left:auto}.status-chip{display:flex;align-items:center;gap:4px;padding:4px 12px;border-radius:16px;background:#22c55e;color:#fff;font-size:14px}.status-chip.invalid{background:#ef4444}.status-chip.initialized{background:#3b82f6}.status-chip mat-icon{font-size:18px;width:18px;height:18px}.filter-field{width:100%;margin-bottom:16px}.detail-chip{font-size:12px;height:24px}mat-card-content{padding:16px}\n"] }]
145
+ }], ctorParameters: () => [], propDecorators: { sectionId: [{
146
+ type: Input
147
+ }], sort: [{
148
+ type: ViewChild,
149
+ args: [MatSort]
150
+ }], paginator: [{
151
+ type: ViewChild,
152
+ args: [MatPaginator]
153
+ }] } });
154
+
155
+ export { SectionReportComponent };
156
+ //# sourceMappingURL=ngx-t-forms-section-report.component-CBXHr1qQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-t-forms-section-report.component-CBXHr1qQ.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/section-report/section-report.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/elements/section-report/section-report.component.html"],"sourcesContent":["import { Component, computed, inject, Input, ViewChild } from '@angular/core';\r\n\r\n\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\n\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ElementTypes, FormSlideInterface, validateFormSlide } from 'ngx-t-forms-types';\r\n@Component({\r\n selector: 'app-section-report',\r\n standalone: true,\r\n imports: [CommonModule,MatModulesModule],\r\n templateUrl: './section-report.component.html',\r\n styleUrl: './section-report.component.scss'\r\n})\r\nexport class SectionReportComponent {\r\n @Input() sectionId: string = '';\r\n @ViewChild(MatSort) sort!: MatSort;\r\n @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n displayedColumns: string[] = ['icon', 'name','description', 'value'];\r\n dataSource = new MatTableDataSource<any>();\r\n\r\n private store:FormsStoreService = inject(FormsStoreService)\r\n selectFormInEdit$ = this.store.selectors.selectFormInEdit$\r\n selectFormInEdit = toSignal(this.selectFormInEdit$)\r\n constructor() {}\r\n\r\n ngOnInit() {\r\n\r\n }\r\n \r\n\r\n section = computed(()=>\r\n {\r\n const form = this.selectFormInEdit()\r\n return form?.form.slides.find((slide: FormSlideInterface) => slide.sectionId === this.sectionId) || null\r\n })\r\n \r\n sectionData = computed(()=> {\r\n const section = this.section()\r\n return this.updateTableData(section)\r\n })\r\n\r\n updateTableData(data: FormSlideInterface|null) {\r\n if(!data) return [];\r\n const allInputs = data.columns.flatMap(column=>column.element ===ElementTypes.MultipleInput ? [...(column?.formInputs||[]),column]: [column]).filter(\r\n (input) => input.sectionId === this.sectionId\r\n )\r\n const calculatedInputs = allInputs.filter((input) => input.calculatedFieldRules?.formula && input.calculatedFieldRules?.formula !== '');\r\n const inputsWithManualValidations = allInputs.filter((input) => input.validators?.some((validator) => Object.keys(validator).length > 0));\r\n const allSectionInputConfigErrors = validateFormSlide(data);\r\n \r\n const metrics: any[] = [\r\n {\r\n icon: 'input',\r\n name: 'Total Inputs',\r\n value: Object.keys(allInputs|| {}).length,\r\n color: '#2196f3',\r\n description: 'Total number of form inputs in section',\r\n trend: 'stable',\r\n category: 'inputs'\r\n },\r\n {\r\n icon: 'calculate',\r\n name: 'Calculated Fields',\r\n value: calculatedInputs.length,\r\n details:calculatedInputs,\r\n color: '#4caf50',\r\n description: 'Fields with calculation formulas',\r\n trend: 'monitoring',\r\n category: 'calculations'\r\n },\r\n {\r\n icon: 'rule',\r\n name: 'Manual Validations',\r\n value: inputsWithManualValidations.length,\r\n details: inputsWithManualValidations,\r\n color: '#ff9800',\r\n description: 'Fields with custom validation rules',\r\n trend: 'warning',\r\n category: 'validation'\r\n },\r\n \r\n {\r\n icon: 'bug_report',\r\n name: 'Config Errors',\r\n value: allSectionInputConfigErrors.length,\r\n color: '#f44336',\r\n description: 'Configuration errors detected',\r\n trend: 'critical',\r\n category: 'errors'\r\n },\r\n // {\r\n // icon: 'api',\r\n // name: 'GET Methods',\r\n // value: data.getMethodInputs.length,\r\n // details: data.getMethodInputs,\r\n // color: '#2196f3',\r\n // description: 'Fields using GET API calls',\r\n // trend: 'stable',\r\n // category: 'api'\r\n // },\r\n // {\r\n // icon: 'sync',\r\n // name: 'POST Methods',\r\n // value: data.postMethodInputs.length,\r\n // details: data.postMethodInputs,\r\n // color: '#673ab7',\r\n // description: 'Fields using POST API calls',\r\n // trend: 'monitoring',\r\n // category: 'api'\r\n // },\r\n // {\r\n // icon: 'visibility',\r\n // name: 'Hidden Fields',\r\n // value: Object.values(data.sectionInputs || {})\r\n // .filter((input: TInputControllerService) => input.input.readonly).length,\r\n // color: '#9e9e9e',\r\n // description: 'Number of hidden/conditional fields',\r\n // trend: 'neutral',\r\n // category: 'visibility'\r\n // },\r\n // {\r\n // icon: 'multiple_stop',\r\n // name: 'Multiple Inputs',\r\n // value: Object.values(data.sectionInputs || {})\r\n // .filter((input: TInputControllerService) => input.input.element ===ElementTypes.MultipleInput).length,\r\n // color: '#795548',\r\n // description: 'Fields allowing multiple values',\r\n // trend: 'stable',\r\n // category: 'inputs'\r\n // },\r\n // {\r\n // icon: 'error_outline',\r\n // name: 'Required Fields',\r\n // value: Object.values(data.sectionInputs || {})\r\n // .filter((input: TInputControllerService) => input.input.required).length,\r\n // color: '#e91e63',\r\n // description: 'Mandatory input fields',\r\n // trend: 'warning',\r\n // category: 'validation'\r\n // }\r\n ];\r\n \r\n return metrics;\r\n }\r\n\r\n applyFilter(event: Event) {\r\n const filterValue = (event.target as HTMLInputElement).value;\r\n this.dataSource.filter = filterValue.trim().toLowerCase();\r\n }\r\n}","<div class=\"report-container\" *ngIf=\"(section())\">\r\n\r\n\r\n <mat-toolbar style=\"padding: 0px;\">\r\n <mat-icon class=\"section-icon\">analytics</mat-icon>\r\n <small>\r\n Form Section Diagnostic Report\r\n </small>\r\n\r\n <span class=\"spacer\"></span>\r\n <div class=\"status-chips\">\r\n <div class=\"status-chip\" >\r\n <mat-icon>check_circle</mat-icon>\r\n \r\n </div>\r\n <div class=\"status-chip initialized\" *ngIf=\"(section())?.sectionIsSeen\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <table mat-table [dataSource]=\"(sectionData())||[]\" matSort class=\"w-full\">\r\n <!-- Icon Column -->\r\n <ng-container matColumnDef=\"icon\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-icon [ngStyle]=\"{'color': row.color}\">{{ row.icon }}</mat-icon>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- description Column -->\r\n <ng-container matColumnDef=\"description\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>description</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.description }}</td>\r\n </ng-container>\r\n\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Type</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.name }}</td>\r\n </ng-container>\r\n\r\n <!-- Value Column -->\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>Value</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.value }}</td>\r\n </ng-container>\r\n\r\n <!-- Details Column -->\r\n <ng-container matColumnDef=\"details\">\r\n <th mat-header-cell *matHeaderCellDef>Details</th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-chip-set *ngIf=\"row.details?.length\">\r\n <mat-chip *ngFor=\"let detail of row.details\" class=\"detail-chip\">\r\n {{ detail }}\r\n </mat-chip>\r\n </mat-chip-set>\r\n </td>\r\n </ng-container>\r\n\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n</div>"],"names":["i1","i2","i3","i4","i5","i6"],"mappings":";;;;;;;;;;;;;;;;MAoBa,sBAAsB,CAAA;AAWjC,IAAA,WAAA,GAAA;QAVS,IAAS,CAAA,SAAA,GAAW,EAAE;QAI/B,IAAgB,CAAA,gBAAA,GAAa,CAAC,MAAM,EAAE,MAAM,EAAC,aAAa,EAAE,OAAO,CAAC;AACpE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,kBAAkB,EAAO;AAElC,QAAA,IAAA,CAAA,KAAK,GAAqB,MAAM,CAAC,iBAAiB,CAAC;QAC3D,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,iBAAiB;AAC1D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAQnD,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAI;AAEnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACpC,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAyB,KAAK,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI;AAC1G,SAAC,CAAC;AAEL,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAI;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,OAAQ,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;AACvC,SAAC,CAAC;;IAdF,QAAQ,GAAA;;AAgBR,IAAA,eAAe,CAAC,IAA6B,EAAA;AAC3C,QAAA,IAAG,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAE,MAAM,CAAC,OAAO,KAAI,YAAY,CAAC,aAAa,GAAG,CAAC,IAAI,MAAM,EAAE,UAAU,IAAE,EAAE,CAAC,EAAC,MAAM,CAAC,GAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAClJ,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAC9C;QACD,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,oBAAoB,EAAE,OAAO,IAAI,KAAK,CAAC,oBAAoB,EAAE,OAAO,KAAK,EAAE,CAAC;AACvI,QAAA,MAAM,2BAA2B,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzI,QAAA,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAE3D,QAAA,MAAM,OAAO,GAAU;AACrB,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAG,EAAE,CAAC,CAAC,MAAM;AACzC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EAAE,wCAAwC;AACrD,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,mBAAmB;gBACzB,KAAK,EAAE,gBAAgB,CAAC,MAAM;AAC9B,gBAAA,OAAO,EAAC,gBAAgB;AACxB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EAAE,kCAAkC;AAC/C,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,QAAQ,EAAE;AACX,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,2BAA2B,CAAC,MAAM;AACzC,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EAAE,qCAAqC;AAClD,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,QAAQ,EAAE;AACT,aAAA;AAEH,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,2BAA2B,CAAC,MAAM;AACzC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EAAE,+BAA+B;AAC5C,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,QAAQ,EAAE;AACX,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAmDF;AAED,QAAA,OAAO,OAAO;;AAGhB,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,MAAM,WAAW,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AAC5D,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;;8GAvIhD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEtB,OAAO,EACP,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,YAAY,gDCvBzB,22EAyEM,EAAA,MAAA,EAAA,CAAA,k2BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzDM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAC,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAI5B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,22EAAA,EAAA,MAAA,EAAA,CAAA,k2BAAA,CAAA,EAAA;wDAK/B,SAAS,EAAA,CAAA;sBAAjB;gBACmB,IAAI,EAAA,CAAA;sBAAvB,SAAS;uBAAC,OAAO;gBACO,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY;;;;;"}