ngx-t-forms 2.0.31 → 2.0.32

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 (96) hide show
  1. package/fesm2022/{ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs → ngx-t-forms-auto-complete-input-element.component-CaXs4561.mjs} +2 -2
  2. package/fesm2022/{ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs.map → ngx-t-forms-auto-complete-input-element.component-CaXs4561.mjs.map} +1 -1
  3. package/fesm2022/{ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs → ngx-t-forms-basic-input-input-element.component-Dotyd-Qs.mjs} +3 -3
  4. package/fesm2022/{ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs.map → ngx-t-forms-basic-input-input-element.component-Dotyd-Qs.mjs.map} +1 -1
  5. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs → ngx-t-forms-calculated-field-rules.component-BhxT6tRq.mjs} +4 -4
  6. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs.map → ngx-t-forms-calculated-field-rules.component-BhxT6tRq.mjs.map} +1 -1
  7. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs → ngx-t-forms-chip-options-creator-editor.component-d4QeVhsp.mjs} +4 -4
  8. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs.map → ngx-t-forms-chip-options-creator-editor.component-d4QeVhsp.mjs.map} +1 -1
  9. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-Gn8exJ9a.mjs} +2 -2
  10. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs.map → ngx-t-forms-config-mscoa-additional-inputs.component-Gn8exJ9a.mjs.map} +1 -1
  11. package/fesm2022/{ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs → ngx-t-forms-data-source-picker.component-Ebf_if9j.mjs} +6 -6
  12. package/fesm2022/{ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs.map → ngx-t-forms-data-source-picker.component-Ebf_if9j.mjs.map} +1 -1
  13. package/fesm2022/{ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs → ngx-t-forms-date-picker-input-element.component-kdinBGRA.mjs} +2 -2
  14. package/fesm2022/{ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs.map → ngx-t-forms-date-picker-input-element.component-kdinBGRA.mjs.map} +1 -1
  15. package/fesm2022/{ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs → ngx-t-forms-date-range-picker-input-element.component-4W6uvrDU.mjs} +2 -2
  16. package/fesm2022/{ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs.map → ngx-t-forms-date-range-picker-input-element.component-4W6uvrDU.mjs.map} +1 -1
  17. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs → ngx-t-forms-document-list-label-config-editor.component-CR6EvgJO.mjs} +3 -3
  18. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs.map → ngx-t-forms-document-list-label-config-editor.component-CR6EvgJO.mjs.map} +1 -1
  19. package/fesm2022/{ngx-t-forms-document-picker.component-qObjcqhE.mjs → ngx-t-forms-document-picker.component-BThdRFec.mjs} +2 -2
  20. package/fesm2022/{ngx-t-forms-document-picker.component-qObjcqhE.mjs.map → ngx-t-forms-document-picker.component-BThdRFec.mjs.map} +1 -1
  21. package/fesm2022/{ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs → ngx-t-forms-editor-input-element.component-1X6uAPeZ.mjs} +3 -3
  22. package/fesm2022/{ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs.map → ngx-t-forms-editor-input-element.component-1X6uAPeZ.mjs.map} +1 -1
  23. package/fesm2022/{ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs → ngx-t-forms-editor-js-input.component-5MD8wRj0.mjs} +2 -2
  24. package/fesm2022/{ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs.map → ngx-t-forms-editor-js-input.component-5MD8wRj0.mjs.map} +1 -1
  25. package/fesm2022/{ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs → ngx-t-forms-file-upload-input-element.component-BAtuymMY.mjs} +2 -2
  26. package/fesm2022/{ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs.map → ngx-t-forms-file-upload-input-element.component-BAtuymMY.mjs.map} +1 -1
  27. package/fesm2022/{ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs → ngx-t-forms-form-input-selector.component-B42xP3jh.mjs} +2 -2
  28. package/fesm2022/{ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs.map → ngx-t-forms-form-input-selector.component-B42xP3jh.mjs.map} +1 -1
  29. package/fesm2022/{ngx-t-forms-form-json-view.component-856Hx1Bg.mjs → ngx-t-forms-form-json-view.component-DnnLXqR0.mjs} +2 -2
  30. package/fesm2022/{ngx-t-forms-form-json-view.component-856Hx1Bg.mjs.map → ngx-t-forms-form-json-view.component-DnnLXqR0.mjs.map} +1 -1
  31. package/fesm2022/{ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs → ngx-t-forms-form-payload-projection.component-Ip9ewB18.mjs} +4 -4
  32. package/fesm2022/{ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs.map → ngx-t-forms-form-payload-projection.component-Ip9ewB18.mjs.map} +1 -1
  33. package/fesm2022/{ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs → ngx-t-forms-form-section-stepper.component-BPgPfZSy.mjs} +4 -4
  34. package/fesm2022/{ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs.map → ngx-t-forms-form-section-stepper.component-BPgPfZSy.mjs.map} +1 -1
  35. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs → ngx-t-forms-forms-builder-menu.component-Dv0Dfw79.mjs} +5 -5
  36. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs.map → ngx-t-forms-forms-builder-menu.component-Dv0Dfw79.mjs.map} +1 -1
  37. package/fesm2022/{ngx-t-forms-geo-location.component-Bosp1UzR.mjs → ngx-t-forms-geo-location.component-Bmd84Gcb.mjs} +2 -2
  38. package/fesm2022/{ngx-t-forms-geo-location.component-Bosp1UzR.mjs.map → ngx-t-forms-geo-location.component-Bmd84Gcb.mjs.map} +1 -1
  39. package/fesm2022/{ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs → ngx-t-forms-image-capture-input-element.component-CUd04Ghl.mjs} +2 -2
  40. package/fesm2022/{ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs.map → ngx-t-forms-image-capture-input-element.component-CUd04Ghl.mjs.map} +1 -1
  41. package/fesm2022/ngx-t-forms-index-BcrQ01DQ.mjs +2 -0
  42. package/fesm2022/ngx-t-forms-index-BcrQ01DQ.mjs.map +1 -0
  43. package/fesm2022/{ngx-t-forms-input-custom.component-BkbHFAyR.mjs → ngx-t-forms-input-custom.component-Cn-KH0Lb.mjs} +2 -2
  44. package/fesm2022/{ngx-t-forms-input-custom.component-BkbHFAyR.mjs.map → ngx-t-forms-input-custom.component-Cn-KH0Lb.mjs.map} +1 -1
  45. package/fesm2022/{ngx-t-forms-input-editor.component-BPUOM9kQ.mjs → ngx-t-forms-input-editor.component-DLru1Ezu.mjs} +17 -5
  46. package/fesm2022/ngx-t-forms-input-editor.component-DLru1Ezu.mjs.map +1 -0
  47. package/fesm2022/{ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs → ngx-t-forms-map-mat-options-keys-CVlPdrCO.mjs} +2 -2
  48. package/fesm2022/{ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs.map → ngx-t-forms-map-mat-options-keys-CVlPdrCO.mjs.map} +1 -1
  49. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs → ngx-t-forms-mat-chip-list-editor.component-BWisS3Em.mjs} +4 -4
  50. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs.map → ngx-t-forms-mat-chip-list-editor.component-BWisS3Em.mjs.map} +1 -1
  51. package/fesm2022/{ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs → ngx-t-forms-missing-form-configs.component-DxdynZY6.mjs} +2 -2
  52. package/fesm2022/{ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs.map → ngx-t-forms-missing-form-configs.component-DxdynZY6.mjs.map} +1 -1
  53. package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs → ngx-t-forms-mscoa-chart-toolbar.component-D4Xa_Yi0.mjs} +2 -2
  54. package/fesm2022/{ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs.map → ngx-t-forms-mscoa-chart-toolbar.component-D4Xa_Yi0.mjs.map} +1 -1
  55. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Bo0aDEMy.mjs +447 -0
  56. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-Bo0aDEMy.mjs.map +1 -0
  57. package/fesm2022/{ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs → ngx-t-forms-multiple-input-input-element.component-C8JP3D6r.mjs} +16 -16
  58. package/fesm2022/{ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs.map → ngx-t-forms-multiple-input-input-element.component-C8JP3D6r.mjs.map} +1 -1
  59. package/fesm2022/{ngx-t-forms-ngx-t-forms-u_kigDid.mjs → ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs} +931 -82
  60. package/fesm2022/ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs.map +1 -0
  61. package/fesm2022/{ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs → ngx-t-forms-paginated-selection-table-0OI1ikWW.mjs} +2 -2
  62. package/fesm2022/{ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs.map → ngx-t-forms-paginated-selection-table-0OI1ikWW.mjs.map} +1 -1
  63. package/fesm2022/{ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs → ngx-t-forms-pipeline-generator.component-CZ21sd77.mjs} +3 -3
  64. package/fesm2022/{ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs.map → ngx-t-forms-pipeline-generator.component-CZ21sd77.mjs.map} +1 -1
  65. package/fesm2022/{ngx-t-forms-record-list-manager.component-CUMMvMch.mjs → ngx-t-forms-record-list-manager.component-CykBq_nW.mjs} +2 -2
  66. package/fesm2022/{ngx-t-forms-record-list-manager.component-CUMMvMch.mjs.map → ngx-t-forms-record-list-manager.component-CykBq_nW.mjs.map} +1 -1
  67. package/fesm2022/{ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs → ngx-t-forms-required-inputs.component-ONbhxVSH.mjs} +2 -2
  68. package/fesm2022/{ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs.map → ngx-t-forms-required-inputs.component-ONbhxVSH.mjs.map} +1 -1
  69. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs → ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.mjs} +2 -2
  70. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map → ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.mjs.map} +1 -1
  71. package/fesm2022/{ngx-t-forms-section-report.component-BxOhR6C0.mjs → ngx-t-forms-section-report.component-C1w16LYm.mjs} +4 -4
  72. package/fesm2022/{ngx-t-forms-section-report.component-BxOhR6C0.mjs.map → ngx-t-forms-section-report.component-C1w16LYm.mjs.map} +1 -1
  73. package/fesm2022/{ngx-t-forms-select-input-element.component-DbgZdNoe.mjs → ngx-t-forms-select-input-element.component-CWcywuS6.mjs} +8 -8
  74. package/fesm2022/{ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map → ngx-t-forms-select-input-element.component-CWcywuS6.mjs.map} +1 -1
  75. package/fesm2022/{ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs → ngx-t-forms-selection-options-editor.component-KjbZhc2u.mjs} +4 -4
  76. package/fesm2022/{ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs.map → ngx-t-forms-selection-options-editor.component-KjbZhc2u.mjs.map} +1 -1
  77. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs → ngx-t-forms-t-workflow-picker.component-CtavFAUq.mjs} +3 -3
  78. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs.map → ngx-t-forms-t-workflow-picker.component-CtavFAUq.mjs.map} +1 -1
  79. package/fesm2022/{ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs → ngx-t-forms-textarea-input-element.component-DkJkBQif.mjs} +2 -2
  80. package/fesm2022/{ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs.map → ngx-t-forms-textarea-input-element.component-DkJkBQif.mjs.map} +1 -1
  81. package/fesm2022/{ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs → ngx-t-forms-toggle-input-element.component-Dr7MNli8.mjs} +2 -2
  82. package/fesm2022/{ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs.map → ngx-t-forms-toggle-input-element.component-Dr7MNli8.mjs.map} +1 -1
  83. package/fesm2022/{ngx-t-forms-validators-config.component-oGjQVGE2.mjs → ngx-t-forms-validators-config.component-BknyAmV_.mjs} +8 -167
  84. package/fesm2022/ngx-t-forms-validators-config.component-BknyAmV_.mjs.map +1 -0
  85. package/fesm2022/{ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs → ngx-t-forms-workflow-adjudication.component-CPvwm7f4.mjs} +3 -3
  86. package/fesm2022/{ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs.map → ngx-t-forms-workflow-adjudication.component-CPvwm7f4.mjs.map} +1 -1
  87. package/fesm2022/ngx-t-forms.mjs +1 -1
  88. package/package.json +2 -2
  89. package/types/ngx-t-forms.d.ts +191 -4
  90. package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs +0 -2
  91. package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs.map +0 -1
  92. package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs.map +0 -1
  93. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs +0 -336
  94. package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs.map +0 -1
  95. package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs.map +0 -1
  96. package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport {\n ElementTypes,\n FormColumnInputs,\n InputDataTypes,\n MinInputMapInput,\n MinInputTypes,\n MinimumInputRequiredInterface,\n} from 'ngx-t-forms-types';\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\n\n/** A required input decorated with the derived view-model fields the chip row renders. */\ninterface RequiredInputChip {\n readonly name: string;\n readonly linked: boolean;\n readonly active: boolean;\n}\n\n/** A mappable form input decorated with the derived view-model fields the list renders. */\ninterface MapTarget {\n readonly id: string;\n readonly label: string;\n readonly icon: string;\n readonly formControlName: string;\n readonly dataType: string;\n readonly selected: boolean;\n readonly mappable: boolean;\n readonly ariaLabel: string;\n}\n\n/**\n * Internal editor element for configuring a form's required (minimum) inputs.\n * Child of `t-dynamic-data-edit`, which supplies the field label, hint, and\n * validation errors — so this component owns only the chip row + edit content.\n *\n * Each required input can be handled three ways: a literal default value, a\n * single-input map (`MapTo`), or a multi-input filter (`MapDocFilter`).\n * Re-selecting the active handling method, chip, or a mapped input toggles it\n * off again.\n */\n@Component({\n selector: 'lib-required-inputs',\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatRippleModule,\n MatSelectModule,\n EmptyStateComponent,\n ],\n templateUrl: './required-inputs.component.html',\n styleUrl: './required-inputs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n 'class': 'lib-required-inputs',\n '[attr.id]': 'id()',\n },\n})\nexport class RequiredInputsComponent {\n /** Handling-method enum, exposed to the template. */\n protected readonly minInputTypes = MinInputTypes;\n\n /**\n * Required-input descriptors to render. Heterogeneous wrapper binding — the\n * parent feeds whatever the editor config holds; narrowing here would force\n * wrapper changes.\n */\n readonly value = input<readonly MinimumInputRequiredInterface[]>([]);\n\n /** All available form inputs the user can map a required input to. */\n readonly formInputs = input<readonly FormColumnInputs[]>([]);\n\n /** Disable user interaction. */\n readonly disabled = input<boolean>(false);\n\n /**\n * Validation errors passed down by the parent editor. Retained on the contract\n * but not rendered here — `t-dynamic-data-edit` owns error display.\n */\n readonly errors = input<IConfigElementError[] | undefined>([]);\n\n /** Optional id attribute supplied by the parent editor (used to disambiguate). */\n readonly id = input<string | undefined>(undefined);\n\n /** Emits the mutated required-input list whenever the user changes a mapping. */\n readonly valueChanged = output<MinimumInputRequiredInterface[]>();\n\n /**\n * Local, immutable working copy of `value`. Tracks the bound value (the parent\n * re-feeds it after each emit) but stays locally overridable; mutations always\n * produce a new array, and entries are cloned so the parent's array is never\n * mutated in place.\n */\n readonly #workingValue = linkedSignal<readonly MinimumInputRequiredInterface[]>(() =>\n this.value().map((item) => ({ ...item })),\n );\n\n /** Name of the required input currently open in the edit panel; `''` when none. */\n protected readonly activeInput = signal<string>('');\n\n /** The chip row: one entry per required input, with derived link/active state. */\n protected readonly chips = computed<readonly RequiredInputChip[]>(() => {\n const active = this.activeInput();\n return this.#workingValue().map((item) => ({\n name: item.name,\n linked: this.#isLinked(item),\n active: item.name === active,\n }));\n });\n\n /** The required input currently being edited, or `undefined` when none is active. */\n protected readonly inEdit = computed<MinimumInputRequiredInterface | undefined>(() => {\n const active = this.activeInput();\n if (!active) {\n return undefined;\n }\n return this.#workingValue().find((item) => item.name === active);\n });\n\n /** Handling method of the input in edit; `null` keeps the `mat-select` empty. */\n protected readonly activeType = computed<MinInputTypes | null>(() => {\n const type = this.inEdit()?.type;\n return type === MinInputTypes.Default ||\n type === MinInputTypes.MapTo ||\n type === MinInputTypes.MapDocFilter\n ? type\n : null;\n });\n\n /** Whether the edit panel should show the mappable-input list. */\n protected readonly showMapList = computed<boolean>(() => {\n const type = this.activeType();\n return type === MinInputTypes.MapTo || type === MinInputTypes.MapDocFilter;\n });\n\n /**\n * The list of mappable form inputs for the input in edit. Single-select\n * (`MapTo`) collapses to the chosen input once one is picked; multi-select\n * (`MapDocFilter`) always shows the full list with each chosen input flagged.\n */\n protected readonly mapTargets = computed<readonly MapTarget[]>(() => {\n const edit = this.inEdit();\n if (!edit) {\n return [];\n }\n const all = this.formInputs().map((item) => this.#toTarget(item, edit));\n if (edit.type === MinInputTypes.MapTo) {\n const selected = all.find((target) => target.selected);\n return selected ? [selected] : all;\n }\n return all;\n });\n\n /** Toggle the edit panel for a required input. Re-selecting the active one closes it. */\n protected toggleActive(name: string): void {\n if (this.disabled()) {\n return;\n }\n this.activeInput.update((current) => (current === name ? '' : name));\n }\n\n /** Close the edit panel without changing anything. */\n protected close(): void {\n this.activeInput.set('');\n }\n\n /** Choose (or, when re-selected, clear) the handling method for the input in edit. */\n protected selectType(type: MinInputTypes): void {\n this.#patchActive((current) => {\n if (current.type === type) {\n return { ...current, type: undefined, mapTo: undefined, defaultValue: undefined };\n }\n return {\n ...current,\n type,\n mapTo: type === MinInputTypes.MapDocFilter ? [] : undefined,\n defaultValue: type === MinInputTypes.Default ? current.defaultValue : undefined,\n };\n });\n }\n\n /** Update the literal default value of the input in edit. */\n protected setDefaultValue(value: string): void {\n this.#patchActive((current) => ({ ...current, defaultValue: value }));\n }\n\n /**\n * Map (or, when re-selected, unmap) a form input to the input in edit. `MapTo`\n * holds a single mapping; `MapDocFilter` accumulates a list.\n */\n protected toggleMap(target: MapTarget): void {\n if (this.disabled() || !target.mappable) {\n return;\n }\n const mapping = this.#toMapping(target);\n this.#patchActive((current) => {\n if (current.type === MinInputTypes.MapTo) {\n const existing = this.#asSingle(current.mapTo);\n const sameSelected = existing?.formControlName === mapping.formControlName;\n return { ...current, mapTo: sameSelected ? undefined : mapping };\n }\n if (current.type === MinInputTypes.MapDocFilter) {\n const list = this.#asList(current.mapTo);\n const has = list.some((m) => m.formControlName === mapping.formControlName);\n return {\n ...current,\n mapTo: has\n ? list.filter((m) => m.formControlName !== mapping.formControlName)\n : [...list, mapping],\n };\n }\n return current;\n });\n }\n\n /** Replace the active entry via `patch` and emit the new list. */\n #patchActive(\n patch: (current: MinimumInputRequiredInterface) => MinimumInputRequiredInterface,\n ): void {\n const active = this.activeInput();\n let changed = false;\n const next = this.#workingValue().map((item) => {\n if (item.name !== active) {\n return item;\n }\n changed = true;\n return patch(item);\n });\n if (!changed) {\n return;\n }\n this.#workingValue.set(next);\n this.valueChanged.emit([...next]);\n }\n\n #isLinked(item: MinimumInputRequiredInterface): boolean {\n if (item.type === MinInputTypes.Default) {\n return !!item.defaultValue;\n }\n if (item.type === MinInputTypes.MapTo) {\n return !!this.#asSingle(item.mapTo);\n }\n if (item.type === MinInputTypes.MapDocFilter) {\n return this.#asList(item.mapTo).length > 0;\n }\n return false;\n }\n\n #toTarget(item: FormColumnInputs, edit: MinimumInputRequiredInterface): MapTarget {\n const mappable = item.element !== ElementTypes.SectionTitle;\n const selected = this.#isMapped(edit, item.formControlName);\n return {\n id: item.id,\n label: item.label,\n icon: getInputIcon(item.element),\n formControlName: item.formControlName,\n dataType: item.dataType ?? '',\n selected,\n mappable,\n ariaLabel: `${item.label}.${mappable ? '' : ' Not mappable.'}`,\n };\n }\n\n #isMapped(edit: MinimumInputRequiredInterface, formControlName: string): boolean {\n if (edit.type === MinInputTypes.MapTo) {\n return this.#asSingle(edit.mapTo)?.formControlName === formControlName;\n }\n if (edit.type === MinInputTypes.MapDocFilter) {\n return this.#asList(edit.mapTo).some((m) => m.formControlName === formControlName);\n }\n return false;\n }\n\n #toMapping(target: MapTarget): MinInputMapInput {\n const source = this.formInputs().find((item) => item.id === target.id);\n return {\n formControlName: target.formControlName,\n dataType: source?.dataType ?? InputDataTypes.String,\n element: source?.element ?? ElementTypes.Input,\n inputId: target.id,\n };\n }\n\n #asSingle(\n mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\n ): MinInputMapInput | undefined {\n if (!mapTo || Array.isArray(mapTo)) {\n return undefined;\n }\n // `Array.isArray` does not narrow a `readonly[]` out of the union, so assert\n // the remaining single-mapping shape after the guard.\n return mapTo as MinInputMapInput;\n }\n\n #asList(\n mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\n ): readonly MinInputMapInput[] {\n return Array.isArray(mapTo) ? mapTo : [];\n }\n}\n","@if (chips().length) {\n<div class=\"lib-required-inputs__chips\" role=\"list\" aria-label=\"Required inputs\">\n @for (chip of chips(); track chip.name) {\n <button\n type=\"button\"\n role=\"listitem\"\n class=\"lib-required-inputs__chip\"\n [class.lib-required-inputs__chip--linked]=\"chip.linked\"\n [class.lib-required-inputs__chip--active]=\"chip.active\"\n [disabled]=\"disabled()\"\n [attr.aria-pressed]=\"chip.active\"\n [attr.aria-label]=\"chip.name + (chip.linked ? ', linked' : ', not linked')\"\n (click)=\"toggleActive(chip.name)\">\n <span class=\"lib-required-inputs__chip-label\">{{ chip.name }}</span>\n <mat-icon class=\"lib-required-inputs__chip-icon\" aria-hidden=\"true\">\n {{ chip.linked ? 'link' : 'link_off' }}\n </mat-icon>\n </button>\n }\n</div>\n} @else {\n<lib-empty-state icon=\"link_off\" message=\"No required inputs to configure.\" />\n}\n\n@if (inEdit(); as edit) {\n<div class=\"lib-required-inputs__panel\">\n <mat-form-field\n class=\"lib-required-inputs__field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\">\n <mat-label>Input handling method</mat-label>\n <mat-select\n [value]=\"activeType()\"\n [disabled]=\"disabled()\"\n (selectionChange)=\"selectType($event.value)\">\n <mat-option [value]=\"minInputTypes.Default\">Default value</mat-option>\n <mat-option [value]=\"minInputTypes.MapTo\">Map to a form input</mat-option>\n <mat-option [value]=\"minInputTypes.MapDocFilter\">Filter by an input value</mat-option>\n </mat-select>\n <mat-hint>Choose how this required input is resolved</mat-hint>\n </mat-form-field>\n\n @if (activeType() === minInputTypes.Default) {\n <mat-form-field\n class=\"lib-required-inputs__field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\">\n <mat-label>Default value</mat-label>\n <input\n matInput\n [ngModel]=\"edit.defaultValue\"\n [disabled]=\"disabled()\"\n (ngModelChange)=\"setDefaultValue($event)\"\n placeholder=\"Enter a default value\" />\n <mat-hint>Used when no value is supplied at runtime</mat-hint>\n </mat-form-field>\n }\n\n @if (showMapList()) {\n <p class=\"lib-required-inputs__list-label\">\n Link <strong>{{ activeInput() }}</strong> to a form input\n </p>\n\n @if (mapTargets().length) {\n <mat-nav-list class=\"lib-required-inputs__list\">\n {{mapTargets().length}}\n @for (target of mapTargets(); track target.id) {\n <mat-list-item\n class=\"lib-required-inputs__item\"\n matRipple\n role=\"button\"\n [disabled]=\"disabled() || !target.mappable\"\n [activated]=\"target.selected\"\n [attr.aria-pressed]=\"target.selected\"\n [attr.aria-label]=\"target.ariaLabel\"\n (click)=\"toggleMap(target); $event.stopPropagation()\">\n <mat-icon\n matListItemAvatar\n class=\"lib-required-inputs__avatar\"\n aria-hidden=\"true\">\n {{ target.icon }}\n </mat-icon>\n <span matListItemTitle class=\"lib-required-inputs__item-title\">{{ target.label }}</span>\n <span matListItemLine class=\"lib-required-inputs__item-meta\">\n <span>{{ target.formControlName }}</span>\n @if (target.dataType) {\n <span>{{ target.dataType }}</span>\n }\n </span>\n <mat-icon\n matListItemMeta\n class=\"lib-required-inputs__indicator\"\n [class.lib-required-inputs__indicator--on]=\"target.selected\"\n aria-hidden=\"true\">\n {{ target.selected ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </mat-list-item>\n }\n </mat-nav-list>\n } @else {\n <lib-empty-state icon=\"add_link\" message=\"Add form inputs before mapping this input.\" />\n }\n }\n\n <div class=\"lib-required-inputs__actions\">\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\n </div>\n</div>\n}\n"],"names":["i3","i4","i6"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-t-forms-required-inputs.component-ONbhxVSH.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/required-inputs/required-inputs.component.html"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatSelectModule } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport {\n ElementTypes,\n FormColumnInputs,\n InputDataTypes,\n MinInputMapInput,\n MinInputTypes,\n MinimumInputRequiredInterface,\n} from 'ngx-t-forms-types';\nimport { getInputIcon } from '../../../../shared/functions/getInputIcon';\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\n\n/** A required input decorated with the derived view-model fields the chip row renders. */\ninterface RequiredInputChip {\n readonly name: string;\n readonly linked: boolean;\n readonly active: boolean;\n}\n\n/** A mappable form input decorated with the derived view-model fields the list renders. */\ninterface MapTarget {\n readonly id: string;\n readonly label: string;\n readonly icon: string;\n readonly formControlName: string;\n readonly dataType: string;\n readonly selected: boolean;\n readonly mappable: boolean;\n readonly ariaLabel: string;\n}\n\n/**\n * Internal editor element for configuring a form's required (minimum) inputs.\n * Child of `t-dynamic-data-edit`, which supplies the field label, hint, and\n * validation errors — so this component owns only the chip row + edit content.\n *\n * Each required input can be handled three ways: a literal default value, a\n * single-input map (`MapTo`), or a multi-input filter (`MapDocFilter`).\n * Re-selecting the active handling method, chip, or a mapped input toggles it\n * off again.\n */\n@Component({\n selector: 'lib-required-inputs',\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatRippleModule,\n MatSelectModule,\n EmptyStateComponent,\n ],\n templateUrl: './required-inputs.component.html',\n styleUrl: './required-inputs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n 'class': 'lib-required-inputs',\n '[attr.id]': 'id()',\n },\n})\nexport class RequiredInputsComponent {\n /** Handling-method enum, exposed to the template. */\n protected readonly minInputTypes = MinInputTypes;\n\n /**\n * Required-input descriptors to render. Heterogeneous wrapper binding — the\n * parent feeds whatever the editor config holds; narrowing here would force\n * wrapper changes.\n */\n readonly value = input<readonly MinimumInputRequiredInterface[]>([]);\n\n /** All available form inputs the user can map a required input to. */\n readonly formInputs = input<readonly FormColumnInputs[]>([]);\n\n /** Disable user interaction. */\n readonly disabled = input<boolean>(false);\n\n /**\n * Validation errors passed down by the parent editor. Retained on the contract\n * but not rendered here — `t-dynamic-data-edit` owns error display.\n */\n readonly errors = input<IConfigElementError[] | undefined>([]);\n\n /** Optional id attribute supplied by the parent editor (used to disambiguate). */\n readonly id = input<string | undefined>(undefined);\n\n /** Emits the mutated required-input list whenever the user changes a mapping. */\n readonly valueChanged = output<MinimumInputRequiredInterface[]>();\n\n /**\n * Local, immutable working copy of `value`. Tracks the bound value (the parent\n * re-feeds it after each emit) but stays locally overridable; mutations always\n * produce a new array, and entries are cloned so the parent's array is never\n * mutated in place.\n */\n readonly #workingValue = linkedSignal<readonly MinimumInputRequiredInterface[]>(() =>\n this.value().map((item) => ({ ...item })),\n );\n\n /** Name of the required input currently open in the edit panel; `''` when none. */\n protected readonly activeInput = signal<string>('');\n\n /** The chip row: one entry per required input, with derived link/active state. */\n protected readonly chips = computed<readonly RequiredInputChip[]>(() => {\n const active = this.activeInput();\n return this.#workingValue().map((item) => ({\n name: item.name,\n linked: this.#isLinked(item),\n active: item.name === active,\n }));\n });\n\n /** The required input currently being edited, or `undefined` when none is active. */\n protected readonly inEdit = computed<MinimumInputRequiredInterface | undefined>(() => {\n const active = this.activeInput();\n if (!active) {\n return undefined;\n }\n return this.#workingValue().find((item) => item.name === active);\n });\n\n /** Handling method of the input in edit; `null` keeps the `mat-select` empty. */\n protected readonly activeType = computed<MinInputTypes | null>(() => {\n const type = this.inEdit()?.type;\n return type === MinInputTypes.Default ||\n type === MinInputTypes.MapTo ||\n type === MinInputTypes.MapDocFilter\n ? type\n : null;\n });\n\n /** Whether the edit panel should show the mappable-input list. */\n protected readonly showMapList = computed<boolean>(() => {\n const type = this.activeType();\n return type === MinInputTypes.MapTo || type === MinInputTypes.MapDocFilter;\n });\n\n /**\n * The list of mappable form inputs for the input in edit. Single-select\n * (`MapTo`) collapses to the chosen input once one is picked; multi-select\n * (`MapDocFilter`) always shows the full list with each chosen input flagged.\n */\n protected readonly mapTargets = computed<readonly MapTarget[]>(() => {\n const edit = this.inEdit();\n if (!edit) {\n return [];\n }\n const all = this.formInputs().map((item) => this.#toTarget(item, edit));\n if (edit.type === MinInputTypes.MapTo) {\n const selected = all.find((target) => target.selected);\n return selected ? [selected] : all;\n }\n return all;\n });\n\n /** Toggle the edit panel for a required input. Re-selecting the active one closes it. */\n protected toggleActive(name: string): void {\n if (this.disabled()) {\n return;\n }\n this.activeInput.update((current) => (current === name ? '' : name));\n }\n\n /** Close the edit panel without changing anything. */\n protected close(): void {\n this.activeInput.set('');\n }\n\n /** Choose (or, when re-selected, clear) the handling method for the input in edit. */\n protected selectType(type: MinInputTypes): void {\n this.#patchActive((current) => {\n if (current.type === type) {\n return { ...current, type: undefined, mapTo: undefined, defaultValue: undefined };\n }\n return {\n ...current,\n type,\n mapTo: type === MinInputTypes.MapDocFilter ? [] : undefined,\n defaultValue: type === MinInputTypes.Default ? current.defaultValue : undefined,\n };\n });\n }\n\n /** Update the literal default value of the input in edit. */\n protected setDefaultValue(value: string): void {\n this.#patchActive((current) => ({ ...current, defaultValue: value }));\n }\n\n /**\n * Map (or, when re-selected, unmap) a form input to the input in edit. `MapTo`\n * holds a single mapping; `MapDocFilter` accumulates a list.\n */\n protected toggleMap(target: MapTarget): void {\n if (this.disabled() || !target.mappable) {\n return;\n }\n const mapping = this.#toMapping(target);\n this.#patchActive((current) => {\n if (current.type === MinInputTypes.MapTo) {\n const existing = this.#asSingle(current.mapTo);\n const sameSelected = existing?.formControlName === mapping.formControlName;\n return { ...current, mapTo: sameSelected ? undefined : mapping };\n }\n if (current.type === MinInputTypes.MapDocFilter) {\n const list = this.#asList(current.mapTo);\n const has = list.some((m) => m.formControlName === mapping.formControlName);\n return {\n ...current,\n mapTo: has\n ? list.filter((m) => m.formControlName !== mapping.formControlName)\n : [...list, mapping],\n };\n }\n return current;\n });\n }\n\n /** Replace the active entry via `patch` and emit the new list. */\n #patchActive(\n patch: (current: MinimumInputRequiredInterface) => MinimumInputRequiredInterface,\n ): void {\n const active = this.activeInput();\n let changed = false;\n const next = this.#workingValue().map((item) => {\n if (item.name !== active) {\n return item;\n }\n changed = true;\n return patch(item);\n });\n if (!changed) {\n return;\n }\n this.#workingValue.set(next);\n this.valueChanged.emit([...next]);\n }\n\n #isLinked(item: MinimumInputRequiredInterface): boolean {\n if (item.type === MinInputTypes.Default) {\n return !!item.defaultValue;\n }\n if (item.type === MinInputTypes.MapTo) {\n return !!this.#asSingle(item.mapTo);\n }\n if (item.type === MinInputTypes.MapDocFilter) {\n return this.#asList(item.mapTo).length > 0;\n }\n return false;\n }\n\n #toTarget(item: FormColumnInputs, edit: MinimumInputRequiredInterface): MapTarget {\n const mappable = item.element !== ElementTypes.SectionTitle;\n const selected = this.#isMapped(edit, item.formControlName);\n return {\n id: item.id,\n label: item.label,\n icon: getInputIcon(item.element),\n formControlName: item.formControlName,\n dataType: item.dataType ?? '',\n selected,\n mappable,\n ariaLabel: `${item.label}.${mappable ? '' : ' Not mappable.'}`,\n };\n }\n\n #isMapped(edit: MinimumInputRequiredInterface, formControlName: string): boolean {\n if (edit.type === MinInputTypes.MapTo) {\n return this.#asSingle(edit.mapTo)?.formControlName === formControlName;\n }\n if (edit.type === MinInputTypes.MapDocFilter) {\n return this.#asList(edit.mapTo).some((m) => m.formControlName === formControlName);\n }\n return false;\n }\n\n #toMapping(target: MapTarget): MinInputMapInput {\n const source = this.formInputs().find((item) => item.id === target.id);\n return {\n formControlName: target.formControlName,\n dataType: source?.dataType ?? InputDataTypes.String,\n element: source?.element ?? ElementTypes.Input,\n inputId: target.id,\n };\n }\n\n #asSingle(\n mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\n ): MinInputMapInput | undefined {\n if (!mapTo || Array.isArray(mapTo)) {\n return undefined;\n }\n // `Array.isArray` does not narrow a `readonly[]` out of the union, so assert\n // the remaining single-mapping shape after the guard.\n return mapTo as MinInputMapInput;\n }\n\n #asList(\n mapTo: MinInputMapInput | readonly MinInputMapInput[] | undefined,\n ): readonly MinInputMapInput[] {\n return Array.isArray(mapTo) ? mapTo : [];\n }\n}\n","@if (chips().length) {\n<div class=\"lib-required-inputs__chips\" role=\"list\" aria-label=\"Required inputs\">\n @for (chip of chips(); track chip.name) {\n <button\n type=\"button\"\n role=\"listitem\"\n class=\"lib-required-inputs__chip\"\n [class.lib-required-inputs__chip--linked]=\"chip.linked\"\n [class.lib-required-inputs__chip--active]=\"chip.active\"\n [disabled]=\"disabled()\"\n [attr.aria-pressed]=\"chip.active\"\n [attr.aria-label]=\"chip.name + (chip.linked ? ', linked' : ', not linked')\"\n (click)=\"toggleActive(chip.name)\">\n <span class=\"lib-required-inputs__chip-label\">{{ chip.name }}</span>\n <mat-icon class=\"lib-required-inputs__chip-icon\" aria-hidden=\"true\">\n {{ chip.linked ? 'link' : 'link_off' }}\n </mat-icon>\n </button>\n }\n</div>\n} @else {\n<lib-empty-state icon=\"link_off\" message=\"No required inputs to configure.\" />\n}\n\n@if (inEdit(); as edit) {\n<div class=\"lib-required-inputs__panel\">\n <mat-form-field\n class=\"lib-required-inputs__field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\">\n <mat-label>Input handling method</mat-label>\n <mat-select\n [value]=\"activeType()\"\n [disabled]=\"disabled()\"\n (selectionChange)=\"selectType($event.value)\">\n <mat-option [value]=\"minInputTypes.Default\">Default value</mat-option>\n <mat-option [value]=\"minInputTypes.MapTo\">Map to a form input</mat-option>\n <mat-option [value]=\"minInputTypes.MapDocFilter\">Filter by an input value</mat-option>\n </mat-select>\n <mat-hint>Choose how this required input is resolved</mat-hint>\n </mat-form-field>\n\n @if (activeType() === minInputTypes.Default) {\n <mat-form-field\n class=\"lib-required-inputs__field\"\n appearance=\"outline\"\n subscriptSizing=\"dynamic\">\n <mat-label>Default value</mat-label>\n <input\n matInput\n [ngModel]=\"edit.defaultValue\"\n [disabled]=\"disabled()\"\n (ngModelChange)=\"setDefaultValue($event)\"\n placeholder=\"Enter a default value\" />\n <mat-hint>Used when no value is supplied at runtime</mat-hint>\n </mat-form-field>\n }\n\n @if (showMapList()) {\n <p class=\"lib-required-inputs__list-label\">\n Link <strong>{{ activeInput() }}</strong> to a form input\n </p>\n\n @if (mapTargets().length) {\n <mat-nav-list class=\"lib-required-inputs__list\">\n {{mapTargets().length}}\n @for (target of mapTargets(); track target.id) {\n <mat-list-item\n class=\"lib-required-inputs__item\"\n matRipple\n role=\"button\"\n [disabled]=\"disabled() || !target.mappable\"\n [activated]=\"target.selected\"\n [attr.aria-pressed]=\"target.selected\"\n [attr.aria-label]=\"target.ariaLabel\"\n (click)=\"toggleMap(target); $event.stopPropagation()\">\n <mat-icon\n matListItemAvatar\n class=\"lib-required-inputs__avatar\"\n aria-hidden=\"true\">\n {{ target.icon }}\n </mat-icon>\n <span matListItemTitle class=\"lib-required-inputs__item-title\">{{ target.label }}</span>\n <span matListItemLine class=\"lib-required-inputs__item-meta\">\n <span>{{ target.formControlName }}</span>\n @if (target.dataType) {\n <span>{{ target.dataType }}</span>\n }\n </span>\n <mat-icon\n matListItemMeta\n class=\"lib-required-inputs__indicator\"\n [class.lib-required-inputs__indicator--on]=\"target.selected\"\n aria-hidden=\"true\">\n {{ target.selected ? 'check_circle' : 'radio_button_unchecked' }}\n </mat-icon>\n </mat-list-item>\n }\n </mat-nav-list>\n } @else {\n <lib-empty-state icon=\"add_link\" message=\"Add form inputs before mapping this input.\" />\n }\n }\n\n <div class=\"lib-required-inputs__actions\">\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"close()\">Done</button>\n </div>\n</div>\n}\n"],"names":["i3","i4","i6"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, output, inject, DestroyRef, signal, computed, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { JsDataTypes, DataSources } from 'ngx-t-forms-types';
4
- import { h as TreeComponent, i as convertPostmanFolderItemsToTree, _ as _isEqual, E as EmptyStateComponent, j as ErrorListComponent } from './ngx-t-forms-ngx-t-forms-u_kigDid.mjs';
4
+ import { j as TreeComponent, k as convertPostmanFolderItemsToTree, _ as _isEqual, E as EmptyStateComponent, l as ErrorListComponent } from './ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs';
5
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
6
  import { HttpClient, HttpErrorResponse } from '@angular/common/http';
7
7
  import { take, tap, catchError, throwError } from 'rxjs';
@@ -395,4 +395,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
395
395
  }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], postmanCollectionConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "postmanCollectionConfig", required: false }] }], httpGetDataFunction: [{ type: i0.Input, args: [{ isSignal: true, alias: "httpGetDataFunction", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], valueChanged: [{ type: i0.Output, args: ["valueChanged"] }] } });
