ngx-t-forms 2.0.29 → 2.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs +104 -0
- package/fesm2022/ngx-t-forms-auto-complete-input-element.component-DCKuXHAW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs +85 -0
- package/fesm2022/ngx-t-forms-basic-input-input-element.component-Ce4ipSUc.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs +643 -0
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-C5TPddVe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs +97 -0
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-CICQaqz6.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs +195 -0
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-CzisLSIP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs +261 -0
- package/fesm2022/ngx-t-forms-data-source-picker.component-Dzz_o6fJ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs +85 -0
- package/fesm2022/ngx-t-forms-date-picker-input-element.component-CYUbVyzP.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs +156 -0
- package/fesm2022/ngx-t-forms-date-range-picker-input-element.component-CmoquQGV.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs +368 -0
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-CLUOXreG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs +704 -0
- package/fesm2022/ngx-t-forms-document-picker.component-qObjcqhE.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs +294 -0
- package/fesm2022/ngx-t-forms-editor-input-element.component-BLXlfb6F.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs +240 -0
- package/fesm2022/ngx-t-forms-editor-js-input.component-BQL0AH7H.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs +205 -0
- package/fesm2022/ngx-t-forms-file-upload-input-element.component-C7mMeEjF.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs +86 -0
- package/fesm2022/ngx-t-forms-form-input-selector.component-C9u8zq9B.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs +22 -0
- package/fesm2022/ngx-t-forms-form-json-view.component-856Hx1Bg.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs +179 -0
- package/fesm2022/ngx-t-forms-form-payload-projection.component-CDkTuX9S.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs +319 -0
- package/fesm2022/ngx-t-forms-form-section-stepper.component-Bs50-nEB.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs +379 -0
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-qrhM0jGL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs +124 -0
- package/fesm2022/ngx-t-forms-geo-location.component-Bosp1UzR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs +31 -0
- package/fesm2022/ngx-t-forms-getInputIcon-B4ADgevZ.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs +180 -0
- package/fesm2022/ngx-t-forms-image-capture-input-element.component-C1g7Z0cK.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs +2 -0
- package/fesm2022/ngx-t-forms-index-dDSobs6A.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs +105 -0
- package/fesm2022/ngx-t-forms-input-custom.component-BkbHFAyR.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs +181 -0
- package/fesm2022/ngx-t-forms-input-editor.component-BPUOM9kQ.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-map-mat-options-keys-CbdW82su.mjs → ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs} +12 -14
- package/fesm2022/ngx-t-forms-map-mat-options-keys-B6hJ7Io5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs +66 -0
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-c7uZT1sr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs +211 -0
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-CTSBrM-j.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs +165 -0
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-CcYiwx-8.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs +38 -0
- package/fesm2022/ngx-t-forms-missing-form-configs.component-DrnH8qdG.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs +38 -0
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-C_abEBQ5.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs +126 -0
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-99DpVSy7.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs +336 -0
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-C0qsMfsq.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs +74 -0
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-B1Z-IXSL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs +905 -0
- package/fesm2022/ngx-t-forms-multiple-input-input-element.component-C7y1OGPx.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs +19461 -0
- package/fesm2022/ngx-t-forms-ngx-t-forms-u_kigDid.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs +555 -0
- package/fesm2022/ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs +748 -0
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DmNSc5aw.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs +358 -0
- package/fesm2022/ngx-t-forms-record-list-manager.component-CUMMvMch.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs +272 -0
- package/fesm2022/ngx-t-forms-required-inputs.component-Ch2yNcIS.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs +398 -0
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-C_aFtdvW.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs +38 -0
- package/fesm2022/ngx-t-forms-search-field.component-B2ZO7lqO.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs +98 -0
- package/fesm2022/ngx-t-forms-section-report.component-BxOhR6C0.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs +150 -0
- package/fesm2022/ngx-t-forms-select-input-element.component-DbgZdNoe.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs +169 -0
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Dhln81DL.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs +204 -0
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-leBokXvM.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs +95 -0
- package/fesm2022/ngx-t-forms-textarea-input-element.component-BEbXJjFA.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs +82 -0
- package/fesm2022/ngx-t-forms-toggle-input-element.component-DDErRUJd.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs +733 -0
- package/fesm2022/ngx-t-forms-validators-config.component-oGjQVGE2.mjs.map +1 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs +1303 -0
- package/fesm2022/ngx-t-forms-workflow-adjudication.component-CtU8dECN.mjs.map +1 -0
- package/fesm2022/ngx-t-forms.mjs +2 -1
- package/fesm2022/ngx-t-forms.mjs.map +1 -1
- package/package.json +20 -18
- package/styles/_editor-mixins.scss +62 -0
- package/styles/_json-editor-syntax.scss +26 -0
- package/styles/_signature-pad.scss +26 -0
- package/styles/_tokens.scss +148 -0
- package/types/ngx-t-forms.d.ts +1767 -621
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs +0 -313
- package/fesm2022/ngx-t-forms-calculated-field-rules.component-D-SBMdYg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs +0 -191
- package/fesm2022/ngx-t-forms-chip-options-creator-editor.component-1cpszpPN.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs +0 -207
- package/fesm2022/ngx-t-forms-config-mscoa-additional-inputs.component-DFdAVWTg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs +0 -204
- package/fesm2022/ngx-t-forms-data-source-picker.component-DxORinAD.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs +0 -289
- package/fesm2022/ngx-t-forms-document-list-label-config-editor.component-DcWS1txl.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs +0 -134
- package/fesm2022/ngx-t-forms-form-input-selector.component-B2QEnvkq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs +0 -22
- package/fesm2022/ngx-t-forms-form-json-view.component-DePf44w6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs +0 -270
- package/fesm2022/ngx-t-forms-form-section-stepper.component-BTkcSjg7.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs +0 -345
- package/fesm2022/ngx-t-forms-forms-builder-menu.component-Wamzf_sq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs +0 -147
- package/fesm2022/ngx-t-forms-input-editor.component-D4xHO76K.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-map-mat-options-keys-CbdW82su.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs +0 -105
- package/fesm2022/ngx-t-forms-mat-chip-list-editor.component-DmTyO9Wi.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs +0 -109
- package/fesm2022/ngx-t-forms-mat-slider-editor.component-DZ4TenrI.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs +0 -155
- package/fesm2022/ngx-t-forms-mat-slider-toggle-editor.component-DPyBYE4p.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs +0 -28
- package/fesm2022/ngx-t-forms-missing-form-configs.component-BRmnwAK6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs +0 -43
- package/fesm2022/ngx-t-forms-mscoa-chart-toolbar.component-D_umeAPL.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs +0 -116
- package/fesm2022/ngx-t-forms-mscoa-error-display.component-CSX2NCNU.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs +0 -296
- package/fesm2022/ngx-t-forms-mscoa-segment-config.component-B6IF8kGg.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs +0 -83
- package/fesm2022/ngx-t-forms-mscoa-temporary-hint.component-BPkjsRmH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs +0 -16844
- package/fesm2022/ngx-t-forms-ngx-t-forms-D9qmig6g.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs +0 -613
- package/fesm2022/ngx-t-forms-pipeline-generator.component-DBJEyCbd.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs +0 -269
- package/fesm2022/ngx-t-forms-record-list-manager.component-Dgs9lNSr.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs +0 -190
- package/fesm2022/ngx-t-forms-required-inputs.component-CSIJvSHq.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs +0 -291
- package/fesm2022/ngx-t-forms-rest-api-call-setup.component-CY-JSkGs.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs +0 -156
- package/fesm2022/ngx-t-forms-section-report.component-12-KdKT6.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs +0 -186
- package/fesm2022/ngx-t-forms-selection-options-editor.component-Be3QAG_L.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs +0 -187
- package/fesm2022/ngx-t-forms-t-workflow-picker.component-a4f1r8gH.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs +0 -215
- package/fesm2022/ngx-t-forms-validators-config.component-B3j9Dmgu.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-paginated-selection-table-AQZSMmhr.mjs","sources":["../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/paginated-selection-table/elements/paginated-selection-table-reactive-input/paginated-selection-table-reactive-input.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/paginated-selection-table/elements/paginated-selection-table-reactive-input/paginated-selection-table-reactive-input.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/paginated-selection-table/paginated-selection-table.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/paginated-selection-table/paginated-selection-table.html"],"sourcesContent":["import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormatDataPipe } from '../../../../../../shared/pipes/format-Data.pipe';\r\nimport {\r\n DocumentLitsLabelConfigInterfaceValueType,\r\n FormBuilderFunctions,\r\n FormColumnInputs,\r\n InputDataTypes,\r\n InputPipeTypes,\r\n TreeNode,\r\n} from 'ngx-t-forms-types';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { fuzzySearch } from '../../../../../../shared/functions/fuzzyTextSearch';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSort, MatSortModule } from '@angular/material/sort';\r\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs';\r\nimport { returnMappedPathValue } from '../../../../../../services/core/t-form-section-controller/Functions/getValueFromPathMap';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\n\r\n/** Max rows to sample for type inference - balances accuracy vs performance */\r\nconst TYPE_INFER_SAMPLE_SIZE = 5;\r\n\r\ntype InferredColType = DocumentLitsLabelConfigInterfaceValueType | InputDataTypes | InputPipeTypes | undefined;\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-paginated-selection-table-reactive-input',\r\n nextId: 0,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-paginated-selection-table-reactive-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n FormatDataPipe,\r\n MatCardModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n MatCheckboxModule,\r\n MatRadioModule,\r\n ],\r\n templateUrl: './paginated-selection-table-reactive-input.html',\r\n styleUrl: './paginated-selection-table-reactive-input.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: PaginatedSelectionTableReactiveInput }],\r\n})\r\nexport class PaginatedSelectionTableReactiveInput\r\n extends BaseCustomInput<unknown | unknown[]>\r\n implements AfterViewInit, OnDestroy\r\n{\r\n readonly formBuilderFunctions = input<FormBuilderFunctions | undefined>(undefined);\r\n readonly canReload = input<boolean>(false);\r\n readonly loading = input<boolean>(false);\r\n readonly searchPlaceholder = input<string>('Search items…');\r\n readonly emptyMessage = input<string>('No items found');\r\n readonly inputConfig = input<FormColumnInputs | undefined>(undefined);\r\n\r\n readonly reloadData = output<void>();\r\n\r\n readonly searchFormControl = new FormControl('');\r\n readonly dataSource: MatTableDataSource<Record<string, any>> = new MatTableDataSource<Record<string, any>>([]);\r\n\r\n protected readonly sort = viewChild(MatSort);\r\n protected readonly paginator = viewChild(MatPaginator);\r\n\r\n readonly #cdr = inject(ChangeDetectorRef);\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n /** Cached inferred column types from data - recomputed only when data changes */\r\n #inferredColumnTypes: Record<string, InferredColType> = {};\r\n #lastInferredDataRef: Record<string, any>[] | null = null;\r\n #columnsCacheDirty = true;\r\n #cachedColumns: Array<{ key: string; label: string; id?: string; type?: InferredColType }> = [];\r\n #cachedDisplayedColumns: string[] = [];\r\n #cachedSortActiveColumn = '';\r\n #lastInputConfig: FormColumnInputs | undefined;\r\n #loadScheduled = false;\r\n #destroyed = false;\r\n #connectTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor() {\r\n super(\r\n inject(NgControl, { self: true, optional: true }) as NgControl,\r\n inject<ElementRef<HTMLElement>>(ElementRef),\r\n customInputConfig,\r\n );\r\n this.#setupFuzzyFilterPredicate();\r\n this.#setupSelectionFirstSort();\r\n this.#setupSearchSubscription();\r\n\r\n // Replaces the previous @Input setter side-effect: react to inputConfig changes.\r\n effect(() => {\r\n const value = this.inputConfig();\r\n if (_isEqual(this.#lastInputConfig, value)) return;\r\n const prevMatOptions = this.#lastInputConfig?.matOptions?.options;\r\n const nextMatOptions = value?.matOptions?.options;\r\n const matOptionsChanged = !_isEqual(prevMatOptions, nextMatOptions);\r\n this.#lastInputConfig = value;\r\n this.#columnsCacheDirty = true;\r\n if (matOptionsChanged) {\r\n this.#scheduleLoadInputData();\r\n }\r\n });\r\n }\r\n\r\n override get empty(): boolean {\r\n const n = this.value;\r\n if (n === null || n === undefined) return true;\r\n if (this.isMultiSelect) {\r\n return Array.isArray(n) && n.length === 0;\r\n }\r\n return n === '';\r\n }\r\n\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n\r\n get getSelectOptions(): unknown[] {\r\n const cfg = this.inputConfig();\r\n if (!cfg?.matOptions) return [];\r\n if (Array.isArray(cfg.matOptions?.options)) {\r\n return cfg.matOptions?.options || [];\r\n }\r\n return [];\r\n }\r\n\r\n #ensureColumnsCache(): void {\r\n if (!this.#columnsCacheDirty) return;\r\n this.#columnsCacheDirty = false;\r\n this.#cachedColumns = this.#computeColumns();\r\n this.#cachedDisplayedColumns = this.#cachedColumns.map(c => c.key);\r\n this.#cachedSortActiveColumn = this.#cachedDisplayedColumns.find(c => c !== 'icons' && c !== 'actions') ?? '';\r\n }\r\n\r\n #computeColumns(): Array<{ key: string; label: string; id?: string; type?: InferredColType }> {\r\n const cfg = this.inputConfig();\r\n const configColumns = cfg?.paginationSelectionConfig?.columns;\r\n const options = this.getSelectOptions;\r\n let dataColumns: Array<{ key: string; label: string; id?: string; type?: InferredColType }>;\r\n if ((!configColumns || !Array.isArray(configColumns) || configColumns.length === 0) && Array.isArray(options)) {\r\n const allKeys = options.flatMap((option) => Object.keys((option ?? {}) as Record<string, unknown>));\r\n const uniqueKeys = [...new Set(allKeys)].filter(k => k !== 'icons' && k !== 'actions');\r\n dataColumns = uniqueKeys.map(key => ({\r\n key,\r\n label: key,\r\n id: key,\r\n type: this.#inferredColumnTypes[key],\r\n }));\r\n } else {\r\n dataColumns = (configColumns || [])\r\n .filter((c: { key?: string }): c is { key: string } & typeof c =>\r\n typeof c.key === 'string' && c.key !== 'icons' && c.key !== 'actions')\r\n .map((c: { key: string; label?: string; id?: string; type?: InferredColType }) => ({\r\n key: c.key,\r\n label: c.label ?? c.key ?? '',\r\n id: c.id ?? c.key,\r\n type: c.type ?? this.#inferredColumnTypes[c.key],\r\n }));\r\n }\r\n return [\r\n { key: 'icons', label: '', id: 'icons' },\r\n ...dataColumns,\r\n { key: 'actions', label: '', id: 'actions' },\r\n ];\r\n }\r\n\r\n get columns(): Array<{ key: string; label: string; id?: string; type?: InferredColType }> {\r\n this.#ensureColumnsCache();\r\n return this.#cachedColumns;\r\n }\r\n\r\n get displayedColumns(): string[] {\r\n this.#ensureColumnsCache();\r\n return this.#cachedDisplayedColumns;\r\n }\r\n\r\n /** First sortable column for initial matSort state (excludes icons/actions) */\r\n get sortActiveColumn(): string {\r\n this.#ensureColumnsCache();\r\n return this.#cachedSortActiveColumn;\r\n }\r\n\r\n /** Defer data load until after current CD cycle completes (prevents ExpressionChanged errors\r\n * in parent FormSectionStepper when sectionFormErrorMessage changes as form validation updates). */\r\n #scheduleLoadInputData(): void {\r\n if (this.#loadScheduled) return;\r\n this.#loadScheduled = true;\r\n Promise.resolve().then(() => {\r\n this.#loadScheduled = false;\r\n if (!this.#destroyed) this.loadInputData();\r\n });\r\n }\r\n\r\n loadInputData(): void {\r\n const options = this.getSelectOptions;\r\n if (Array.isArray(options) && options.every(option => typeof option === 'object' && option !== null)) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO(phase-4): widen `dataSource` to `Record<string, unknown>` once template column accessors are narrowed.\r\n this.dataSource.data = options as Record<string, any>[];\r\n this.#inferColumnTypesFromData();\r\n this.#attachSortAndPaginatorAfterViewReady();\r\n this.#cdr.markForCheck();\r\n } else {\r\n this.dataSource.data = [];\r\n this.#clearInferredCache();\r\n this.errorMessage = 'Invalid options format';\r\n this.#cdr.markForCheck();\r\n }\r\n }\r\n\r\n /** Connects sort and paginator to dataSource. Deferred because table/paginator are inside @if. */\r\n #attachSortAndPaginatorAfterViewReady(): void {\r\n if (this.#connectTimeoutId != null) return;\r\n this.#connectTimeoutId = setTimeout(() => {\r\n this.#connectTimeoutId = null;\r\n const sortRef = this.sort();\r\n const paginatorRef = this.paginator();\r\n if (sortRef && this.dataSource.sort !== sortRef) {\r\n this.dataSource.sort = sortRef;\r\n }\r\n if (paginatorRef && this.dataSource.paginator !== paginatorRef) {\r\n this.dataSource.paginator = paginatorRef;\r\n }\r\n // Avoid markForCheck() here - it triggers full-tree CD that re-evaluates parent's\r\n // sectionFormErrorMessage mid-cycle, causing ExpressionChangedAfterItHasBeenCheckedError.\r\n // MatTableDataSource propagates sort/paginator changes; view updates on next CD.\r\n }, 0);\r\n }\r\n\r\n /** Clear cached references to prevent memory leaks. */\r\n #clearInferredCache(): void {\r\n this.#inferredColumnTypes = {};\r\n this.#lastInferredDataRef = null;\r\n this.#columnsCacheDirty = true;\r\n }\r\n\r\n /**\r\n * Overrides MatTableDataSource.sortData so selected rows are always rendered\r\n * first, before any sort-ordered unselected rows. This makes selections visible\r\n * on page 1 regardless of how the table is sorted.\r\n */\r\n #setupSelectionFirstSort(): void {\r\n this.dataSource.sortData = (data: Record<string, any>[], sort: MatSort): Record<string, any>[] => {\r\n const selected: Record<string, any>[] = [];\r\n const unselected: Record<string, any>[] = [];\r\n for (const row of data) {\r\n (this.isRowSelected(row) ? selected : unselected).push(row);\r\n }\r\n\r\n if (!sort.active || !sort.direction) {\r\n return [...selected, ...unselected];\r\n }\r\n\r\n const key = sort.active;\r\n const dir = sort.direction === 'asc' ? 1 : -1;\r\n const colType = this.#inferredColumnTypes[key];\r\n\r\n unselected.sort((a, b) => {\r\n const va = a[key];\r\n const vb = b[key];\r\n if (va == null && vb == null) return 0;\r\n if (va == null) return dir;\r\n if (vb == null) return -dir;\r\n return dir * this.#compareColValues(va, vb, colType);\r\n });\r\n\r\n return [...selected, ...unselected];\r\n };\r\n }\r\n\r\n /** Type-aware value comparator used by sortData. Returns negative/zero/positive like Array.sort. */\r\n #compareColValues(va: unknown, vb: unknown, colType: InferredColType): number {\r\n // Explicit number columns: parse to float so \"9\" < \"10\" (not lexicographic)\r\n if (colType === DocumentLitsLabelConfigInterfaceValueType.number) {\r\n const na = parseFloat(String(va));\r\n const nb = parseFloat(String(vb));\r\n if (!Number.isNaN(na) && !Number.isNaN(nb)) return na - nb;\r\n }\r\n // Date columns: compare as timestamps\r\n if (colType === DocumentLitsLabelConfigInterfaceValueType.date) {\r\n const ta = new Date(va as string | number | Date).getTime();\r\n const tb = new Date(vb as string | number | Date).getTime();\r\n if (!Number.isNaN(ta) && !Number.isNaN(tb)) return ta - tb;\r\n }\r\n // Native JS numbers (regardless of inferred type)\r\n if (typeof va === 'number' && typeof vb === 'number') return va - vb;\r\n // Native JS Date instances\r\n if (va instanceof Date && vb instanceof Date) return va.getTime() - vb.getTime();\r\n // Everything else: locale-aware string sort with numeric collation (\"9\" < \"10\")\r\n const sa = typeof va === 'string' ? va : String(va);\r\n const sb = typeof vb === 'string' ? vb : String(vb);\r\n return sa.localeCompare(sb, undefined, { numeric: true, sensitivity: 'base' });\r\n }\r\n\r\n /** Re-sorts the dataSource pipeline so selected rows bubble to the top, then navigates to page 1. */\r\n #bringSelectionToFront(): void {\r\n if (this.dataSource.data.length === 0) return;\r\n // Shallow copy triggers MatTableDataSource to re-run filter → sortData → paginator.\r\n this.dataSource.data = [...this.dataSource.data];\r\n this.dataSource.paginator?.firstPage();\r\n }\r\n\r\n /** Filter predicate using fuzzy search on all stringifiable row values. */\r\n #setupFuzzyFilterPredicate(): void {\r\n this.dataSource.filterPredicate = (row: Record<string, any>, filter: string): boolean => {\r\n const term = filter?.trim();\r\n if (!term) return true;\r\n if (typeof row !== 'object' || row === null) return false;\r\n return Object.values(row).some((value) => {\r\n if (value == null) return false;\r\n const text = typeof value === 'string' ? value : String(value);\r\n return fuzzySearch(term, text);\r\n });\r\n };\r\n }\r\n\r\n #setupSearchSubscription(): void {\r\n this.searchFormControl.valueChanges.pipe(\r\n debounceTime(300),\r\n map((term) => term?.trim() ?? ''),\r\n distinctUntilChanged((a, b) => a === b),\r\n takeUntilDestroyed(this.#destroyRef),\r\n ).subscribe((filter) => {\r\n this.dataSource.filter = filter;\r\n this.dataSource.paginator?.firstPage();\r\n this.#cdr.markForCheck();\r\n });\r\n }\r\n\r\n clearSearch(): void {\r\n this.searchFormControl.setValue('');\r\n }\r\n\r\n /**\r\n * Infers column types from data source by sampling first N rows.\r\n * Cached per data reference to avoid recomputation on every change detection.\r\n */\r\n #inferColumnTypesFromData(): void {\r\n const data = this.dataSource.data;\r\n if (data === this.#lastInferredDataRef) return;\r\n\r\n if (data.length === 0) {\r\n this.#clearInferredCache();\r\n return;\r\n }\r\n this.#lastInferredDataRef = data;\r\n\r\n const sampleSize = Math.min(TYPE_INFER_SAMPLE_SIZE, data.length);\r\n const keys = Object.keys(data[0] ?? {});\r\n\r\n for (const key of keys) {\r\n if (key === 'icons' || key === 'actions') continue;\r\n\r\n let inferred: InferredColType = undefined;\r\n for (let i = 0; i < sampleSize; i++) {\r\n const v = data[i]?.[key];\r\n if (v === null || v === undefined) continue;\r\n inferred = this.#inferValueType(v);\r\n break;\r\n }\r\n this.#inferredColumnTypes[key] = inferred;\r\n }\r\n this.#columnsCacheDirty = true;\r\n }\r\n\r\n /** Lightweight single-value type inference for formatData pipe compatibility */\r\n #inferValueType(v: unknown): InferredColType {\r\n if (typeof v === 'boolean') return InputDataTypes.Boolean;\r\n if (Array.isArray(v)) return InputDataTypes.Array;\r\n if (typeof v === 'object' && v !== null) {\r\n return v instanceof Date ? DocumentLitsLabelConfigInterfaceValueType.date : InputDataTypes.Object;\r\n }\r\n if (typeof v === 'number' && !Number.isNaN(v)) return DocumentLitsLabelConfigInterfaceValueType.number;\r\n if (typeof v === 'string') {\r\n const trimmed = v.trim();\r\n if (trimmed === '') return undefined;\r\n const num = Number(trimmed);\r\n if (!Number.isNaN(num)) return DocumentLitsLabelConfigInterfaceValueType.number;\r\n const d = new Date(v);\r\n if (!Number.isNaN(d.getTime())) return DocumentLitsLabelConfigInterfaceValueType.date;\r\n }\r\n return undefined;\r\n }\r\n\r\n get isMultiSelect(): boolean {\r\n return this.inputConfig()?.allowMultipleSelection ?? false;\r\n }\r\n\r\n get primaryIdentifierKey(): TreeNode[] | string | undefined {\r\n return this.inputConfig()?.paginationSelectionConfig?.primaryIdentifierKey;\r\n }\r\n\r\n /** Returns the row identifier: uses returnMappedPathValue when primaryIdentifierKey is set, else fallback to _id/id. */\r\n getRowId(row: Record<string, any>): unknown {\r\n const pk = this.primaryIdentifierKey;\r\n if (pk != null && pk !== '') {\r\n return returnMappedPathValue(pk as TreeNode[], row);\r\n }\r\n return row['_id'] ?? row['id'];\r\n }\r\n\r\n /** Builds a minimal row object from an id for fallback when the row is not in dataSource (e.g. from radio value). */\r\n #buildFallbackRowFromId(id: unknown): Record<string, any> {\r\n const pk = this.primaryIdentifierKey;\r\n if (!pk || !Array.isArray(pk) || pk.length === 0) {\r\n return { _id: id, id };\r\n }\r\n const obj: Record<string, any> = {};\r\n let current: Record<string, any> = obj;\r\n for (let i = 0; i < pk.length; i++) {\r\n const node = pk[i];\r\n const key = typeof node === 'object' && node != null && node.key != null ? String(node.key) : String(node);\r\n const isLast = i === pk.length - 1;\r\n if (isLast) {\r\n current[key] = id;\r\n } else {\r\n current[key] = {};\r\n current = current[key];\r\n }\r\n }\r\n return obj;\r\n }\r\n\r\n getSelectedIds(): unknown[] {\r\n const v = this.value;\r\n return Array.isArray(v) ? v : (v ? [v] : []);\r\n }\r\n\r\n /** Returns a primitive ID suitable for `[value]` on mat-radio-group, normalizing away object preset values. */\r\n getNormalizedSingleValue(): unknown {\r\n const v = this.value;\r\n if (v == null || Array.isArray(v)) return v;\r\n if (typeof v === 'object') return this.getRowId(v as Record<string, any>);\r\n return v;\r\n }\r\n\r\n isRowSelected(row: Record<string, any>): boolean {\r\n const rowId = this.getRowId(row);\r\n if (rowId == null) return false;\r\n return this.getSelectedIds().some(v => {\r\n if (v == null) return false;\r\n if (v === rowId) return true;\r\n // Preset values may arrive as full row objects instead of bare IDs.\r\n // Extract the ID from the stored object so the comparison still works.\r\n if (typeof v === 'object') {\r\n return this.getRowId(v as Record<string, any>) == rowId;\r\n }\r\n // Handle string/number type coercion (e.g. \"123\" vs 123).\r\n return String(v) === String(rowId);\r\n });\r\n }\r\n\r\n onRadioChange(event: { value: string }): void {\r\n const id = event?.value;\r\n if (id == null) return;\r\n const row = this.dataSource.data.find((r) => this.getRowId(r) == id);\r\n this.selectRow(row ?? this.#buildFallbackRowFromId(id));\r\n }\r\n\r\n /** Handle click on radio: if already selected, deselect (radios don't fire change when re-clicked). */\r\n onRadioClick(row: Record<string, any>, event: MouseEvent): void {\r\n if (this.isRowSelected(row)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.selectRow(row);\r\n }\r\n }\r\n\r\n selectRow(row: Record<string, any>): void {\r\n const id = this.getRowId(row);\r\n if (this.isMultiSelect) {\r\n const ids = [...this.getSelectedIds()];\r\n const idx = ids.indexOf(id);\r\n if (idx >= 0) {\r\n ids.splice(idx, 1);\r\n } else {\r\n ids.push(id);\r\n }\r\n this.value = ids.length ? ids : null;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.#bringSelectionToFront();\r\n this.#cdr.markForCheck();\r\n return;\r\n }\r\n\r\n const isDeselecting = id === this.value;\r\n this.value = isDeselecting ? undefined : id;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.#bringSelectionToFront();\r\n this.#cdr.markForCheck();\r\n }\r\n\r\n override writeValue(value: unknown | unknown[]): void {\r\n super.writeValue(value);\r\n this.#bringSelectionToFront();\r\n this.#cdr.markForCheck();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.#attachSortAndPaginatorAfterViewReady();\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.#destroyed = true;\r\n this.#loadScheduled = false;\r\n if (this.#connectTimeoutId != null) {\r\n clearTimeout(this.#connectTimeoutId);\r\n this.#connectTimeoutId = null;\r\n }\r\n this.#clearInferredCache();\r\n this.dataSource.data = [];\r\n super.ngOnDestroy();\r\n }\r\n\r\n reload(): void {\r\n this.reloadData.emit();\r\n }\r\n}\r\n","\r\n<mat-card class=\"doc-picker-card\">\r\n @if (!inputConfig()?.disabled && !inputConfig()?.readonly) {\r\n <header class=\"doc-picker-header\">\r\n <div class=\"doc-picker-toolbar\">\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"doc-picker-search\">\r\n <input matInput [placeholder]=\"searchPlaceholder()\" [formControl]=\"searchFormControl\"\r\n [attr.aria-label]=\"searchPlaceholder()\">\r\n @if (searchFormControl.value) {\r\n <button mat-icon-button matSuffix (click)=\"clearSearch()\" type=\"button\"\r\n aria-label=\"Clear search\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n } @else {\r\n <mat-icon matSuffix>search</mat-icon>\r\n }\r\n </mat-form-field>\r\n @if (isMultiSelect && getSelectedIds().length > 0) {\r\n <span class=\"doc-picker-selection-badge\" role=\"status\" aria-live=\"polite\">\r\n {{ getSelectedIds().length }} selected\r\n </span>\r\n }\r\n </div>\r\n </header>\r\n }\r\n @if (loading()) {\r\n <div class=\"doc-picker-loading\">\r\n <mat-spinner [diameter]=\"40\" aria-label=\"Loading items\"></mat-spinner>\r\n </div>\r\n } @else {\r\n <div class=\"doc-picker-body\">\r\n @if (!inputConfig()?.disabled && !inputConfig()?.readonly && !value) {\r\n <div class=\"doc-picker-helper\">\r\n <mat-icon class=\"doc-picker-helper-icon\" color=\"primary\">info</mat-icon>\r\n <span><strong>{{ isMultiSelect ? 'Select items' : 'Select an item' }}</strong> — Sort or use pagination to find {{ isMultiSelect ? 'them' : 'it' }}, then {{ isMultiSelect ? 'check the box' : 'select the radio' }} to select {{ isMultiSelect ? 'them' : 'it' }}.</span>\r\n </div>\r\n }\r\n @if (dataSource.filteredData.length === 0) {\r\n <div class=\"doc-picker-empty\">\r\n <mat-icon>folder_open</mat-icon>\r\n <span>{{ emptyMessage() }}</span>\r\n @if (canReload()) {\r\n <button mat-stroked-button color=\"primary\" (click)=\"reload()\" class=\"doc-picker-retry\"\r\n aria-label=\"Retry loading items\">\r\n <mat-icon>refresh</mat-icon>\r\n Retry\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (dataSource.filteredData.length > 0 && columns.length > 0) {\r\n @if (isMultiSelect) {\r\n <div class=\"doc-picker-table-wrapper\">\r\n <table mat-table [dataSource]=\"dataSource\" class=\"doc-picker-table\"\r\n [matSortActive]=\"sortActiveColumn\" matSortDisableClear matSortDirection=\"asc\"\r\n matSort role=\"grid\" aria-label=\"Selection list\">\r\n @for (col of columns; track col.key) {\r\n <ng-container [matColumnDef]=\"col.key\" [stickyEnd]=\"$last\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header\r\n [disabled]=\"col.key === 'icons' || col.key === 'actions'\"\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.doc-picker-col-icons]=\"col.key === 'icons'\"\r\n [class.doc-picker-col-actions]=\"col.key === 'actions'\"\r\n [class.doc-picker-col-text]=\"col.key !== 'icons' && col.key !== 'actions' && col.type !== 'currency' && col.type !== 'number'\"\r\n [class.doc-picker-col-numeric]=\"col.type === 'currency' || col.type === 'number'\">\r\n\r\n @if(col.key === 'actions' && canReload()){\r\n <button mat-icon-button\r\n matTooltip=\"Click to refresh this field.\"\r\n class=\"doc-picker-refresh doc-picker-refresh-spacing\"\r\n (click)=\"reload()\"\r\n aria-label=\"Refresh list\">\r\n <mat-icon class=\"doc-picker-refresh-icon\">sync</mat-icon>\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\"\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.doc-picker-col-icons]=\"col.key === 'icons'\"\r\n [class.doc-picker-col-actions]=\"col.key === 'actions'\"\r\n [class.doc-picker-col-text]=\"col.key !== 'icons' && col.key !== 'actions' && col.type !== 'currency' && col.type !== 'number'\"\r\n [class.doc-picker-col-numeric]=\"col.type === 'currency' || col.type === 'number'\">\r\n @if (col.key === 'icons') {\r\n <mat-icon class=\"doc-picker-row-icon\">description</mat-icon>\r\n } @else if (col.key === 'actions') {\r\n <mat-checkbox\r\n [checked]=\"isRowSelected(row)\"\r\n [disabled]=\"!!inputConfig()?.disabled || !!inputConfig()?.readonly\"\r\n (change)=\"selectRow(row)\"\r\n [matTooltip]=\"isRowSelected(row) ? 'Clear selection' : 'Select ' + (row['reference'] ?? row['name'] ?? 'item')\"\r\n matTooltipPosition=\"below\"\r\n [attr.aria-label]=\"isRowSelected(row) ? 'Clear selection' : 'Select ' + (row['reference'] ?? row['name'] ?? 'item')\">\r\n </mat-checkbox>\r\n } @else {\r\n <span class=\"doc-picker-cell-value doc-picker-cell-text\"\r\n [class.doc-picker-cell-selected]=\"isRowSelected(row)\"\r\n [matTooltip]=\"row[col.key] | formatData:col.type\"\r\n matTooltipPosition=\"above\">\r\n {{ row[col.key] | formatData:col.type }}\r\n </span>\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row class=\"doc-picker-row\" *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.doc-picker-row-selected]=\"isRowSelected(row)\"\r\n [attr.aria-label]=\"'Row: ' + (row['reference'] ?? row['name'] ?? 'item')\"\r\n [attr.aria-selected]=\"isRowSelected(row)\"></tr>\r\n </table>\r\n </div>\r\n } @else {\r\n <mat-radio-group [value]=\"getNormalizedSingleValue()\" (change)=\"onRadioChange($event)\" class=\"doc-picker-radio-group\">\r\n <div class=\"doc-picker-table-wrapper\">\r\n <table mat-table [dataSource]=\"dataSource\" class=\"doc-picker-table\"\r\n [matSortActive]=\"sortActiveColumn\" matSortDisableClear matSortDirection=\"asc\"\r\n matSort role=\"grid\" aria-label=\"Selection list\">\r\n @for (col of columns; track col.key) {\r\n <ng-container [matColumnDef]=\"col.key\" [stickyEnd]=\"$last\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header\r\n [disabled]=\"col.key === 'icons' || col.key === 'actions'\"\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.doc-picker-col-icons]=\"col.key === 'icons'\"\r\n [class.doc-picker-col-actions]=\"col.key === 'actions'\"\r\n [class.doc-picker-col-text]=\"col.key !== 'icons' && col.key !== 'actions' && col.type !== 'currency' && col.type !== 'number'\"\r\n [class.doc-picker-col-numeric]=\"col.type === 'currency' || col.type === 'number'\">\r\n @if (col.key === 'actions' && canReload()) {\r\n <button mat-icon-button\r\n matTooltip=\"Click to refresh this field.\"\r\n class=\"doc-picker-refresh doc-picker-refresh-spacing\"\r\n (click)=\"reload()\"\r\n aria-label=\"Refresh list\">\r\n <mat-icon class=\"doc-picker-refresh-icon\">sync</mat-icon>\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\"\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.doc-picker-col-icons]=\"col.key === 'icons'\"\r\n [class.doc-picker-col-actions]=\"col.key === 'actions'\"\r\n [class.doc-picker-col-text]=\"col.key !== 'icons' && col.key !== 'actions' && col.type !== 'currency' && col.type !== 'number'\"\r\n [class.doc-picker-col-numeric]=\"col.type === 'currency' || col.type === 'number'\">\r\n @if (col.key === 'icons') {\r\n <mat-icon class=\"doc-picker-row-icon\">description</mat-icon>\r\n } @else if (col.key === 'actions') {\r\n <mat-radio-button\r\n [value]=\"getRowId(row)\"\r\n [disabled]=\"!!inputConfig()?.disabled || !!inputConfig()?.readonly\"\r\n (click)=\"onRadioClick(row, $event)\"\r\n [matTooltip]=\"isRowSelected(row) ? 'Clear selection' : 'Select ' + (row['reference'] ?? row['name'] ?? 'item')\"\r\n matTooltipPosition=\"below\"\r\n [attr.aria-label]=\"isRowSelected(row) ? 'Clear selection' : 'Select ' + (row['reference'] ?? row['name'] ?? 'item')\">\r\n </mat-radio-button>\r\n } @else {\r\n <span class=\"doc-picker-cell-value doc-picker-cell-text\"\r\n [class.doc-picker-cell-selected]=\"isRowSelected(row)\"\r\n [matTooltip]=\"row[col.key] | formatData:col.type\"\r\n matTooltipPosition=\"above\">\r\n {{ row[col.key] | formatData:col.type }}\r\n </span>\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row class=\"doc-picker-row\" *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.doc-picker-row-selected]=\"isRowSelected(row)\"\r\n [attr.aria-label]=\"'Row: ' + (row['reference'] ?? row['name'] ?? 'item')\"\r\n [attr.aria-selected]=\"isRowSelected(row)\"></tr>\r\n </table>\r\n </div>\r\n </mat-radio-group>\r\n }\r\n }\r\n </div>\r\n }\r\n @if (!inputConfig()?.disabled && !inputConfig()?.readonly && dataSource.filteredData.length > 0 && !loading()) {\r\n <mat-paginator [pageSizeOptions]=\"[5, 10, 25, 50]\"\r\n [pageSize]=\"5\"\r\n [length]=\"dataSource.filteredData.length\"\r\n showFirstLastButtons\r\n aria-label=\"Selection list pagination\" class=\"doc-picker-paginator\"></mat-paginator>\r\n }\r\n</mat-card>\r\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormGroupDirective, NgForm, ReactiveFormsModule } from '@angular/forms';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport type { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { PaginatedSelectionTableReactiveInput } from './elements/paginated-selection-table-reactive-input/paginated-selection-table-reactive-input';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n/** Wraps a paginated selection-table control inside a `mat-form-field`. */\r\n@Component({\r\n selector: 'lib-paginated-selection-table',\r\n templateUrl: './paginated-selection-table.html',\r\n styleUrl: './paginated-selection-table.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n TFormInputStatusComponent,\r\n PaginatedSelectionTableReactiveInput,\r\n ],\r\n})\r\nexport class PaginatedSelectionTable {\r\n readonly inputConfig = input.required<ITowerStepColumn>();\r\n readonly formGroup = input.required<FormGroup>();\r\n readonly reload = output<void>();\r\n\r\n protected readonly errorMessage = computed(() =>\r\n getInputErrorMessage(this.inputConfig(), this.formGroup()),\r\n );\r\n\r\n protected readonly errorStateMatcher: ErrorStateMatcher = {\r\n isErrorState(control: FormControl | null, _form: FormGroupDirective | NgForm | null): boolean {\r\n return !!(control && control.invalid && (control.dirty || control.touched));\r\n },\r\n };\r\n}\r\n","<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-paginated-selection-table-reactive-input\r\n [inputConfig]=\"inputConfig\"\r\n [disabled]=\"!!inputConfig.disabled\"\r\n [required]=\"inputConfig.required\"\r\n [canReload]=\"!!inputConfig.canReload?.canReload || false\"\r\n (reloadData)=\"inputConfig.canReload.emit()\"\r\n [formControlName]=\"inputConfig.id\"\r\n ></lib-paginated-selection-table-reactive-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.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"],"names":["i3","i4","i6","i7","i9","i12"],"mappings":"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"}
|