396
396
 
397
397
  export { RestApiCallSetupComponent };
398
- //# sourceMappingURL=ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map
398
+ //# sourceMappingURL=ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.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 type { IFolderItem, IGetPostmanCollections } from 'ngx-t-forms-types';\n\n/** True when an item's own name or description contains the (already-lowercased) search text. */\nfunction itemMatches(item: IFolderItem, searchText: string): boolean {\n return (\n (item.name?.toLowerCase().includes(searchText) ?? false) ||\n (item.description?.toLowerCase().includes(searchText) ?? false)\n );\n}\n\n/**\n * Recursively prunes a folder tree to the items relevant to `searchText`.\n *\n * An item is kept when it matches directly (its whole subtree is then\n * preserved) OR when one of its descendants matches — in which case the\n * ancestor folder is preserved but its children are pruned to only the\n * matching branches. This fixes the legacy defect where ancestor folders of a\n * deep match were dropped (or whole sibling subtrees were retained).\n */\nfunction pruneItems(items: IFolderItem[] | undefined, searchText: string): IFolderItem[] {\n if (!items) {\n return [];\n }\n return items.reduce<IFolderItem[]>((kept, item) => {\n if (itemMatches(item, searchText)) {\n // Direct hit: keep the item and its full subtree intact.\n kept.push(item);\n return kept;\n }\n const matchingChildren = pruneItems(item.item, searchText);\n if (matchingChildren.length > 0) {\n // Ancestor of a match: keep the folder but only the matching branches.\n kept.push({ ...item, item: matchingChildren });\n }\n return kept;\n }, []);\n}\n\n/**\n * Filters a fetched Postman collection by a free-text search key, preserving\n * the ancestor folders of every match. An empty/whitespace key returns the\n * full set of top-level items unchanged.\n */\nexport function filterCollectionItems(\n collections: IGetPostmanCollections,\n searchKey: string,\n): IFolderItem[] {\n const items = collections.collection.item;\n const searchText = searchKey.trim().toLowerCase();\n if (!searchText) {\n return items;\n }\n return pruneItems(items, searchText);\n}\n","/**\n * Maps an HTTP method to its design-token CSS colour value.\n *\n * Returns a `var(--lib-forms-method-*)` reference (dark-mode safe, no hex /\n * named colours) so the tree can colour-code endpoints. Unknown methods fall\n * back to `currentColor`. Matching is case-insensitive.\n */\nexport function methodColor(method: string): string {\n switch (method.toUpperCase()) {\n case 'GET':\n return 'var(--lib-forms-method-get)';\n case 'POST':\n return 'var(--lib-forms-method-post)';\n case 'PUT':\n return 'var(--lib-forms-method-put)';\n case 'PATCH':\n return 'var(--lib-forms-method-patch)';\n case 'DELETE':\n return 'var(--lib-forms-method-delete)';\n default:\n return 'currentColor';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { catchError, take, tap, throwError } from 'rxjs';\n\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport type {\n FlatNode,\n IFolderItem,\n IGetPostmanCollections,\n IPostmanCollectionConfig,\n TreeNode,\n} from 'ngx-t-forms-types';\n\nimport { TreeComponent } from '../api-value-access-rules/functions/convertDataToTree';\nimport { convertPostmanFolderItemsToTree } from './functions/convertPostmanCollectionToTree';\nimport { filterCollectionItems } from './functions/filterCollectionItems';\nimport { methodColor } from './functions/methodColors';\nimport { SearchFieldComponent } from '../_shared/search-field/search-field.component';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\nimport { _isEqual } from '../../../../shared/functions/isEqual';\n\n/**\n * Internal Postman-collection picker used by `rest-api-call-setup`.\n *\n * Fetches a Postman collection over HTTP and renders it as a searchable tree of\n * endpoints, emitting the selected folder item to the parent. Embedded\n * component — owns only its tree content; the parent renders any field\n * label / hint / errors.\n */\n@Component({\n selector: 'lib-postman-collections',\n templateUrl: './postman-collections.component.html',\n styleUrls: ['./postman-collections.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: { 'class': 'lib-postman-collections' },\n imports: [\n MatTreeModule,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n SearchFieldComponent,\n EmptyStateComponent,\n ],\n})\nexport class PostmanCollectionsComponent {\n /** Postman API config (collection URL + key). When invalid the component shows an error. */\n readonly postmanCollectionConfig = input<IPostmanCollectionConfig | undefined>(undefined);\n\n /** Endpoint IDs currently in a loading state (rendered with a spinner in the tree). */\n readonly loadingEndPoints = input<string[]>([]);\n\n /** Emits when the user picks an endpoint node from the tree. */\n readonly nodeSelectionChanged = output<IFolderItem>();\n\n readonly #httpClient = inject(HttpClient);\n readonly #destroyRef = inject(DestroyRef);\n\n /** Imperative mat-tree backing store reused from the access-rules tree. */\n protected readonly treeComponent = new TreeComponent();\n\n /** Raw fetched collection; `undefined` until the request resolves. */\n readonly #collection = signal<IGetPostmanCollections | undefined>(undefined);\n\n /** Current search text, two-way bound to the search field. */\n protected readonly searchKey = signal<string>('');\n\n /** Request-in-flight flag. */\n protected readonly loading = signal<boolean>(false);\n\n /** Last error (invalid config or HTTP failure); `undefined` when healthy. */\n protected readonly error = signal<HttpErrorResponse | undefined>(undefined);\n\n /** Folder items after applying the current search, ancestor-folders preserved. */\n protected readonly filteredItems = computed<IFolderItem[]>(() => {\n const collection = this.#collection();\n if (!collection) {\n return [];\n }\n return filterCollectionItems(collection, this.searchKey());\n });\n\n /** Tree nodes derived from {@link filteredItems}. */\n readonly #treeData = computed<TreeNode[]>(() =>\n convertPostmanFolderItemsToTree(this.filteredItems()),\n );\n\n /** True once a collection is loaded but the current search yields nothing. */\n protected readonly isEmpty = computed<boolean>(\n () => Boolean(this.#collection()) && this.#treeData().length === 0,\n );\n\n /** Cache for {@link getNodeLines} so identical levels reuse one array. */\n readonly #nodeLinesCache = new Map<number, readonly number[]>();\n\n /** Push derived tree data into the imperative mat-tree data source. */\n protected readonly syncTree = effect(() => {\n this.treeComponent.assignDataSourceData(this.#treeData());\n });\n\n /** Last config the effect acted on; guards against re-fetching when an unstable parent binding hands us a new-but-equal reference. */\n #loadedConfig: IPostmanCollectionConfig | undefined;\n #hasLoadedOnce = false;\n\n /** Fetch (or re-fetch) the collection only when the config input's content actually changes. */\n protected readonly loadOnConfigChange = effect(() => {\n const config = this.postmanCollectionConfig();\n if (this.#hasLoadedOnce && _isEqual(this.#loadedConfig, config)) {\n return;\n }\n this.#hasLoadedOnce = true;\n this.#loadedConfig = config;\n this.#loadCollection(config);\n });\n\n #isValidConfig(config: IPostmanCollectionConfig | undefined): config is IPostmanCollectionConfig {\n return Boolean(config?.collectionUrl) && Boolean(config?.collectionKey);\n }\n\n #loadCollection(config: IPostmanCollectionConfig | undefined): void {\n if (!this.#isValidConfig(config)) {\n this.#collection.set(undefined);\n this.loading.set(false);\n this.error.set(new HttpErrorResponse({ error: 'Invalid Postman Collection Config' }));\n return;\n }\n\n const requestOptions = {\n params: { apikey: config.collectionKey, clearSystemHeaders: true },\n headers: { 'Content-Type': 'application/json' },\n };\n\n this.loading.set(true);\n this.#httpClient\n .get<IGetPostmanCollections>(config.collectionUrl, requestOptions)\n .pipe(\n take(1),\n tap(data => {\n this.#collection.set(data);\n this.error.set(undefined);\n this.loading.set(false);\n }),\n catchError((err: HttpErrorResponse) => {\n this.loading.set(false);\n this.error.set(err);\n return throwError(() => err);\n }),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe();\n }\n\n protected selectNode(node: IFolderItem): void {\n this.nodeSelectionChanged.emit(node);\n }\n\n protected methodColor(method: string): string {\n return methodColor(method);\n }\n\n protected isEndpointLoading(id: string): boolean {\n return this.loadingEndPoints().includes(id);\n }\n\n protected hasChild = (_: number, node: FlatNode): boolean =>\n this.treeComponent.hasChild(_, node);\n\n /** Memoised 1..level vertical guide-line indices for tree indentation. */\n protected getNodeLines(level: number): readonly number[] {\n const cached = this.#nodeLinesCache.get(level);\n if (cached) {\n return cached;\n }\n const lines = Array.from({ length: level }, (_, i) => i + 1);\n this.#nodeLinesCache.set(level, lines);\n return lines;\n }\n}\n","@if (loading()) {\n <div class=\"loading-container\">\n <mat-spinner diameter=\"36\"></mat-spinner>\n </div>\n} @else {\n <lib-search-field\n class=\"search\"\n placeholder=\"Search api\"\n [(value)]=\"searchKey\" />\n\n @if (error(); as err) {\n <lib-empty-state icon=\"error_outline\" [message]=\"err.message\" />\n } @else if (isEmpty()) {\n <lib-empty-state\n icon=\"search_off\"\n [message]=\"searchKey() ? 'No endpoints match your search' : 'No endpoints in this collection'\" />\n } @else {\n <mat-tree\n [dataSource]=\"treeComponent.dataSource\"\n [treeControl]=\"treeComponent.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n @if (isEndpointLoading(node.value.id)) {\n <mat-spinner diameter=\"22\" class=\"loading-spinner\"></mat-spinner>\n }\n @for (line of getNodeLines(node.level); track line) {\n <div class=\"line\" [style.left.px]=\"line * 40 + 8\"></div>\n }\n @if (node.value?.request; as request) {\n <button\n mat-button\n class=\"item\"\n [disabled]=\"(!request.body?.raw && request.method === 'POST') || !request.url?.raw\"\n [matTooltip]=\"request.url?.raw || 'Invalid Postman config, missing Endpoint URL'\"\n (click)=\"selectNode(node.value)\">\n <span class=\"node-key method\" [style.color]=\"methodColor(request.method)\">\n {{ request.method }}\n </span>\n <span>{{ node.key }}</span>\n </button>\n }\n </mat-tree-node>\n\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\n <button\n mat-icon-button\n matTreeNodeToggle\n class=\"toggle\"\n [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n {{ treeComponent.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <mat-icon class=\"folder-icon\">\n {{ treeComponent.treeControl.isExpanded(node) ? 'folder_open' : 'folder' }}\n </mat-icon>\n <span class=\"folder-label\">{{ node.key }}</span>\n </mat-tree-node>\n </mat-tree>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nimport {\n APIDataFetchingConfigurationInterface,\n DataSources,\n IFolderItem,\n IPostmanCollectionConfig,\n JsDataTypes,\n MinimumInputRequiredInterface,\n} from 'ngx-t-forms-types';\n\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\nimport { _isEqual } from '../../../../shared/functions/isEqual';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\nimport { ErrorListComponent } from '../_shared/error-list/error-list.component';\nimport { PostmanCollectionsComponent } from '../postman-collections/postman-collections.component';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nlet nextId = 0;\n\n/** Discrete UI mode this editor is in, derived from its inputs and value. */\ntype SetupMode = 'no-collection' | 'picker' | 'selected';\n\n/** HTTP method understood by the method-colour map; falls back to neutral. */\ntype HttpMethod = APIDataFetchingConfigurationInterface['httpMethod'];\n\n/** CSS-variable colour per HTTP method (dark-mode-safe; never a hex literal). */\nconst METHOD_COLOR: Readonly<Record<HttpMethod, string>> = {\n GET: 'var(--lib-forms-method-get)',\n POST: 'var(--lib-forms-method-post)',\n PUT: 'var(--lib-forms-method-put)',\n DELETE: 'var(--lib-forms-method-delete)',\n};\n\n/** Maps a JS `typeof` string to the shared {@link JsDataTypes} enum member. */\nfunction toJsDataType(value: unknown): JsDataTypes {\n switch (typeof value) {\n case 'string':\n return JsDataTypes.String;\n case 'number':\n return JsDataTypes.Number;\n case 'bigint':\n return JsDataTypes.BigInt;\n case 'boolean':\n return JsDataTypes.Boolean;\n case 'symbol':\n return JsDataTypes.Symbol;\n case 'function':\n return JsDataTypes.Function;\n case 'object':\n return JsDataTypes.Object;\n default:\n return JsDataTypes.Undefined;\n }\n}\n\n/**\n * Lets the user pick an API endpoint from a Postman collection and exposes the\n * resulting {@link APIDataFetchingConfigurationInterface}. Renders one of three\n * states — no collection configured, the endpoint picker, or the selected\n * endpoint card — and embeds {@link PostmanCollectionsComponent} for the tree.\n *\n * Internal editor consumed by `t-dynamic-data-edit` and `data-source-picker`;\n * the parent owns the field label, hint and validation chrome.\n *\n * @example\n * <lib-rest-api-call-setup\n * [postmanCollectionConfig]=\"config()\"\n * [value]=\"value()\"\n * [disabled]=\"disabled()\"\n * (valueChanged)=\"onApiConfig($event)\" />\n */\n@Component({\n selector: 'lib-rest-api-call-setup',\n templateUrl: './rest-api-call-setup.component.html',\n styleUrl: './rest-api-call-setup.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n imports: [\n PostmanCollectionsComponent,\n EmptyStateComponent,\n ErrorListComponent,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ],\n host: {\n 'class': 'lib-rest-api-call-setup',\n '[id]': 'hostId()',\n '[attr.data-mode]': 'mode()',\n },\n})\nexport class RestApiCallSetupComponent {\n readonly #fallbackId = `lib-rest-api-call-setup-${nextId++}`;\n\n /** Optional consumer-provided host id. */\n readonly id = input<string | undefined>(undefined);\n\n /** Postman collection that backs the picker. */\n readonly postmanCollectionConfig = input<IPostmanCollectionConfig | undefined>(undefined);\n\n /**\n * Optional HTTP GET function for fetching sample responses. Retained on the\n * contract for parity; this editor does not invoke it (selection is resolved\n * from the Postman collection the parent already loads).\n */\n readonly httpGetDataFunction = input<\n ((url: string, options: Record<string, unknown>) => Observable<unknown>) | undefined\n >(undefined);\n\n /** Disables the picker and shows a lock affordance. */\n readonly disabled = input<boolean>(false);\n\n /** Current configuration value. */\n readonly value = input<APIDataFetchingConfigurationInterface | undefined>(undefined);\n\n /** Validation errors surfaced from the parent editor. */\n readonly errors = input<IConfigElementError[] | undefined>([]);\n\n /** Emits whenever the user selects a new endpoint or clears the value. */\n readonly valueChanged = output<APIDataFetchingConfigurationInterface | undefined>();\n\n /** Endpoint IDs currently loading sample data (forwarded to the picker). */\n protected readonly loadingEndPoints = signal<string[]>([]);\n\n /** Local snapshot of the value, bridged from the `value` input. */\n readonly #localValue = signal<APIDataFetchingConfigurationInterface | undefined>(undefined);\n\n /** Read-only view of the active configuration for the template. */\n protected readonly currentValue = this.#localValue.asReadonly();\n\n /** Host id: consumer-provided or a stable per-instance fallback. */\n protected readonly hostId = computed<string>(() => this.id() ?? this.#fallbackId);\n\n /** True once the snapshot carries a usable endpoint + method. */\n protected readonly hasValidValue = computed<boolean>(() => {\n const v = this.#localValue();\n return Boolean(v?.httpEndPoint) && Boolean(v?.httpMethod);\n });\n\n /** Discrete UI mode driving the template's `@switch`. */\n protected readonly mode = computed<SetupMode>(() => {\n if (!this.postmanCollectionConfig()) return 'no-collection';\n return this.hasValidValue() ? 'selected' : 'picker';\n });\n\n /** Token-based colour for the selected endpoint's HTTP method badge. */\n protected readonly methodColor = computed<string>(() => {\n const method = this.#localValue()?.httpMethod;\n return method && method in METHOD_COLOR ? METHOD_COLOR[method] : 'currentColor';\n });\n\n /**\n * Bridge the `value` input into the local mutable snapshot, de-duping with a\n * deep structural compare (replaces the legacy `JSON.stringify` equality so\n * key order and `undefined` no longer cause spurious resets).\n */\n protected readonly valueBridge = effect(() => {\n const next = this.value();\n if (!_isEqual(next, this.#localValue())) {\n this.#localValue.set(next);\n }\n });\n\n /** Maps the selected tree node into the API config and emits it. */\n protected nodeSelectionChanged(node: IFolderItem): void {\n const { id, name, request, response } = node;\n if (!request || !response) return;\n\n let requestBody: Record<string, unknown>;\n try {\n requestBody = JSON.parse(request.body?.raw || '{}') as Record<string, unknown>;\n } catch {\n requestBody = {};\n }\n\n const isPost = request.method === 'POST';\n const minimumInputRequired: MinimumInputRequiredInterface[] = isPost\n ? this.#extractRequiredInputs(requestBody)\n : [];\n\n const config: APIDataFetchingConfigurationInterface = {\n _id: id,\n name,\n httpEndPoint: request.url.raw,\n httpMethod: request.method,\n source: DataSources.Api,\n postFormData: isPost,\n backEndConfig: { minimumInputRequired },\n };\n\n this.#localValue.set(config);\n this.valueChanged.emit(config);\n }\n\n /**\n * Clears the selection and emits a single `undefined` (the legacy double-emit\n * — `undefined` then a stub `{ source }` — was removed; see FLAG).\n */\n protected clearValue(): void {\n this.#localValue.set(undefined);\n this.valueChanged.emit(undefined);\n }\n\n /**\n * Derives the POST endpoint's required inputs from the request body. Top-level\n * keys are primary; entries under `data` are secondary (non-primary).\n */\n #extractRequiredInputs(requestBody: Record<string, unknown>): MinimumInputRequiredInterface[] {\n const { data, ...rest } = requestBody;\n const dataEntries: Record<string, unknown> =\n data && typeof data === 'object' ? { ...data } : {};\n\n const primaryKeys = Object.entries(rest).map(([key, val]) =>\n this.#toRequiredInput(key, val, true),\n );\n const secondaryKeys = Object.entries(dataEntries).map(([key, val]) =>\n this.#toRequiredInput(key, val, false),\n );\n\n return [...primaryKeys, ...secondaryKeys];\n }\n\n #toRequiredInput(\n name: string,\n value: unknown,\n primaryKey: boolean,\n ): MinimumInputRequiredInterface {\n return { name, type: toJsDataType(value), primaryKey };\n }\n}\n","@switch (mode()) {\n @case ('no-collection') {\n <lib-empty-state\n icon=\"link_off\"\n message=\"No Postman collection configured. Add a collection id and API key to pick an endpoint.\" />\n }\n\n @case ('selected') {\n <div class=\"lib-rest-api-call-setup__card\">\n <button\n type=\"button\"\n class=\"lib-rest-api-call-setup__endpoint\"\n mat-button\n [disabled]=\"disabled()\"\n [matTooltip]=\"currentValue()?.httpEndPoint ?? ''\"\n (click)=\"clearValue()\">\n <span class=\"lib-rest-api-call-setup__method\" [style.color]=\"methodColor()\">\n {{ currentValue()?.httpMethod }}\n </span>\n <span class=\"lib-rest-api-call-setup__name\">\n {{ currentValue()?.name }}\n </span>\n <mat-icon class=\"lib-rest-api-call-setup__clear\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n }\n\n @case ('picker') {\n <lib-postman-collections\n class=\"lib-rest-api-call-setup__picker\"\n [class.lib-rest-api-call-setup__picker--disabled]=\"disabled()\"\n [postmanCollectionConfig]=\"postmanCollectionConfig()!\"\n [loadingEndPoints]=\"loadingEndPoints()\"\n (nodeSelectionChanged)=\"nodeSelectionChanged($event)\" />\n }\n}\n\n@if (disabled()) {\n <p class=\"lib-rest-api-call-setup__lock\">\n <mat-icon aria-hidden=\"true\">lock</mat-icon>\n <span>This endpoint is locked and cannot be changed.</span>\n </p>\n}\n\n<lib-error-list [errors]=\"errors()\" />\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-t-forms-rest-api-call-setup.component-WPUxtY7Q.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 type { IFolderItem, IGetPostmanCollections } from 'ngx-t-forms-types';\n\n/** True when an item's own name or description contains the (already-lowercased) search text. */\nfunction itemMatches(item: IFolderItem, searchText: string): boolean {\n return (\n (item.name?.toLowerCase().includes(searchText) ?? false) ||\n (item.description?.toLowerCase().includes(searchText) ?? false)\n );\n}\n\n/**\n * Recursively prunes a folder tree to the items relevant to `searchText`.\n *\n * An item is kept when it matches directly (its whole subtree is then\n * preserved) OR when one of its descendants matches — in which case the\n * ancestor folder is preserved but its children are pruned to only the\n * matching branches. This fixes the legacy defect where ancestor folders of a\n * deep match were dropped (or whole sibling subtrees were retained).\n */\nfunction pruneItems(items: IFolderItem[] | undefined, searchText: string): IFolderItem[] {\n if (!items) {\n return [];\n }\n return items.reduce<IFolderItem[]>((kept, item) => {\n if (itemMatches(item, searchText)) {\n // Direct hit: keep the item and its full subtree intact.\n kept.push(item);\n return kept;\n }\n const matchingChildren = pruneItems(item.item, searchText);\n if (matchingChildren.length > 0) {\n // Ancestor of a match: keep the folder but only the matching branches.\n kept.push({ ...item, item: matchingChildren });\n }\n return kept;\n }, []);\n}\n\n/**\n * Filters a fetched Postman collection by a free-text search key, preserving\n * the ancestor folders of every match. An empty/whitespace key returns the\n * full set of top-level items unchanged.\n */\nexport function filterCollectionItems(\n collections: IGetPostmanCollections,\n searchKey: string,\n): IFolderItem[] {\n const items = collections.collection.item;\n const searchText = searchKey.trim().toLowerCase();\n if (!searchText) {\n return items;\n }\n return pruneItems(items, searchText);\n}\n","/**\n * Maps an HTTP method to its design-token CSS colour value.\n *\n * Returns a `var(--lib-forms-method-*)` reference (dark-mode safe, no hex /\n * named colours) so the tree can colour-code endpoints. Unknown methods fall\n * back to `currentColor`. Matching is case-insensitive.\n */\nexport function methodColor(method: string): string {\n switch (method.toUpperCase()) {\n case 'GET':\n return 'var(--lib-forms-method-get)';\n case 'POST':\n return 'var(--lib-forms-method-post)';\n case 'PUT':\n return 'var(--lib-forms-method-put)';\n case 'PATCH':\n return 'var(--lib-forms-method-patch)';\n case 'DELETE':\n return 'var(--lib-forms-method-delete)';\n default:\n return 'currentColor';\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { catchError, take, tap, throwError } from 'rxjs';\n\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport type {\n FlatNode,\n IFolderItem,\n IGetPostmanCollections,\n IPostmanCollectionConfig,\n TreeNode,\n} from 'ngx-t-forms-types';\n\nimport { TreeComponent } from '../api-value-access-rules/functions/convertDataToTree';\nimport { convertPostmanFolderItemsToTree } from './functions/convertPostmanCollectionToTree';\nimport { filterCollectionItems } from './functions/filterCollectionItems';\nimport { methodColor } from './functions/methodColors';\nimport { SearchFieldComponent } from '../_shared/search-field/search-field.component';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\nimport { _isEqual } from '../../../../shared/functions/isEqual';\n\n/**\n * Internal Postman-collection picker used by `rest-api-call-setup`.\n *\n * Fetches a Postman collection over HTTP and renders it as a searchable tree of\n * endpoints, emitting the selected folder item to the parent. Embedded\n * component — owns only its tree content; the parent renders any field\n * label / hint / errors.\n */\n@Component({\n selector: 'lib-postman-collections',\n templateUrl: './postman-collections.component.html',\n styleUrls: ['./postman-collections.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: { 'class': 'lib-postman-collections' },\n imports: [\n MatTreeModule,\n MatIconModule,\n MatButtonModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n SearchFieldComponent,\n EmptyStateComponent,\n ],\n})\nexport class PostmanCollectionsComponent {\n /** Postman API config (collection URL + key). When invalid the component shows an error. */\n readonly postmanCollectionConfig = input<IPostmanCollectionConfig | undefined>(undefined);\n\n /** Endpoint IDs currently in a loading state (rendered with a spinner in the tree). */\n readonly loadingEndPoints = input<string[]>([]);\n\n /** Emits when the user picks an endpoint node from the tree. */\n readonly nodeSelectionChanged = output<IFolderItem>();\n\n readonly #httpClient = inject(HttpClient);\n readonly #destroyRef = inject(DestroyRef);\n\n /** Imperative mat-tree backing store reused from the access-rules tree. */\n protected readonly treeComponent = new TreeComponent();\n\n /** Raw fetched collection; `undefined` until the request resolves. */\n readonly #collection = signal<IGetPostmanCollections | undefined>(undefined);\n\n /** Current search text, two-way bound to the search field. */\n protected readonly searchKey = signal<string>('');\n\n /** Request-in-flight flag. */\n protected readonly loading = signal<boolean>(false);\n\n /** Last error (invalid config or HTTP failure); `undefined` when healthy. */\n protected readonly error = signal<HttpErrorResponse | undefined>(undefined);\n\n /** Folder items after applying the current search, ancestor-folders preserved. */\n protected readonly filteredItems = computed<IFolderItem[]>(() => {\n const collection = this.#collection();\n if (!collection) {\n return [];\n }\n return filterCollectionItems(collection, this.searchKey());\n });\n\n /** Tree nodes derived from {@link filteredItems}. */\n readonly #treeData = computed<TreeNode[]>(() =>\n convertPostmanFolderItemsToTree(this.filteredItems()),\n );\n\n /** True once a collection is loaded but the current search yields nothing. */\n protected readonly isEmpty = computed<boolean>(\n () => Boolean(this.#collection()) && this.#treeData().length === 0,\n );\n\n /** Cache for {@link getNodeLines} so identical levels reuse one array. */\n readonly #nodeLinesCache = new Map<number, readonly number[]>();\n\n /** Push derived tree data into the imperative mat-tree data source. */\n protected readonly syncTree = effect(() => {\n this.treeComponent.assignDataSourceData(this.#treeData());\n });\n\n /** Last config the effect acted on; guards against re-fetching when an unstable parent binding hands us a new-but-equal reference. */\n #loadedConfig: IPostmanCollectionConfig | undefined;\n #hasLoadedOnce = false;\n\n /** Fetch (or re-fetch) the collection only when the config input's content actually changes. */\n protected readonly loadOnConfigChange = effect(() => {\n const config = this.postmanCollectionConfig();\n if (this.#hasLoadedOnce && _isEqual(this.#loadedConfig, config)) {\n return;\n }\n this.#hasLoadedOnce = true;\n this.#loadedConfig = config;\n this.#loadCollection(config);\n });\n\n #isValidConfig(config: IPostmanCollectionConfig | undefined): config is IPostmanCollectionConfig {\n return Boolean(config?.collectionUrl) && Boolean(config?.collectionKey);\n }\n\n #loadCollection(config: IPostmanCollectionConfig | undefined): void {\n if (!this.#isValidConfig(config)) {\n this.#collection.set(undefined);\n this.loading.set(false);\n this.error.set(new HttpErrorResponse({ error: 'Invalid Postman Collection Config' }));\n return;\n }\n\n const requestOptions = {\n params: { apikey: config.collectionKey, clearSystemHeaders: true },\n headers: { 'Content-Type': 'application/json' },\n };\n\n this.loading.set(true);\n this.#httpClient\n .get<IGetPostmanCollections>(config.collectionUrl, requestOptions)\n .pipe(\n take(1),\n tap(data => {\n this.#collection.set(data);\n this.error.set(undefined);\n this.loading.set(false);\n }),\n catchError((err: HttpErrorResponse) => {\n this.loading.set(false);\n this.error.set(err);\n return throwError(() => err);\n }),\n takeUntilDestroyed(this.#destroyRef),\n )\n .subscribe();\n }\n\n protected selectNode(node: IFolderItem): void {\n this.nodeSelectionChanged.emit(node);\n }\n\n protected methodColor(method: string): string {\n return methodColor(method);\n }\n\n protected isEndpointLoading(id: string): boolean {\n return this.loadingEndPoints().includes(id);\n }\n\n protected hasChild = (_: number, node: FlatNode): boolean =>\n this.treeComponent.hasChild(_, node);\n\n /** Memoised 1..level vertical guide-line indices for tree indentation. */\n protected getNodeLines(level: number): readonly number[] {\n const cached = this.#nodeLinesCache.get(level);\n if (cached) {\n return cached;\n }\n const lines = Array.from({ length: level }, (_, i) => i + 1);\n this.#nodeLinesCache.set(level, lines);\n return lines;\n }\n}\n","@if (loading()) {\n <div class=\"loading-container\">\n <mat-spinner diameter=\"36\"></mat-spinner>\n </div>\n} @else {\n <lib-search-field\n class=\"search\"\n placeholder=\"Search api\"\n [(value)]=\"searchKey\" />\n\n @if (error(); as err) {\n <lib-empty-state icon=\"error_outline\" [message]=\"err.message\" />\n } @else if (isEmpty()) {\n <lib-empty-state\n icon=\"search_off\"\n [message]=\"searchKey() ? 'No endpoints match your search' : 'No endpoints in this collection'\" />\n } @else {\n <mat-tree\n [dataSource]=\"treeComponent.dataSource\"\n [treeControl]=\"treeComponent.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n @if (isEndpointLoading(node.value.id)) {\n <mat-spinner diameter=\"22\" class=\"loading-spinner\"></mat-spinner>\n }\n @for (line of getNodeLines(node.level); track line) {\n <div class=\"line\" [style.left.px]=\"line * 40 + 8\"></div>\n }\n @if (node.value?.request; as request) {\n <button\n mat-button\n class=\"item\"\n [disabled]=\"(!request.body?.raw && request.method === 'POST') || !request.url?.raw\"\n [matTooltip]=\"request.url?.raw || 'Invalid Postman config, missing Endpoint URL'\"\n (click)=\"selectNode(node.value)\">\n <span class=\"node-key method\" [style.color]=\"methodColor(request.method)\">\n {{ request.method }}\n </span>\n <span>{{ node.key }}</span>\n </button>\n }\n </mat-tree-node>\n\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\n <button\n mat-icon-button\n matTreeNodeToggle\n class=\"toggle\"\n [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n {{ treeComponent.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <mat-icon class=\"folder-icon\">\n {{ treeComponent.treeControl.isExpanded(node) ? 'folder_open' : 'folder' }}\n </mat-icon>\n <span class=\"folder-label\">{{ node.key }}</span>\n </mat-tree-node>\n </mat-tree>\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nimport {\n APIDataFetchingConfigurationInterface,\n DataSources,\n IFolderItem,\n IPostmanCollectionConfig,\n JsDataTypes,\n MinimumInputRequiredInterface,\n} from 'ngx-t-forms-types';\n\nimport type { IConfigElementError } from '../../t-dynamic-data-edit.component';\nimport { _isEqual } from '../../../../shared/functions/isEqual';\nimport { EmptyStateComponent } from '../_shared/empty-state/empty-state.component';\nimport { ErrorListComponent } from '../_shared/error-list/error-list.component';\nimport { PostmanCollectionsComponent } from '../postman-collections/postman-collections.component';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nlet nextId = 0;\n\n/** Discrete UI mode this editor is in, derived from its inputs and value. */\ntype SetupMode = 'no-collection' | 'picker' | 'selected';\n\n/** HTTP method understood by the method-colour map; falls back to neutral. */\ntype HttpMethod = APIDataFetchingConfigurationInterface['httpMethod'];\n\n/** CSS-variable colour per HTTP method (dark-mode-safe; never a hex literal). */\nconst METHOD_COLOR: Readonly<Record<HttpMethod, string>> = {\n GET: 'var(--lib-forms-method-get)',\n POST: 'var(--lib-forms-method-post)',\n PUT: 'var(--lib-forms-method-put)',\n DELETE: 'var(--lib-forms-method-delete)',\n};\n\n/** Maps a JS `typeof` string to the shared {@link JsDataTypes} enum member. */\nfunction toJsDataType(value: unknown): JsDataTypes {\n switch (typeof value) {\n case 'string':\n return JsDataTypes.String;\n case 'number':\n return JsDataTypes.Number;\n case 'bigint':\n return JsDataTypes.BigInt;\n case 'boolean':\n return JsDataTypes.Boolean;\n case 'symbol':\n return JsDataTypes.Symbol;\n case 'function':\n return JsDataTypes.Function;\n case 'object':\n return JsDataTypes.Object;\n default:\n return JsDataTypes.Undefined;\n }\n}\n\n/**\n * Lets the user pick an API endpoint from a Postman collection and exposes the\n * resulting {@link APIDataFetchingConfigurationInterface}. Renders one of three\n * states — no collection configured, the endpoint picker, or the selected\n * endpoint card — and embeds {@link PostmanCollectionsComponent} for the tree.\n *\n * Internal editor consumed by `t-dynamic-data-edit` and `data-source-picker`;\n * the parent owns the field label, hint and validation chrome.\n *\n * @example\n * <lib-rest-api-call-setup\n * [postmanCollectionConfig]=\"config()\"\n * [value]=\"value()\"\n * [disabled]=\"disabled()\"\n * (valueChanged)=\"onApiConfig($event)\" />\n */\n@Component({\n selector: 'lib-rest-api-call-setup',\n templateUrl: './rest-api-call-setup.component.html',\n styleUrl: './rest-api-call-setup.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n imports: [\n PostmanCollectionsComponent,\n EmptyStateComponent,\n ErrorListComponent,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n ],\n host: {\n 'class': 'lib-rest-api-call-setup',\n '[id]': 'hostId()',\n '[attr.data-mode]': 'mode()',\n },\n})\nexport class RestApiCallSetupComponent {\n readonly #fallbackId = `lib-rest-api-call-setup-${nextId++}`;\n\n /** Optional consumer-provided host id. */\n readonly id = input<string | undefined>(undefined);\n\n /** Postman collection that backs the picker. */\n readonly postmanCollectionConfig = input<IPostmanCollectionConfig | undefined>(undefined);\n\n /**\n * Optional HTTP GET function for fetching sample responses. Retained on the\n * contract for parity; this editor does not invoke it (selection is resolved\n * from the Postman collection the parent already loads).\n */\n readonly httpGetDataFunction = input<\n ((url: string, options: Record<string, unknown>) => Observable<unknown>) | undefined\n >(undefined);\n\n /** Disables the picker and shows a lock affordance. */\n readonly disabled = input<boolean>(false);\n\n /** Current configuration value. */\n readonly value = input<APIDataFetchingConfigurationInterface | undefined>(undefined);\n\n /** Validation errors surfaced from the parent editor. */\n readonly errors = input<IConfigElementError[] | undefined>([]);\n\n /** Emits whenever the user selects a new endpoint or clears the value. */\n readonly valueChanged = output<APIDataFetchingConfigurationInterface | undefined>();\n\n /** Endpoint IDs currently loading sample data (forwarded to the picker). */\n protected readonly loadingEndPoints = signal<string[]>([]);\n\n /** Local snapshot of the value, bridged from the `value` input. */\n readonly #localValue = signal<APIDataFetchingConfigurationInterface | undefined>(undefined);\n\n /** Read-only view of the active configuration for the template. */\n protected readonly currentValue = this.#localValue.asReadonly();\n\n /** Host id: consumer-provided or a stable per-instance fallback. */\n protected readonly hostId = computed<string>(() => this.id() ?? this.#fallbackId);\n\n /** True once the snapshot carries a usable endpoint + method. */\n protected readonly hasValidValue = computed<boolean>(() => {\n const v = this.#localValue();\n return Boolean(v?.httpEndPoint) && Boolean(v?.httpMethod);\n });\n\n /** Discrete UI mode driving the template's `@switch`. */\n protected readonly mode = computed<SetupMode>(() => {\n if (!this.postmanCollectionConfig()) return 'no-collection';\n return this.hasValidValue() ? 'selected' : 'picker';\n });\n\n /** Token-based colour for the selected endpoint's HTTP method badge. */\n protected readonly methodColor = computed<string>(() => {\n const method = this.#localValue()?.httpMethod;\n return method && method in METHOD_COLOR ? METHOD_COLOR[method] : 'currentColor';\n });\n\n /**\n * Bridge the `value` input into the local mutable snapshot, de-duping with a\n * deep structural compare (replaces the legacy `JSON.stringify` equality so\n * key order and `undefined` no longer cause spurious resets).\n */\n protected readonly valueBridge = effect(() => {\n const next = this.value();\n if (!_isEqual(next, this.#localValue())) {\n this.#localValue.set(next);\n }\n });\n\n /** Maps the selected tree node into the API config and emits it. */\n protected nodeSelectionChanged(node: IFolderItem): void {\n const { id, name, request, response } = node;\n if (!request || !response) return;\n\n let requestBody: Record<string, unknown>;\n try {\n requestBody = JSON.parse(request.body?.raw || '{}') as Record<string, unknown>;\n } catch {\n requestBody = {};\n }\n\n const isPost = request.method === 'POST';\n const minimumInputRequired: MinimumInputRequiredInterface[] = isPost\n ? this.#extractRequiredInputs(requestBody)\n : [];\n\n const config: APIDataFetchingConfigurationInterface = {\n _id: id,\n name,\n httpEndPoint: request.url.raw,\n httpMethod: request.method,\n source: DataSources.Api,\n postFormData: isPost,\n backEndConfig: { minimumInputRequired },\n };\n\n this.#localValue.set(config);\n this.valueChanged.emit(config);\n }\n\n /**\n * Clears the selection and emits a single `undefined` (the legacy double-emit\n * — `undefined` then a stub `{ source }` — was removed; see FLAG).\n */\n protected clearValue(): void {\n this.#localValue.set(undefined);\n this.valueChanged.emit(undefined);\n }\n\n /**\n * Derives the POST endpoint's required inputs from the request body. Top-level\n * keys are primary; entries under `data` are secondary (non-primary).\n */\n #extractRequiredInputs(requestBody: Record<string, unknown>): MinimumInputRequiredInterface[] {\n const { data, ...rest } = requestBody;\n const dataEntries: Record<string, unknown> =\n data && typeof data === 'object' ? { ...data } : {};\n\n const primaryKeys = Object.entries(rest).map(([key, val]) =>\n this.#toRequiredInput(key, val, true),\n );\n const secondaryKeys = Object.entries(dataEntries).map(([key, val]) =>\n this.#toRequiredInput(key, val, false),\n );\n\n return [...primaryKeys, ...secondaryKeys];\n }\n\n #toRequiredInput(\n name: string,\n value: unknown,\n primaryKey: boolean,\n ): MinimumInputRequiredInterface {\n return { name, type: toJsDataType(value), primaryKey };\n }\n}\n","@switch (mode()) {\n @case ('no-collection') {\n <lib-empty-state\n icon=\"link_off\"\n message=\"No Postman collection configured. Add a collection id and API key to pick an endpoint.\" />\n }\n\n @case ('selected') {\n <div class=\"lib-rest-api-call-setup__card\">\n <button\n type=\"button\"\n class=\"lib-rest-api-call-setup__endpoint\"\n mat-button\n [disabled]=\"disabled()\"\n [matTooltip]=\"currentValue()?.httpEndPoint ?? ''\"\n (click)=\"clearValue()\">\n <span class=\"lib-rest-api-call-setup__method\" [style.color]=\"methodColor()\">\n {{ currentValue()?.httpMethod }}\n </span>\n <span class=\"lib-rest-api-call-setup__name\">\n {{ currentValue()?.name }}\n </span>\n <mat-icon class=\"lib-rest-api-call-setup__clear\" aria-hidden=\"true\">close</mat-icon>\n </button>\n </div>\n }\n\n @case ('picker') {\n <lib-postman-collections\n class=\"lib-rest-api-call-setup__picker\"\n [class.lib-rest-api-call-setup__picker--disabled]=\"disabled()\"\n [postmanCollectionConfig]=\"postmanCollectionConfig()!\"\n [loadingEndPoints]=\"loadingEndPoints()\"\n (nodeSelectionChanged)=\"nodeSelectionChanged($event)\" />\n }\n}\n\n@if (disabled()) {\n <p class=\"lib-rest-api-call-setup__lock\">\n <mat-icon aria-hidden=\"true\">lock</mat-icon>\n <span>This endpoint is locked and cannot be changed.</span>\n </p>\n}\n\n<lib-error-list [errors]=\"errors()\" />\n"],"names":["i2","i3","i4","i1"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import * as i1 from '@angular/material/chips';
3
+ import * as i4 from '@angular/material/chips';
4
4
  import { MatChipsModule } from '@angular/material/chips';
5
5
  import * as i3 from '@angular/material/icon';
6
6
  import { MatIconModule } from '@angular/material/icon';
@@ -10,7 +10,7 @@ import * as i5 from '@angular/material/table';
10
10
  import { MatTableModule } from '@angular/material/table';
11
11
  import * as i5$1 from '@angular/material/toolbar';
12
12
  import { MatToolbarModule } from '@angular/material/toolbar';
13
- import { F as FormsStoreService } from './ngx-t-forms-ngx-t-forms-u_kigDid.mjs';
13
+ import { F as FormsStoreService } from './ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs';
14
14
  import { ElementTypes, validateFormSlide } from 'ngx-t-forms-types';
15
15
 
16
16
  class SectionReportComponent {
@@ -81,7 +81,7 @@ class SectionReportComponent {
81
81
  ];
82
82
  }
83
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SectionReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
84
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SectionReportComponent, isStandalone: true, selector: "lib-section-report", inputs: { sectionId: { classPropertyName: "sectionId", publicName: "sectionId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (section()) {\r\n <div class=\"report-container\">\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 </div>\r\n @if (section()?.sectionIsSeen) {\r\n <div class=\"status-chip initialized\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n }\r\n </div>\r\n </mat-toolbar>\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 [style.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 @if (row.details?.length) {\r\n <mat-chip-set>\r\n @for (detail of row.details; track $index) {\r\n <mat-chip class=\"detail-chip\">{{ detail }}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n </td>\r\n </ng-container>\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>\r\n}\r\n", styles: [".report-container{padding:20px;display:flex;flex-direction:column;gap:20px;background:var(--mat-sys-surface-container, var(--mat-app-surface))}.header-card{background:var(--lib-forms-surface)}.title-section{display:flex;align-items:center;gap:12px}.section-icon{color:var(--sem-info);font-size:1.75em;width:28px;height:28px;margin-right:8px}h1{margin:0;font-size:1.25em;font-weight:500}.subtitle{margin:4px 0 0;color:var(--lib-forms-on-surface-variant);font-size:.875em}.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:var(--sem-success);color:var(--lib-forms-on-primary);font-size:.875em}.status-chip.invalid{background:var(--sem-error)}.status-chip.initialized{background:var(--sem-info)}.status-chip mat-icon{font-size:1.125em;width:18px;height:18px}.filter-field{width:100%;margin-bottom:16px}.detail-chip{font-size:.75em;height:24px}mat-card-content{padding:16px}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1.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: i1.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SectionReportComponent, isStandalone: true, selector: "lib-section-report", inputs: { sectionId: { classPropertyName: "sectionId", publicName: "sectionId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (section()) {\r\n <div class=\"report-container\">\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 </div>\r\n @if (section()?.sectionIsSeen) {\r\n <div class=\"status-chip initialized\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n }\r\n </div>\r\n </mat-toolbar>\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 [style.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 @if (row.details?.length) {\r\n <mat-chip-set>\r\n @for (detail of row.details; track $index) {\r\n <mat-chip class=\"detail-chip\">{{ detail }}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n </td>\r\n </ng-container>\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>\r\n}\r\n", styles: [".report-container{padding:20px;display:flex;flex-direction:column;gap:20px;background:var(--mat-sys-surface-container, var(--mat-app-surface))}.header-card{background:var(--lib-forms-surface)}.title-section{display:flex;align-items:center;gap:12px}.section-icon{color:var(--sem-info);font-size:1.75em;width:28px;height:28px;margin-right:8px}h1{margin:0;font-size:1.25em;font-weight:500}.subtitle{margin:4px 0 0;color:var(--lib-forms-on-surface-variant);font-size:.875em}.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:var(--sem-success);color:var(--lib-forms-on-primary);font-size:.875em}.status-chip.invalid{background:var(--sem-error)}.status-chip.initialized{background:var(--sem-info)}.status-chip mat-icon{font-size:1.125em;width:18px;height:18px}.filter-field{width:100%;margin-bottom:16px}.detail-chip{font-size:.75em;height:24px}mat-card-content{padding:16px}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { 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: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i10.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
85
85
  }
86
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SectionReportComponent, decorators: [{
87
87
  type: Component,
@@ -95,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
95
95
  }], propDecorators: { sectionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionId", required: true }] }] } });
96
96
 
97
97
  export { SectionReportComponent };
98
- //# sourceMappingURL=ngx-t-forms-section-report.component-BxOhR6C0.mjs.map
98
+ //# sourceMappingURL=ngx-t-forms-section-report.component-C1w16LYm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-t-forms-section-report.component-BxOhR6C0.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 { ChangeDetectionStrategy, Component, Signal, computed, inject, input } from '@angular/core';\r\n\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { ElementTypes, FormSlideInterface, validateFormSlide } from 'ngx-t-forms-types';\r\n\r\ninterface SectionReportMetric {\r\n icon: string;\r\n name: string;\r\n value: number;\r\n color: string;\r\n description: string;\r\n trend: string;\r\n category: string;\r\n details?: unknown[];\r\n}\r\n\r\n@Component({\r\n selector: 'lib-section-report',\r\n imports: [\r\n MatChipsModule,\r\n MatIconModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatToolbarModule,\r\n ],\r\n templateUrl: './section-report.component.html',\r\n styleUrl: './section-report.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SectionReportComponent {\r\n readonly sectionId = input.required<string>();\r\n\r\n protected readonly displayedColumns: readonly string[] = ['icon', 'name', 'description', 'value'];\r\n\r\n readonly #store: FormsStoreService = inject(FormsStoreService);\r\n protected readonly selectFormInEdit = this.#store.signalSelectors.selectFormInEdit;\r\n\r\n protected readonly section: Signal<FormSlideInterface | null> = computed<FormSlideInterface | null>(() => {\r\n const form = this.selectFormInEdit();\r\n return (\r\n form?.form.slides.find((slide: FormSlideInterface) => slide.sectionId === this.sectionId()) ||\r\n null\r\n );\r\n });\r\n\r\n protected readonly sectionData: Signal<SectionReportMetric[]> = computed<SectionReportMetric[]>(\r\n () => this.#buildMetrics(this.section()),\r\n );\r\n\r\n #buildMetrics(data: FormSlideInterface | null): SectionReportMetric[] {\r\n if (!data) return [];\r\n const sectionId = this.sectionId();\r\n const allInputs = data.columns\r\n .flatMap((column) =>\r\n column.element === ElementTypes.MultipleInput\r\n ? [...(column?.formInputs || []), column]\r\n : [column],\r\n )\r\n .filter((input) => input.sectionId === sectionId);\r\n\r\n const calculatedInputs = allInputs.filter(\r\n (input) =>\r\n input.calculatedFieldRules?.formula && input.calculatedFieldRules?.formula !== '',\r\n );\r\n const inputsWithManualValidations = allInputs.filter((input) =>\r\n input.validators?.some((validator) => Object.keys(validator).length > 0),\r\n );\r\n const allSectionInputConfigErrors = validateFormSlide(data);\r\n\r\n return [\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 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 }\r\n}\r\n","@if (section()) {\r\n <div class=\"report-container\">\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 </div>\r\n @if (section()?.sectionIsSeen) {\r\n <div class=\"status-chip initialized\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n }\r\n </div>\r\n </mat-toolbar>\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 [style.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 @if (row.details?.length) {\r\n <mat-chip-set>\r\n @for (detail of row.details; track $index) {\r\n <mat-chip class=\"detail-chip\">{{ detail }}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n </td>\r\n </ng-container>\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>\r\n}\r\n"],"names":["i2","i3","i4","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-t-forms-section-report.component-C1w16LYm.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 { ChangeDetectionStrategy, Component, Signal, computed, inject, input } from '@angular/core';\r\n\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\n\r\nimport { FormsStoreService } from '../../../forms/store/forms-store.service';\r\n\r\nimport { ElementTypes, FormSlideInterface, validateFormSlide } from 'ngx-t-forms-types';\r\n\r\ninterface SectionReportMetric {\r\n icon: string;\r\n name: string;\r\n value: number;\r\n color: string;\r\n description: string;\r\n trend: string;\r\n category: string;\r\n details?: unknown[];\r\n}\r\n\r\n@Component({\r\n selector: 'lib-section-report',\r\n imports: [\r\n MatChipsModule,\r\n MatIconModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatToolbarModule,\r\n ],\r\n templateUrl: './section-report.component.html',\r\n styleUrl: './section-report.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SectionReportComponent {\r\n readonly sectionId = input.required<string>();\r\n\r\n protected readonly displayedColumns: readonly string[] = ['icon', 'name', 'description', 'value'];\r\n\r\n readonly #store: FormsStoreService = inject(FormsStoreService);\r\n protected readonly selectFormInEdit = this.#store.signalSelectors.selectFormInEdit;\r\n\r\n protected readonly section: Signal<FormSlideInterface | null> = computed<FormSlideInterface | null>(() => {\r\n const form = this.selectFormInEdit();\r\n return (\r\n form?.form.slides.find((slide: FormSlideInterface) => slide.sectionId === this.sectionId()) ||\r\n null\r\n );\r\n });\r\n\r\n protected readonly sectionData: Signal<SectionReportMetric[]> = computed<SectionReportMetric[]>(\r\n () => this.#buildMetrics(this.section()),\r\n );\r\n\r\n #buildMetrics(data: FormSlideInterface | null): SectionReportMetric[] {\r\n if (!data) return [];\r\n const sectionId = this.sectionId();\r\n const allInputs = data.columns\r\n .flatMap((column) =>\r\n column.element === ElementTypes.MultipleInput\r\n ? [...(column?.formInputs || []), column]\r\n : [column],\r\n )\r\n .filter((input) => input.sectionId === sectionId);\r\n\r\n const calculatedInputs = allInputs.filter(\r\n (input) =>\r\n input.calculatedFieldRules?.formula && input.calculatedFieldRules?.formula !== '',\r\n );\r\n const inputsWithManualValidations = allInputs.filter((input) =>\r\n input.validators?.some((validator) => Object.keys(validator).length > 0),\r\n );\r\n const allSectionInputConfigErrors = validateFormSlide(data);\r\n\r\n return [\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 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 }\r\n}\r\n","@if (section()) {\r\n <div class=\"report-container\">\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 </div>\r\n @if (section()?.sectionIsSeen) {\r\n <div class=\"status-chip initialized\">\r\n <mat-icon>task_alt</mat-icon>\r\n Initialized\r\n </div>\r\n }\r\n </div>\r\n </mat-toolbar>\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 [style.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 @if (row.details?.length) {\r\n <mat-chip-set>\r\n @for (detail of row.details; track $index) {\r\n <mat-chip class=\"detail-chip\">{{ detail }}</mat-chip>\r\n }\r\n </mat-chip-set>\r\n }\r\n </td>\r\n </ng-container>\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>\r\n}\r\n"],"names":["i1","i2","i3","i4","i5"],"mappings":"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"}
@@ -1,27 +1,27 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, input, ChangeDetectionStrategy, Component, output, computed } from '@angular/core';
3
- import * as i1$1 from '@angular/forms';
3
+ import * as i1 from '@angular/forms';
4
4
  import { NgControl, ReactiveFormsModule } from '@angular/forms';
5
5
  import * as i2 from '@angular/material/form-field';
6
6
  import { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';
7
7
  import * as i3$1 from '@angular/material/icon';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
- import * as i1$2 from '@angular/material/button';
9
+ import * as i1$1 from '@angular/material/button';
10
10
  import { MatButtonModule } from '@angular/material/button';
11
11
  import * as i5 from '@angular/material/tooltip';
12
12
  import { MatTooltipModule } from '@angular/material/tooltip';
13
- import { B as BaseCustomInput, m as getInputErrorMessage, n as TFormInputStatusComponent } from './ngx-t-forms-ngx-t-forms-u_kigDid.mjs';
13
+ import { B as BaseCustomInput, q as getInputErrorMessage, u as TFormInputStatusComponent } from './ngx-t-forms-ngx-t-forms-C2G8_WQk.mjs';
14
14
  import { Subject } from 'rxjs';
15
15
  import * as i8 from '@angular/material/select';
16
16
  import { MatSelectModule } from '@angular/material/select';
17
17
  import { OptionSelectTypes } from 'ngx-t-forms-types';
18
- import * as i1 from '@angular/material/chips';
18
+ import * as i4 from '@angular/material/chips';
19
19
  import { MatChipsModule } from '@angular/material/chips';
20
20
  import * as i13 from '@angular/material/radio';
21
21
  import { MatRadioModule } from '@angular/material/radio';
22
22
  import * as i3 from '@angular/material/checkbox';
23
23
  import { MatCheckboxModule } from '@angular/material/checkbox';
24
- import * as i4 from '@angular/material/list';
24
+ import * as i4$1 from '@angular/material/list';
25
25
  import { MatListModule } from '@angular/material/list';
26
26
  import { TitleCasePipe } from '@angular/common';
27
27
 
@@ -87,7 +87,7 @@ class SelectInputComponent extends BaseCustomInput {
87
87
  return this.ngControl?.control ?? null;
88
88
  }
89
89
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SelectInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
90
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SelectInputComponent, isStandalone: true, selector: "lib-select-input", inputs: { inputConfig: { classPropertyName: "inputConfig", publicName: "inputConfig", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.floating": "shouldLabelFloat", "id": "id" } }, providers: [{ provide: MatFormFieldControl, useExisting: SelectInputComponent }], usesInheritance: true, ngImport: i0, template: "@switch (inputConfig().optionSelectType) {\r\n@case (optionSelectTypes.ChipSelect) {\r\n<mat-chip-listbox [multiple]=\"!!inputConfig().allowMultipleSelection\" [value]=\"value\" [disabled]=\"disabled\"\r\n (change)=\"onSelectionChange($event)\" aria-l abel=\"Chip select options\">\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-chip-option [value]=\"option.value\">{{option.label}}</mat-chip-option>\r\n }\r\n</mat-chip-listbox>\r\n}\r\n@case (optionSelectTypes.RadioButton) {\r\n@if (!!inputConfig().allowMultipleSelection) {\r\n@for (option of getSelectOptions(); track option.value) {\r\n<mat-checkbox\r\n [value]=\"option.value\"\r\n [checked]=\"isSelected(option.value)\"\r\n (change)=\"checkBoxChanged($event, option.value)\" class=\"example-margin\">\r\n {{option.label}}\r\n</mat-checkbox>\r\n}\r\n} @else {\r\n<mat-radio-group aria-labelledby=\"example-radio-group-label\" class=\"example-radio-group\"\r\n (change)=\"onSelectionChange($event)\" [value]=\"value\">\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-radio-button class=\"example-radio-button\" [value]=\"option.value\">{{option.label}}</mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n}\r\n\r\n}\r\n@default {\r\n\r\n<mat-select [multiple]=\"!!inputConfig().allowMultipleSelection\" #sele (selectionChange)=\"onSelectionChange($event)\"\r\n [value]=\"value\">\r\n\r\n\r\n\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-option [value]=\"option.value\" [disabled]=\"inputConfig().readonly\">\r\n @switch (inputConfig().matOptions?.optionType) {\r\n @case ('user') {\r\n <mat-list-item style=\"padding: 0px;\">\r\n <img matListItemAvatar [src]=\"getAvatar(option.username)\" />\r\n <div matListItemTitle>{{ option.username | titlecase }}</div>\r\n <div matListItemLine> {{ option.email }}</div>\r\n </mat-list-item>\r\n\r\n }\r\n @default {\r\n {{ option.label }}\r\n }\r\n }\r\n\r\n </mat-option>\r\n }\r\n\r\n</mat-select>\r\n\r\n}\r\n}\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i1.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i13.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i13.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i4.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SelectInputComponent, isStandalone: true, selector: "lib-select-input", inputs: { inputConfig: { classPropertyName: "inputConfig", publicName: "inputConfig", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.floating": "shouldLabelFloat", "id": "id" } }, providers: [{ provide: MatFormFieldControl, useExisting: SelectInputComponent }], usesInheritance: true, ngImport: i0, template: "@switch (inputConfig().optionSelectType) {\r\n@case (optionSelectTypes.ChipSelect) {\r\n<mat-chip-listbox [multiple]=\"!!inputConfig().allowMultipleSelection\" [value]=\"value\" [disabled]=\"disabled\"\r\n (change)=\"onSelectionChange($event)\" aria-l abel=\"Chip select options\">\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-chip-option [value]=\"option.value\">{{option.label}}</mat-chip-option>\r\n }\r\n</mat-chip-listbox>\r\n}\r\n@case (optionSelectTypes.RadioButton) {\r\n@if (!!inputConfig().allowMultipleSelection) {\r\n@for (option of getSelectOptions(); track option.value) {\r\n<mat-checkbox\r\n [value]=\"option.value\"\r\n [checked]=\"isSelected(option.value)\"\r\n (change)=\"checkBoxChanged($event, option.value)\" class=\"example-margin\">\r\n {{option.label}}\r\n</mat-checkbox>\r\n}\r\n} @else {\r\n<mat-radio-group aria-labelledby=\"example-radio-group-label\" class=\"example-radio-group\"\r\n (change)=\"onSelectionChange($event)\" [value]=\"value\">\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-radio-button class=\"example-radio-button\" [value]=\"option.value\">{{option.label}}</mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n}\r\n\r\n}\r\n@default {\r\n\r\n<mat-select [multiple]=\"!!inputConfig().allowMultipleSelection\" #sele (selectionChange)=\"onSelectionChange($event)\"\r\n [value]=\"value\">\r\n\r\n\r\n\r\n @for (option of getSelectOptions(); track option.value) {\r\n <mat-option [value]=\"option.value\" [disabled]=\"inputConfig().readonly\">\r\n @switch (inputConfig().matOptions?.optionType) {\r\n @case ('user') {\r\n <mat-list-item style=\"padding: 0px;\">\r\n <img matListItemAvatar [src]=\"getAvatar(option.username)\" />\r\n <div matListItemTitle>{{ option.username | titlecase }}</div>\r\n <div matListItemLine> {{ option.email }}</div>\r\n </mat-list-item>\r\n\r\n }\r\n @default {\r\n {{ option.label }}\r\n }\r\n }\r\n\r\n </mat-option>\r\n }\r\n\r\n</mat-select>\r\n\r\n}\r\n}\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i4.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i4.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i13.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i13.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4$1.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i4$1.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i4$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
91
91
  }
92
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SelectInputComponent, decorators: [{
93
93
  type: Component,
@@ -131,7 +131,7 @@ class SelectInputElementComponent {
131
131
  this.optionsSearchWordKeyWord = event.detail.value.toUpperCase();
132
132
  }
133
133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SelectInputElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SelectInputElementComponent, isStandalone: true, selector: "lib-select-input-element", inputs: { inputConfig: { classPropertyName: "inputConfig", publicName: "inputConfig", isSignal: true, isRequired: true, transformFunction: null }, formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { reload: "reload" }, ngImport: i0, template: "<ng-container [formGroup]=\"formGroup()\">\r\n @if (inputConfig(); as inputConfig) {\r\n <mat-form-field [appearance]=\"inputConfig.appearance || 'fill'\" subscriptSizing=\"dynamic\">\r\n <mat-label>\r\n {{ inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n\r\n <lib-select-input\r\n [inputConfig]=\"inputConfig\"\r\n [required]=\"inputConfig.required\"\r\n [formControlName]=\"inputConfig.id\"\r\n ></lib-select-input>\r\n\r\n @if (inputConfig.hintLabel || inputConfig.temporaryHint) {\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel }}\r\n </mat-hint>\r\n }\r\n\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{ errorMessage() }}</mat-error>\r\n\r\n @if (inputConfig.canReload?.canReload) {\r\n <button\r\n mat-icon-button\r\n style=\"margin-right: 4px;\"\r\n matTooltip=\"Click to refresh this field.\"\r\n class=\"input-sync-button\"\r\n (click)=\"inputConfig.canReload.emit()\"\r\n matSuffix\r\n >\r\n <mat-icon style=\"color: var(--mat-sys-primary)\">sync</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (inputConfig.prefixIcon) {\r\n <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n }\r\n\r\n @if (inputConfig.suffixIcon && inputConfig.id !== 'password') {\r\n <mat-icon matSuffix>{{ inputConfig.suffixIcon }}</mat-icon>\r\n }\r\n\r\n @if (inputConfig.prefixText) {\r\n <span matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n }\r\n @if (inputConfig.suffixText) {\r\n <span matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText }}</span>\r\n }\r\n\r\n @if (inputConfig.maxLength && formGroup()) {\r\n <mat-hint align=\"end\">\r\n {{ (formGroup().controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n }\r\n</ng-container>\r\n", styles: ["mat-form-field{width:100%!important}mat-form-field .input-sync-button{display:none}mat-form-field:hover .input-sync-button{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: SelectInputComponent, selector: "lib-select-input", inputs: ["inputConfig"] }, { kind: "component", type: TFormInputStatusComponent, selector: "lib-t-form-input-status", inputs: ["inputConfig"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: SelectInputElementComponent, isStandalone: true, selector: "lib-select-input-element", inputs: { inputConfig: { classPropertyName: "inputConfig", publicName: "inputConfig", isSignal: true, isRequired: true, transformFunction: null }, formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { reload: "reload" }, ngImport: i0, template: "<ng-container [formGroup]=\"formGroup()\">\r\n @if (inputConfig(); as inputConfig) {\r\n <mat-form-field [appearance]=\"inputConfig.appearance || 'fill'\" subscriptSizing=\"dynamic\">\r\n <mat-label>\r\n {{ inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n\r\n <lib-select-input\r\n [inputConfig]=\"inputConfig\"\r\n [required]=\"inputConfig.required\"\r\n [formControlName]=\"inputConfig.id\"\r\n ></lib-select-input>\r\n\r\n @if (inputConfig.hintLabel || inputConfig.temporaryHint) {\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel }}\r\n </mat-hint>\r\n }\r\n\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{ errorMessage() }}</mat-error>\r\n\r\n @if (inputConfig.canReload?.canReload) {\r\n <button\r\n mat-icon-button\r\n style=\"margin-right: 4px;\"\r\n matTooltip=\"Click to refresh this field.\"\r\n class=\"input-sync-button\"\r\n (click)=\"inputConfig.canReload.emit()\"\r\n matSuffix\r\n >\r\n <mat-icon style=\"color: var(--mat-sys-primary)\">sync</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (inputConfig.prefixIcon) {\r\n <mat-icon matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n }\r\n\r\n @if (inputConfig.suffixIcon && inputConfig.id !== 'password') {\r\n <mat-icon matSuffix>{{ inputConfig.suffixIcon }}</mat-icon>\r\n }\r\n\r\n @if (inputConfig.prefixText) {\r\n <span matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n }\r\n @if (inputConfig.suffixText) {\r\n <span matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText }}</span>\r\n }\r\n\r\n @if (inputConfig.maxLength && formGroup()) {\r\n <mat-hint align=\"end\">\r\n {{ (formGroup().controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n }\r\n</ng-container>\r\n", styles: ["mat-form-field{width:100%!important}mat-form-field .input-sync-button{display:none}mat-form-field:hover .input-sync-button{display:inline-block}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: SelectInputComponent, selector: "lib-select-input", inputs: ["inputConfig"] }, { kind: "component", type: TFormInputStatusComponent, selector: "lib-t-form-input-status", inputs: ["inputConfig"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
135
135
  }
136
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: SelectInputElementComponent, decorators: [{
137
137
  type: Component,
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
147
147
  }], propDecorators: { inputConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputConfig", required: true }] }], formGroup: [{ type: i0.Input, args: [{ isSignal: true, alias: "formGroup", required: true }] }], reload: [{ type: i0.Output, args: ["reload"] }] } });
148
148
 
149
149
  export { SelectInputElementComponent };
150
- //# sourceMappingURL=ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map
150
+ //# sourceMappingURL=ngx-t-forms-select-input-element.component-CWcywuS6.mjs.map