ln-20-lib-components 0.0.11 → 0.0.12

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 (50) hide show
  1. package/fesm2022/ln-20-lib-components-selected-items-management.component-xRoZB_NZ.mjs +86 -0
  2. package/fesm2022/ln-20-lib-components-selected-items-management.component-xRoZB_NZ.mjs.map +1 -0
  3. package/fesm2022/ln-20-lib-components.mjs +2364 -57
  4. package/fesm2022/ln-20-lib-components.mjs.map +1 -1
  5. package/lib/components/origin/aminated-container/aminated-container.component.d.ts +6 -0
  6. package/lib/components/origin/disabled-container/disabled-container.component.d.ts +6 -0
  7. package/lib/components/origin/form/components/custom-input/custom-input.component.d.ts +25 -0
  8. package/lib/components/origin/form/components/form-child/form-child.component.d.ts +13 -0
  9. package/lib/components/origin/form/components/inline-input/inline-input.component.d.ts +78 -0
  10. package/lib/components/origin/form/components/inline-input/interfaces/index.d.ts +26 -0
  11. package/lib/components/origin/form/enums/index.d.ts +36 -0
  12. package/lib/components/origin/form/form.component.d.ts +19 -0
  13. package/lib/components/origin/form/index.d.ts +4 -0
  14. package/lib/components/origin/form/interfaces/index.d.ts +58 -0
  15. package/lib/components/origin/http-message/http-message.component.d.ts +10 -0
  16. package/lib/components/origin/http-message/interfaces/index.d.ts +11 -0
  17. package/lib/components/origin/index.d.ts +1 -2
  18. package/lib/components/origin/pick-list/interfaces/index.d.ts +12 -0
  19. package/lib/components/prime-ng/badge/badge-ng.component.d.ts +11 -0
  20. package/lib/components/prime-ng/badge/interfaces/index.d.ts +8 -0
  21. package/lib/components/prime-ng/button-ng/button-ng.component.d.ts +1 -1
  22. package/lib/components/prime-ng/dynamic-dialog/components/base-dialog.component.d.ts +21 -0
  23. package/lib/components/prime-ng/index.d.ts +2 -0
  24. package/lib/components/prime-ng/interfaces/index.d.ts +12 -0
  25. package/lib/components/prime-ng/table-ng/components/selected-items-management/selected-items-management.component.d.ts +17 -0
  26. package/lib/components/prime-ng/table-ng/interfaces/index.d.ts +191 -0
  27. package/lib/components/prime-ng/table-ng/services/table-ng-edit.service.d.ts +17 -0
  28. package/lib/components/prime-ng/table-ng/services/table-ng-general.service.d.ts +7 -0
  29. package/lib/components/prime-ng/table-ng/services/table-ng.service.d.ts +32 -0
  30. package/lib/components/prime-ng/table-ng/table-ng.component.d.ts +162 -0
  31. package/lib/components/prime-ng/toolbar-ng/toolbar-ng.component.d.ts +5 -0
  32. package/lib/pipes/index.d.ts +1 -0
  33. package/lib/pipes/key-to-display-name.pipe.d.ts +7 -0
  34. package/lib/utils/api-error.util.d.ts +58 -0
  35. package/lib/utils/cookie.util.d.ts +37 -0
  36. package/lib/utils/currency.util.d.ts +1 -0
  37. package/lib/utils/date.util.d.ts +3 -0
  38. package/lib/utils/documents.util.d.ts +88 -0
  39. package/lib/utils/id.util.d.ts +1 -0
  40. package/lib/utils/index.d.ts +9 -0
  41. package/lib/utils/number.util.d.ts +2 -0
  42. package/lib/utils/objects.util.d.ts +20 -0
  43. package/lib/utils/prime-ng.util.d.ts +3 -0
  44. package/ln-20-lib-components-0.0.12.tgz +0 -0
  45. package/package.json +1 -1
  46. package/lib/components/origin/button/button.component.d.ts +0 -11
  47. package/lib/components/origin/empty-message/empty-message.component.d.ts +0 -6
  48. package/ln-20-lib-components-0.0.10.tgz +0 -0
  49. package/ln-20-lib-components-0.0.11.tgz +0 -0
  50. package/ln-20-lib-components-0.0.9.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ln-20-lib-components.mjs","sources":["../../../projects/lib-components/src/lib/lib-components.service.ts","../../../projects/lib-components/src/lib/lib-components.component.ts","../../../projects/lib-components/src/lib/components/origin/button/button.component.ts","../../../projects/lib-components/src/lib/components/origin/empty-message/empty-message.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/services/app-button-ng.service.ts","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/button-ng.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/button-ng.component.html","../../../projects/lib-components/src/public-api.ts","../../../projects/lib-components/src/ln-20-lib-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibComponentsService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib-components',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib-components works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponentsComponent {\r\n\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-button',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <button \r\n [class]=\"'lib-button ' + (variant || 'primary')\" \r\n [disabled]=\"disabled\" \r\n (click)=\"onClick.emit()\">\r\n <ng-content></ng-content>\r\n </button>\r\n `,\r\n styles: [`\r\n .lib-button {\r\n padding: 8px 16px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-size: 14px;\r\n transition: opacity 0.2s ease;\r\n }\r\n \r\n .lib-button.primary {\r\n background-color: #007bff;\r\n color: white;\r\n }\r\n \r\n .lib-button.primary:hover:not(:disabled) {\r\n background-color: #0056b3;\r\n }\r\n \r\n .lib-button.secondary {\r\n background-color: #6c757d;\r\n color: white;\r\n }\r\n \r\n .lib-button.secondary:hover:not(:disabled) {\r\n background-color: #545b62;\r\n }\r\n \r\n .lib-button:disabled {\r\n opacity: 0.6;\r\n cursor: not-allowed;\r\n }\r\n `]\r\n})\r\nexport class ButtonComponent implements OnInit {\r\n\r\n @Input() variant: 'primary' | 'secondary' = 'primary';\r\n @Input() disabled: boolean = false;\r\n @Output() onClick = new EventEmitter<void>();\r\n\r\n constructor() {\r\n console.log('ButtonComponent constructor');\r\n }\r\n ngOnInit(): void {\r\n console.log('ButtonComponent ngOnInit');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-empty-message',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"empty-message\">\r\n <p class=\"empty-message-text\">{{ message() }}</p>\r\n </div>\r\n `,\r\n styles: [`\r\n .empty-message {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 2rem;\r\n }\r\n \r\n .empty-message-text {\r\n text-align: center;\r\n color: #6c757d;\r\n margin: 0;\r\n font-size: 1rem;\r\n }\r\n `]\r\n})\r\nexport class EmptyMessageComponent {\r\n message = input<string>('NO DATA AVAILABLE');\r\n}\r\n","import { computed, effect, inject, Injectable, type Signal, signal } from '@angular/core'\r\nimport type { IButtonConfig } from '../interfaces'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppButtonNgService {\r\n private buttonConfig = signal<IButtonConfig>({} as IButtonConfig)\r\n\r\n constructor() {\r\n // Effect para manejar automáticamente la rotación de mensajes\r\n effect(() => {\r\n const config = this.buttonConfig()\r\n if (config.loading && config.loadingMessages && config.loadingMessages.length > 1) {\r\n this.startMessageRotation()\r\n } else {\r\n this.stopMessageRotation()\r\n }\r\n })\r\n }\r\n\r\n setButtonConfig(buttonConfig: IButtonConfig) {\r\n this.buttonConfig.set(buttonConfig)\r\n }\r\n\r\n // Computed público para acceder al label dinámico\r\n public readonly label: Signal<string> = computed(() => {\r\n const config = this.buttonConfig()\r\n\r\n // Si está cargando y tiene mensajes de carga, rotar entre ellos\r\n if (config.loading && config.loadingMessages && config.loadingMessages.length > 0) {\r\n const messages = config.loadingMessages\r\n const index = this.messageIndex() % messages.length // Wrap around\r\n return messages[index]\r\n }\r\n\r\n // Si no está cargando, retornar el label normal\r\n return config.label ? config.label : ''\r\n })\r\n\r\n //#region Loading Messages\r\n private messageIndex = signal(0)\r\n private intervalId?: ReturnType<typeof setInterval>\r\n\r\n private startMessageRotation() {\r\n if (this.intervalId) return\r\n\r\n this.intervalId = setInterval(() => {\r\n this.messageIndex.update(index => index + 1)\r\n }, 6000)\r\n }\r\n\r\n private stopMessageRotation() {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId)\r\n this.intervalId = undefined\r\n this.messageIndex.set(0)\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { CommonModule } from '@angular/common'\r\nimport { Component, effect, inject, model, output } from '@angular/core'\r\nimport { ButtonModule } from 'primeng/button'\r\nimport { TooltipModule } from 'primeng/tooltip'\r\nimport type { IButtonConfig } from './interfaces'\r\nimport { AppButtonNgService } from './services/app-button-ng.service'\r\n\r\n@Component({\r\n selector: 'lib-button-ng',\r\n imports: [\r\n ButtonModule,\r\n TooltipModule,\r\n CommonModule\r\n ],\r\n templateUrl: './button-ng.component.html',\r\n styleUrl: './button-ng.component.scss',\r\n providers: [AppButtonNgService]\r\n})\r\nexport class ButtonNgComponent {\r\n private readonly appButtonNgService = inject(AppButtonNgService)\r\n buttonConfig = model.required<IButtonConfig>()\r\n onClick = output<void>()\r\n\r\n constructor() {\r\n effect(() => {\r\n this.appButtonNgService.setButtonConfig(this.buttonConfig())\r\n })\r\n }\r\n\r\n get label(): string {\r\n return this.appButtonNgService.label()\r\n }\r\n\r\n onClickButton(): void {\r\n if (this.buttonConfig().onClick) {\r\n return\r\n }\r\n this.onClick.emit()\r\n }\r\n}\r\n","@let config = buttonConfig(); @let tooltipConfig = buttonConfig().tooltipConfig;\r\n@if (!config.hideButton) {\r\n <div\r\n [ngClass]=\"{\r\n 'full-width-button': config.fullWidth,\r\n 'full-height-button': config.fullHeight,\r\n 'cursor-pointer': this.onClick\r\n }\"\r\n [class]=\"config.class ?? ''\"\r\n >\r\n <p-button\r\n [label]=\"config.hasTemplate ? undefined : label\"\r\n [icon]=\"config.hasTemplate ? undefined : config.icon\"\r\n [severity]=\"config.hasTemplate ? 'secondary' : config.severity\"\r\n [loading]=\"config.loading || false\"\r\n [disabled]=\"config.disabled || false\"\r\n [rounded]=\"config.rounded || false\"\r\n [raised]=\"config.raised || false\"\r\n [variant]=\"config.hasTemplate ? 'text' : config.variant\"\r\n [badge]=\"config.badge\"\r\n (onClick)=\"config?.onClick?.() ?? onClickButton()\"\r\n [size]=\"config?.size\"\r\n pTooltip=\"{{ tooltipConfig?.pTooltip }}\"\r\n [tooltipPosition]=\"tooltipConfig?.tooltipPosition ?? 'top'\"\r\n [iconPos]=\"config?.iconPos ?? 'left'\"\r\n [ngClass]=\"{\r\n 'cursor-pointer': (config.onClick || config.hasStaticClick) && !config.disabled,\r\n 'cursor-auto': !((config.onClick || config.hasStaticClick) && !config.disabled),\r\n 'no-hover-template': config.hasTemplate\r\n }\"\r\n [outlined]=\"config.outlined || false\"\r\n [text]=\"config.text || false\"\r\n >\r\n @if (config.hasTemplate) {\r\n <ng-content></ng-content>\r\n }\r\n </p-button>\r\n </div>\r\n}\r\n","/*\r\n * Public API Surface of lib-components\r\n\r\nNPM TOKEN:\r\n4f5f941cb6703a2bea326507bd5098aa7dd8224ef4d9b434f6209c73855bf7ac\r\n8b61ac2dab0cf90c13878339c755b09f868b34906ad196a1138433f76f41feb4\r\n37b8f0500846352a33a9d1e2a8504e8a4332cd035a3819d9dc4b2dcdf557c3f0\r\n31f1ccdf0a47736bd3851647d485385323328542c49de9d95498d875e3977f5e\r\nde13d65e8a0357ce9f2e18c899c8e7f6f728181baa031761ecdd7ef5cb166eb2\r\n */\r\n\r\nexport * from './lib/lib-components.service';\r\nexport * from './lib/lib-components.component';\r\nexport * from './lib/components/index';\r\nexport * from './lib/interfaces/index';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ln-20-lib-components.mjs","sources":["../../../projects/lib-components/src/lib/lib-components.service.ts","../../../projects/lib-components/src/lib/lib-components.component.ts","../../../projects/lib-components/src/lib/components/origin/form/enums/index.ts","../../../projects/lib-components/src/lib/components/origin/disabled-container/disabled-container.component.ts","../../../projects/lib-components/src/lib/components/origin/disabled-container/disabled-container.component.html","../../../projects/lib-components/src/lib/components/origin/form/components/custom-input/custom-input.component.ts","../../../projects/lib-components/src/lib/components/origin/form/components/custom-input/custom-input.component.html","../../../projects/lib-components/src/lib/components/origin/form/components/form-child/form-child.component.ts","../../../projects/lib-components/src/lib/components/origin/form/components/form-child/form-child.component.html","../../../projects/lib-components/src/lib/components/origin/http-message/http-message.component.ts","../../../projects/lib-components/src/lib/components/origin/http-message/http-message.component.html","../../../projects/lib-components/src/lib/components/origin/form/form.component.ts","../../../projects/lib-components/src/lib/components/origin/form/form.component.html","../../../projects/lib-components/src/lib/components/origin/form/components/inline-input/inline-input.component.ts","../../../projects/lib-components/src/lib/components/origin/form/components/inline-input/inline-input.component.html","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/services/app-button-ng.service.ts","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/button-ng.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/button-ng/button-ng.component.html","../../../projects/lib-components/src/lib/pipes/key-to-display-name.pipe.ts","../../../projects/lib-components/src/lib/utils/api-error.util.ts","../../../projects/lib-components/src/lib/utils/cookie.util.ts","../../../projects/lib-components/src/lib/utils/currency.util.ts","../../../projects/lib-components/src/lib/utils/date.util.ts","../../../projects/lib-components/src/lib/utils/documents.util.ts","../../../projects/lib-components/src/lib/utils/id.util.ts","../../../projects/lib-components/src/lib/utils/number.util.ts","../../../projects/lib-components/src/lib/utils/objects.util.ts","../../../projects/lib-components/src/lib/utils/prime-ng.util.ts","../../../projects/lib-components/src/lib/components/origin/aminated-container/aminated-container.component.ts","../../../projects/lib-components/src/lib/components/origin/aminated-container/aminated-container.component.html","../../../projects/lib-components/src/lib/components/prime-ng/badge/badge-ng.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/badge/badge-ng.component.html","../../../projects/lib-components/src/lib/components/prime-ng/toolbar-ng/toolbar-ng.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/toolbar-ng/toolbar-ng.component.html","../../../projects/lib-components/src/lib/components/prime-ng/table-ng/services/table-ng-edit.service.ts","../../../projects/lib-components/src/lib/components/prime-ng/table-ng/services/table-ng-general.service.ts","../../../projects/lib-components/src/lib/components/prime-ng/table-ng/services/table-ng.service.ts","../../../projects/lib-components/src/lib/components/prime-ng/table-ng/table-ng.component.ts","../../../projects/lib-components/src/lib/components/prime-ng/table-ng/table-ng.component.html","../../../projects/lib-components/src/public-api.ts","../../../projects/lib-components/src/ln-20-lib-components.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibComponentsService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-lib-components',\r\n imports: [],\r\n template: `\r\n <p>\r\n lib-components works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class LibComponentsComponent {\r\n\r\n}\r\n","export enum ETypeInput {\r\n TEXT = 'text',\r\n PASSWORD = 'password',\r\n EMAIL = 'email',\r\n NUMBER = 'number',\r\n DATE = 'date',\r\n TIME = 'time',\r\n DATETIME_LOCAL = 'datetime-local',\r\n SEARCH = 'search',\r\n TEL = 'tel',\r\n URL = 'url',\r\n COLOR = 'color',\r\n MONTH = 'month',\r\n WEEK = 'week',\r\n FILE = 'file',\r\n CHECKBOX = 'checkbox',\r\n RADIO = 'radio',\r\n RANGE = 'range',\r\n HIDDEN = 'hidden',\r\n TEXTAREA = 'textarea',\r\n SELECT = 'select',\r\n MULTISELECT = 'multiselect',\r\n AUTOCOMPLETE = 'autocomplete',\r\n SWITCH = 'switch',\r\n CALENDAR = 'calendar',\r\n DROPDOWN = 'dropdown',\r\n CHIPS = 'chips',\r\n TOGGLE = 'toggle',\r\n OTP = 'otp',\r\n CURRENCY = 'currency',\r\n KNOB = 'knob',\r\n BADGE = 'badge',\r\n DECIMAL = 'decimal',\r\n IMAGE = 'image',\r\n\r\n COMPONENT = 'component'\r\n}\r\n","import { Component, model } from '@angular/core'\r\n\r\n@Component({\r\n selector: 'app-disabled-container',\r\n imports: [],\r\n templateUrl: './disabled-container.component.html',\r\n styleUrl: './disabled-container.component.scss'\r\n})\r\nexport class DisabledContainerComponent {\r\n disabled = model<boolean>(false)\r\n}\r\n","<fieldset [disabled]=\"disabled()\" class=\"disabled-container\">\r\n <ng-content></ng-content>\r\n</fieldset>\r\n","import { NgClass } from '@angular/common'\r\nimport type { Signal } from '@angular/core'\r\nimport { ChangeDetectionStrategy, Component, computed, forwardRef, input, output } from '@angular/core'\r\nimport type { ControlValueAccessor, FormControl } from '@angular/forms'\r\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms'\r\nimport { CheckboxModule } from 'primeng/checkbox'\r\nimport { DatePickerModule } from 'primeng/datepicker'\r\nimport { IftaLabelModule } from 'primeng/iftalabel'\r\nimport { InputOtpModule } from 'primeng/inputotp'\r\nimport { MultiSelectModule } from 'primeng/multiselect'\r\nimport { SelectModule } from 'primeng/select'\r\nimport { ToggleButtonModule } from 'primeng/togglebutton'\r\nimport { ToggleSwitchModule } from 'primeng/toggleswitch'\r\nimport { TooltipModule } from 'primeng/tooltip'\r\nimport { ETypeInput } from '../../enums'\r\nimport type { IControlConfig } from '../../interfaces'\r\nimport { InputNumberModule } from 'primeng/inputnumber'\r\nimport { TextareaModule } from 'primeng/textarea'\r\nimport { DisabledContainerComponent } from '../../../disabled-container/disabled-container.component'\r\n\r\n@Component({\r\n selector: 'app-custom-input',\r\n imports: [\r\n ReactiveFormsModule,\r\n IftaLabelModule,\r\n NgClass,\r\n DatePickerModule,\r\n CheckboxModule,\r\n MultiSelectModule,\r\n SelectModule,\r\n ToggleButtonModule,\r\n InputOtpModule,\r\n ToggleSwitchModule,\r\n InputNumberModule,\r\n TextareaModule,\r\n DisabledContainerComponent,\r\n TooltipModule,\r\n ],\r\n templateUrl: './custom-input.component.html',\r\n styleUrl: './custom-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CustomInputComponent),\r\n multi: true\r\n }]\r\n})\r\nexport class CustomInputComponent implements ControlValueAccessor {\r\n controlData = input.required<IControlConfig>()\r\n controlUpperName: Signal<string> = computed(() => this.controlData().controlName.toLocaleUpperCase())\r\n showPassword: boolean = false\r\n output = output<IControlConfig>()\r\n onTouched = () => { }\r\n onChange = (_value: any) => { }\r\n\r\n constructor() { }\r\n\r\n writeValue(value: any): void {\r\n if (value !== this.controlData().control.value) {\r\n this.controlData().control.setValue(value, { emitEvent: false })\r\n }\r\n }\r\n\r\n get showLabel(): boolean {\r\n return !this.controlData().hideLabel\r\n }\r\n\r\n get inputTypesEnum(): typeof ETypeInput {\r\n return ETypeInput\r\n }\r\n\r\n onCheckboxChange(event: Event, control: FormControl): void {\r\n const input = event.target as HTMLInputElement\r\n const isChecked = input.checked\r\n control.setValue(isChecked)\r\n }\r\n\r\n registerOnChange(fn: (value: any) => void): void {\r\n this.onChange = fn\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn\r\n }\r\n\r\n // setDisabledState(isDisabled: boolean): void {\r\n // if (isDisabled) {\r\n // this.controlData().control.disable()\r\n // } else {\r\n // this.controlData().control.enable()\r\n // }\r\n // }\r\n\r\n generateUniqueId(baseString: string): string {\r\n const timestamp = new Date().getTime()\r\n const random = Math.random().toString(36).substring(2, 8)\r\n return `${baseString}-${timestamp}-${random}`\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.showPassword = !this.showPassword\r\n }\r\n\r\n onSelectChange(): void {\r\n this.output.emit(this.controlData())\r\n }\r\n}\r\n","@let localControl = controlData().control;\r\n@let placeholder = controlData().label || controlUpperName();\r\n@let name = controlData().controlName;\r\n@let typeInput = controlData().typeInput;\r\n@let readonly = controlData().readonly || false;\r\n@let dateConfig = controlData().dateConfig;\r\n@let multiSelectConfig = controlData().multiSelectConfig;\r\n@let selectConfig = controlData().selectConfig;\r\n@let toggleConfig = controlData().toggleConfig;\r\n@let textareaConfig = controlData().textareaConfig;\r\n@let currencyConfig = controlData().currencyConfig;\r\n<div class=\"flex flex-col gap-1 \">\r\n <app-disabled-container [disabled]=\"readonly\">\r\n\r\n <p style=\"font-size: 12px; letter-spacing: 0.5px;\" class=\"text-sm text-gray-600 dark:text-gray-300 truncate\"\r\n [pTooltip]=\"placeholder\" tooltipPosition=\"top\" [showDelay]=\"300\">\r\n {{ placeholder }}\r\n </p>\r\n @switch (typeInput) {\r\n @case (inputTypesEnum.EMAIL) {\r\n <input \r\n [formControl]=\"localControl\" \r\n (blur)=\"onTouched()\" \r\n pInputText \r\n [id]=\"generateUniqueId(name)\" \r\n [name]=\"name\"\r\n [type]=\"typeInput\"\r\n [readOnly]=\"readonly\" \r\n autocomplete=\"email\" \r\n autocorrect=\"on\" \r\n autocapitalize=\"on\" \r\n spellcheck=\"true\" \r\n [ngClass]=\"{\r\n 'border-red-500 focus:ring-red-500':\r\n localControl.invalid &&\r\n (localControl.dirty || localControl.touched),\r\n 'bg-gray-100 cursor-not-allowed': readonly,\r\n }\"\r\n class=\"custom-input h-12 w-full px-3 py-2 border border-gray-300 dark:border-transparent rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100\" />\r\n }\r\n @case (inputTypesEnum.CURRENCY) {\r\n <p-inputnumber [formControl]=\"localControl\" (blur)=\"onTouched()\" [id]=\"generateUniqueId(name)\" mode=\"currency\"\r\n [currency]=\"currencyConfig?.currency ?? 'USD'\" [locale]=\"currencyConfig?.locale ?? 'es-CO'\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"2\" [readonly]=\"readonly\" [disabled]=\"readonly\" />\r\n }\r\n @case (inputTypesEnum.DATE) {\r\n <app-disabled-container [disabled]=\"readonly\">\r\n <p-datepicker [formControl]=\"localControl\" [selectionMode]=\"dateConfig?.selectionMode || 'single'\"\r\n [maxDate]=\"dateConfig?.maxDate || null\" [minDate]=\"dateConfig?.minDate || null\" class=\"custom-datepicker\"\r\n appendTo=\"body\" />\r\n </app-disabled-container>\r\n }\r\n @case (inputTypesEnum.TOGGLE) {\r\n <div class=\"flex justify-center items-center p-4\">\r\n <p-togglebutton [formControl]=\"localControl\" [onLabel]=\"toggleConfig?.onLabel || 'Si'\"\r\n [offLabel]=\"toggleConfig?.offLabel || 'No'\" class=\"custom-toggle\" />\r\n </div>\r\n }\r\n @case (inputTypesEnum.MULTISELECT) {\r\n <p-multiselect [filter]=\"true\" [options]=\"multiSelectConfig?.options\" [formControl]=\"localControl\"\r\n [optionLabel]=\"multiSelectConfig?.optionLabel ?? 'name'\" placeholder=\"\" [maxSelectedLabels]=\"3\"\r\n class=\"custom-multiselect\" appendTo=\"body\" />\r\n }\r\n @case (inputTypesEnum.SELECT) {\r\n <p-select [filter]=\"true\" [options]=\"selectConfig?.options\" [formControl]=\"localControl\"\r\n [optionLabel]=\"selectConfig?.optionLabel ?? 'name'\" placeholder=\"\" class=\"custom-select\"\r\n (onChange)=\"onSelectChange()\" appendTo=\"body\" [disabled]=\"readonly\" [readonly]=\"readonly\" [styleClass]=\"\r\n (localControl.invalid && (localControl.dirty || localControl.touched) ? 'border-red-500 focus:ring-red-500 ' : '') +\r\n (readonly ? 'bg-gray-100 cursor-not-allowed' : '')\r\n \" />\r\n }\r\n @case (inputTypesEnum.PASSWORD) {\r\n <div class=\"relative\">\r\n <input [readOnly]=\"readonly || false\" [id]=\"generateUniqueId(name)\" [type]=\"showPassword ? 'text' : 'password'\"\r\n autocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"\r\n class=\"custom-password w-full px-3 py-2 border border-gray-300 dark:border-transparent rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 transition-all duration-200\"\r\n aria-describedby=\"password-help\" [formControl]=\"localControl\" />\r\n <button type=\"button\"\r\n class=\"custom-password-toggle absolute inset-y-0 right-0 flex items-center justify-center w-12 h-full text-gray-400 transition-colors duration-200 ease-in-out hover:text-gray-600 focus:outline-none focus:text-gray-600 active:text-gray-700 dark:text-gray-500 dark:hover:text-gray-300 dark:focus:text-gray-300\"\r\n (click)=\"togglePasswordVisibility()\" [attr.aria-label]=\"\r\n showPassword ? 'Ocultar contraseña' : 'Mostrar contraseña'\r\n \">\r\n <i class=\"fas text-lg transition-all duration-200 ease-in-out\" [ngClass]=\"{\r\n 'fa-solid fa-eye': !showPassword,\r\n 'fa-solid fa-eye-slash': showPassword,\r\n }\"></i>\r\n </button>\r\n </div>\r\n }\r\n @case (inputTypesEnum.CHECKBOX) {\r\n <div class=\"flex justify-center items-center p-4\">\r\n <input [id]=\"generateUniqueId(name)\" [readOnly]=\"readonly\" [type]=\"typeInput\" [checked]=\"localControl.value\"\r\n (change)=\"onCheckboxChange($event, localControl)\"\r\n class=\"custom-checkbox h-5 w-5 border-2 border-gray-300 dark:border-transparent rounded focus:ring-2 focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 transition-all duration-200\"\r\n [formControl]=\"localControl\" />\r\n </div>\r\n }\r\n @case (inputTypesEnum.OTP) {\r\n <div class=\"flex justify-center items-center p-4\">\r\n <p-inputotp [id]=\"generateUniqueId(name)\" (onBlur)=\"onTouched()\" [mask]=\"controlData().otpConfig?.mask ?? false\"\r\n [length]=\"controlData().otpConfig?.length ?? 6\" [integerOnly]=\"controlData().otpConfig?.integerOnly ?? false\"\r\n class=\"custom-otp border-2 border-gray-300 dark:border-transparent rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 transition-all duration-200\"\r\n [formControl]=\"localControl\" />\r\n </div>\r\n }\r\n @case (inputTypesEnum.SWITCH) {\r\n <div class=\"flex justify-center items-center p-4\">\r\n <p-toggleswitch [id]=\"generateUniqueId(name)\" [formControl]=\"localControl\"\r\n class=\"custom-switch border-2 border-gray-300 dark:border-transparent rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 bg-white dark:bg-gray-700 transition-all duration-200\"\r\n (change)=\"onCheckboxChange($event, localControl)\">\r\n <ng-template #handle let-checked=\"checked\">\r\n <span class=\"text-xs bg-gray-100 dark:bg-gray-600 text-gray-800 dark:text-gray-200 rounded-full px-1\">\r\n @if (checked) {\r\n Si\r\n }\r\n @else {\r\n No\r\n }\r\n </span>\r\n </ng-template>\r\n </p-toggleswitch>\r\n </div>\r\n }\r\n @case (inputTypesEnum.DECIMAL) {\r\n <p-inputnumber [formControl]=\"localControl\" (blur)=\"onTouched()\" [id]=\"generateUniqueId(name)\" mode=\"decimal\"\r\n [locale]=\"'es-CO'\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"2\" [readonly]=\"readonly\" [disabled]=\"readonly\" />\r\n }\r\n @case (inputTypesEnum.TEXTAREA) {\r\n <textarea pTextarea [formControl]=\"localControl\" [rows]=\"textareaConfig?.rows ?? 3\"\r\n [cols]=\"textareaConfig?.cols ?? 30\" [autoResize]=\"true\" [variant]=\"textareaConfig?.variant ?? 'outlined'\"\r\n (blur)=\"onTouched()\" [id]=\"generateUniqueId(name)\" [readonly]=\"readonly\" autocomplete=\"off\" autocorrect=\"off\"\r\n autocapitalize=\"off\" spellcheck=\"false\"\r\n class=\"custom-textarea w-full px-3 py-2 border border-gray-300 dark:border-transparent rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100\"></textarea>\r\n }\r\n @default {\r\n <input [formControl]=\"localControl\" (blur)=\"onTouched()\" pInputText [id]=\"generateUniqueId(name)\" [type]=\"typeInput\"\r\n [readOnly]=\"readonly\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" [ngClass]=\"{\r\n 'border-red-500 focus:ring-red-500':\r\n localControl.invalid &&\r\n (localControl.dirty || localControl.touched),\r\n 'bg-gray-100 cursor-not-allowed': readonly,\r\n }\"\r\n class=\"custom-input h-12 w-full px-3 py-2 border border-gray-300 dark:border-transparent rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-all duration-200 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100\" />\r\n }\r\n }\r\n </app-disabled-container>\r\n\r\n</div>\r\n\r\n@if (localControl.invalid && (localControl.dirty || localControl.touched)) {\r\n<div class=\"custom-error mt-1 text-sm text-red-600 dark:text-red-400\">\r\n @if (localControl.errors?.[\"required\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{\r\n 'El campo es requerido' }}</span>\r\n }\r\n @if (localControl.errors?.[\"min\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{ 'El valor mínimo es de ' + localControl.errors?.[\"min\"].min.toFixed(2) }}</span>\r\n }\r\n @if (localControl.errors?.[\"max\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{ 'El valor máximo es de ' + localControl.errors?.[\"max\"].max.toFixed(2) }}</span>\r\n }\r\n @if (localControl.errors?.[\"minlength\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{\r\n 'El largo mínimo es de ' + localControl.errors?.[\"minlength\"].requiredLength\r\n }}</span>\r\n }\r\n @if (localControl.errors?.[\"maxlength\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{\r\n 'El largo máximo es de ' + localControl.errors?.[\"maxlength\"].requiredLength\r\n }}</span>\r\n }\r\n @if (localControl.errors?.[\"email\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{\r\n 'El correo electrónico no es válido' }}</span>\r\n }\r\n @if (localControl.errors?.[\"pattern\"]) {\r\n <span style=\"font-size: 0.675rem; font-style: italic; letter-spacing: 0.02em;\">{{\r\n 'El formato no es válido' }}</span>\r\n }\r\n</div>\r\n}","import { CommonModule } from '@angular/common'\r\nimport { Component, input, output } from '@angular/core'\r\nimport type { FormGroup } from '@angular/forms'\r\nimport { ReactiveFormsModule } from '@angular/forms'\r\nimport type { IControlConfig } from '../../interfaces'\r\nimport { CustomInputComponent } from '../custom-input/custom-input.component'\r\n\r\n@Component({\r\n selector: 'app-form-child',\r\n imports: [\r\n ReactiveFormsModule,\r\n CommonModule,\r\n CustomInputComponent\r\n ],\r\n templateUrl: './form-child.component.html',\r\n styleUrl: './form-child.component.scss'\r\n})\r\nexport class FormChildComponent {\r\n controlsData = input.required<IControlConfig[]>()\r\n formGroup = input.required<FormGroup>()\r\n formSubmit = output<FormGroup>()\r\n\r\n constructor() {\r\n }\r\n\r\n submit() {\r\n this.formSubmit.emit(this.formGroup())\r\n }\r\n\r\n onSelectChange(controlConfig: IControlConfig): void {\r\n controlConfig.selectConfig?.change?.(controlConfig)\r\n }\r\n}\r\n","@let controls = controlsData();\r\n\r\n<form\r\n [formGroup]=\"formGroup()\"\r\n (submit)=\"submit()\"\r\n autocomplete=\"off\"\r\n class=\"grid grid-cols-12 gap-3\"\r\n>\r\n @for (controlData of controls; track controlData.controlName) {\r\n <div\r\n class=\"flex flex-col w-full\"\r\n [ngClass]=\"{\r\n 'col-span-1': !controlData.colSpan,\r\n 'col-span-2': controlData.colSpan === 2,\r\n 'col-span-3': controlData.colSpan === 3,\r\n 'col-span-4': controlData.colSpan === 4,\r\n 'col-span-5': controlData.colSpan === 5,\r\n 'col-span-6': controlData.colSpan === 6,\r\n 'col-span-7': controlData.colSpan === 7,\r\n 'col-span-8': controlData.colSpan === 8,\r\n 'col-span-9': controlData.colSpan === 9,\r\n 'col-span-10': controlData.colSpan === 10,\r\n 'col-span-11': controlData.colSpan === 11,\r\n 'col-span-12': controlData.colSpan === 12,\r\n }\"\r\n >\r\n <app-custom-input\r\n [id]=\"controlData.controlName\"\r\n [controlData]=\"controlData\"\r\n [formControlName]=\"controlData.controlName\"\r\n class=\"w-full\"\r\n (output)=\"onSelectChange($event)\"\r\n >\r\n </app-custom-input>\r\n </div>\r\n }\r\n</form>\r\n","import { Component, model } from '@angular/core'\r\nimport type { IHttpMessage } from './interfaces'\r\n\r\n@Component({\r\n selector: 'app-http-message',\r\n imports: [],\r\n templateUrl: './http-message.component.html',\r\n styleUrl: './http-message.component.scss'\r\n})\r\nexport class HttpMessageComponent {\r\n httpMessage = model<IHttpMessage | undefined>()\r\n\r\n clearMessage(): void {\r\n this.httpMessage.set(undefined)\r\n }\r\n\r\n get isError(): boolean {\r\n const message = this.httpMessage()\r\n return message?.type === 'error'\r\n }\r\n\r\n get isSuccess(): boolean {\r\n const message = this.httpMessage()\r\n return message?.type === 'success'\r\n }\r\n}\r\n","@if (httpMessage()) {\r\n @if (isError) {\r\n <div class=\"group relative mt-3 p-3 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 transition-all duration-200 hover:shadow-md\">\r\n <div class=\"flex items-start gap-2\">\r\n <svg class=\"w-5 h-5 text-red-500 dark:text-red-400 flex-shrink-0 mt-0.5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n <p class=\"flex-1 text-red-700 dark:text-red-300 text-sm font-medium leading-relaxed\">\r\n {{ httpMessage()?.message }}\r\n </p>\r\n <button\r\n type=\"button\"\r\n (click)=\"clearMessage()\"\r\n class=\"opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-red-500 dark:text-red-400 hover:text-red-700 dark:hover:text-red-200 p-1 rounded hover:bg-red-100 dark:hover:bg-red-800/30\"\r\n aria-label=\"Cerrar mensaje de error\"\r\n >\r\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (isSuccess) {\r\n <div class=\"group relative mt-3 p-3 rounded-lg bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 transition-all duration-200 hover:shadow-md\">\r\n <div class=\"flex items-start gap-2\">\r\n <svg class=\"w-5 h-5 text-green-500 dark:text-green-400 flex-shrink-0 mt-0.5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\r\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\" />\r\n </svg>\r\n <p class=\"flex-1 text-green-700 dark:text-green-300 text-sm font-medium leading-relaxed\">\r\n {{ httpMessage()?.message }}\r\n </p>\r\n <button\r\n type=\"button\"\r\n (click)=\"clearMessage()\"\r\n class=\"opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-green-500 dark:text-green-400 hover:text-green-700 dark:hover:text-green-200 p-1 rounded hover:bg-green-100 dark:hover:bg-green-800/30\"\r\n aria-label=\"Cerrar mensaje de éxito\"\r\n >\r\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, effect, inject, input, model, output } from '@angular/core'\r\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop'\r\nimport type { FormGroup } from '@angular/forms'\r\nimport { ReactiveFormsModule } from '@angular/forms'\r\nimport { debounceTime, filter, map, switchMap } from 'rxjs'\r\nimport { FormChildComponent } from './components/form-child/form-child.component'\r\nimport type { IControlConfig, IFormConfig } from './interfaces'\r\nimport { ETypeInput } from './enums'\r\nimport { HttpMessageComponent } from '../http-message/http-message.component'\r\nimport type { IHttpMessage } from '../http-message/interfaces'\r\nimport { IPrimeNgSelection } from '../../prime-ng/interfaces'\r\n@Component({\r\n selector: 'app-form',\r\n imports: [\r\n ReactiveFormsModule,\r\n FormChildComponent,\r\n HttpMessageComponent\r\n ],\r\n templateUrl: './form.component.html',\r\n styleUrl: './form.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormComponent {\r\n formGroup = model.required<FormGroup>()\r\n controls = input.required<IControlConfig[]>()\r\n formConfig = input<IFormConfig>()\r\n httpMessage = model<IHttpMessage>()\r\n\r\n formSubmit = output<FormGroup>()\r\n formChanges = output<FormGroup>()\r\n formChangesDebounced = output<FormGroup>()\r\n\r\n constructor() {\r\n effect(() => {\r\n const controls = this.controls()\r\n const controlsNames = this.controls().map((controlConfig) => controlConfig.controlName)\r\n const controlsToDelete = Object.keys(this.formGroup().controls).filter(control => !controlsNames.includes(control))\r\n\r\n controls.forEach((controlData: IControlConfig) => {\r\n this.formGroup.update((formGroup: FormGroup) => {\r\n if (formGroup.contains(controlData.controlName)) {\r\n formGroup.setControl(controlData.controlName, controlData.control)\r\n } else {\r\n formGroup.addControl(controlData.controlName, controlData.control)\r\n }\r\n controlsToDelete.forEach(controlName => {\r\n formGroup.removeControl(controlName)\r\n })\r\n\r\n return formGroup\r\n })\r\n })\r\n\r\n })\r\n\r\n effect(() => {\r\n const controlsDataTypeSelect: IControlConfig[] = this.controls().filter((controlData: IControlConfig) => controlData.typeInput === ETypeInput.SELECT)\r\n controlsDataTypeSelect.forEach((controlData: IControlConfig) => {\r\n const control = this.formGroup().get(controlData.controlName)\r\n const controlValue: IPrimeNgSelection | undefined = control?.value\r\n if (controlValue) {\r\n const options = controlData.selectConfig?.options ?? []\r\n const optionSelected = options.find((option) => {\r\n return option.code === controlValue.code\r\n })\r\n if (optionSelected) {\r\n control?.setValue(optionSelected)\r\n }\r\n }\r\n })\r\n })\r\n\r\n effect(() => {\r\n this.formGroup().valueChanges.subscribe(() => {\r\n this.formChanges.emit(this.formGroup())\r\n })\r\n })\r\n\r\n const fg$ = toObservable(this.formGroup)\r\n\r\n fg$.pipe(\r\n switchMap((fg) =>\r\n fg.valueChanges.pipe(\r\n debounceTime(650),\r\n filter(() => this.anyInteracted(fg)),\r\n map(() => fg)\r\n )\r\n ),\r\n takeUntilDestroyed()\r\n )\r\n .subscribe(() => this.formChangesDebounced.emit(this.formGroup()))\r\n }\r\n\r\n\r\n\r\n anyInteracted(formGroup: FormGroup): boolean {\r\n return Object.values(formGroup.controls).some(control => control.touched || control.dirty)\r\n }\r\n\r\n submit(formGroup: FormGroup): void {\r\n this.formSubmit.emit(formGroup)\r\n }\r\n\r\n clearHttpMessage(): void {\r\n this.httpMessage.set(undefined)\r\n }\r\n}\r\n","<div class=\"w-full p-2 rounded-lg\" [style.backgroundColor]=\"formConfig()?.backgroundColor || 'transparent'\">\r\n <app-form-child [controlsData]=\"controls()\" [formGroup]=\"formGroup()\" (formSubmit)=\"submit($event)\">\r\n </app-form-child>\r\n @if (httpMessage()) {\r\n <app-http-message [(httpMessage)]=\"httpMessage\"></app-http-message>\r\n }\r\n</div>","import type { Signal, OnDestroy, WritableSignal, OnInit, QueryList } from '@angular/core'\r\nimport { ChangeDetectionStrategy, Component, computed, effect, forwardRef, input, model, output, signal, ContentChildren } from '@angular/core'\r\nimport { FormsModule, NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms'\r\nimport { DatePickerModule } from 'primeng/datepicker'\r\nimport { InputTextModule } from 'primeng/inputtext'\r\nimport { MultiSelectModule } from 'primeng/multiselect'\r\nimport { SelectModule } from 'primeng/select'\r\nimport { ETypeInput } from '../../enums'\r\nimport type { IKnobConfig, InlineControlConfig } from './interfaces/index'\r\nimport { InputMaskModule } from 'primeng/inputmask'\r\nimport { InputNumberModule } from 'primeng/inputnumber'\r\nimport { InputOtpModule } from 'primeng/inputotp'\r\nimport { KnobModule } from 'primeng/knob'\r\nimport { TextareaModule } from 'primeng/textarea'\r\nimport { ChipModule } from 'primeng/chip'\r\nimport { CommonModule } from '@angular/common'\r\nimport { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop'\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs'\r\nimport type { PrimeTemplate as PrimeTemplateType } from 'primeng/api'\r\nimport { PrimeTemplate } from 'primeng/api'\r\nimport { IPrimeNgSelection } from '../../../../prime-ng/interfaces'\r\n\r\n@Component({\r\n selector: 'app-inline-input',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n InputTextModule,\r\n DatePickerModule,\r\n SelectModule,\r\n MultiSelectModule,\r\n InputMaskModule,\r\n InputNumberModule,\r\n InputOtpModule,\r\n KnobModule,\r\n TextareaModule,\r\n ChipModule,\r\n CommonModule\r\n ],\r\n templateUrl: './inline-input.component.html',\r\n styleUrl: './inline-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InlineInputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InlineInputComponent<T = string | number | boolean | null> implements ControlValueAccessor, OnDestroy, OnInit {\r\n config = input<InlineControlConfig>({ typeInput: ETypeInput.TEXT })\r\n value = model<T | null>(null)\r\n outputValue = output<T>()\r\n outputBlur = output<T>()\r\n outputDebounced = output<T>()\r\n\r\n // Capturar templates proyectados desde el componente padre\r\n @ContentChildren(PrimeTemplate) templates!: QueryList<PrimeTemplateType>\r\n\r\n // Para el manejo de chips\r\n chips: string[] = []\r\n currentInput = ''\r\n showDuplicateMessage = false\r\n duplicateChips: string[] = []\r\n duplicateMessageTimer: ReturnType<typeof setTimeout> | null = null\r\n\r\n constructor() {\r\n effect(() => {\r\n this.outputValue.emit(this.value() as T)\r\n })\r\n\r\n const value$ = toObservable(this.value)\r\n value$\r\n .pipe(\r\n debounceTime(300), // <- adjust ms here\r\n distinctUntilChanged(), // avoid repeats for same value\r\n takeUntilDestroyed() // auto-cleanup on destroy\r\n )\r\n .subscribe(v => this.outputDebounced.emit(v as T))\r\n\r\n effect(() => {\r\n this.valueSelect.update((_prev) => {\r\n const options = this.config()?.selectConfig?.options\r\n const currentValue = this.value()\r\n if (this.isSelection(currentValue)) return currentValue\r\n if (currentValue === null || currentValue === undefined) return undefined\r\n return options?.find(option => option.code === currentValue)\r\n })\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n onChange: (value: any) => void = () => { }\r\n onTouched: () => void = () => { }\r\n\r\n writeValue(value: string | number | boolean | null): void {\r\n this.value.set(value as T)\r\n // Si es tipo CHIPS, inicializar los chips desde el valor\r\n if (this.type === ETypeInput.CHIPS && typeof value === 'string') {\r\n this.chips = value ? value.split(' ').filter(chip => chip.trim() !== '') : []\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: any) => void): void {\r\n this.onChange = fn\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn\r\n }\r\n\r\n onChangeValue(value: string | number | boolean | null | IPrimeNgSelection<string | boolean>) {\r\n this.value.set(value as T)\r\n this.onChange(value)\r\n }\r\n\r\n onBlur() {\r\n this.onTouched()\r\n this.outputBlur.emit(this.value() as T)\r\n }\r\n\r\n /**\r\n * Maneja eventos de teclado para prevenir la navegación de PrimeNG Table\r\n * cuando se usan las flechas izquierda/derecha dentro del input\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n // Verificar si son teclas de flecha izquierda o derecha\r\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\r\n // Detener la propagación del evento hacia el table\r\n event.stopPropagation()\r\n }\r\n }\r\n\r\n private isSelection(value: unknown): value is IPrimeNgSelection<string | boolean> {\r\n return !!value && typeof value === 'object' && 'code' in (value as Record<string, unknown>) && 'name' in (value as Record<string, unknown>)\r\n }\r\n\r\n valueSelect: WritableSignal<IPrimeNgSelection<string | boolean> | undefined> = signal<IPrimeNgSelection<string | boolean> | undefined>(undefined)\r\n public setValueSelect(value: IPrimeNgSelection<string | boolean> | undefined) {\r\n this.valueSelect.set(value)\r\n }\r\n\r\n get type(): ETypeInput {\r\n return this.config()?.typeInput ?? ETypeInput.TEXT\r\n }\r\n\r\n get ETypeInput(): typeof ETypeInput {\r\n return ETypeInput\r\n }\r\n\r\n get duplicatesText(): string {\r\n return this.duplicateChips.join(', ')\r\n }\r\n\r\n get currency(): string {\r\n return this.config()?.currencyConfig?.currency ?? 'COP'\r\n }\r\n\r\n get locale(): string {\r\n return this.config()?.currencyConfig?.locale ?? 'es-CO'\r\n }\r\n\r\n get minFractionDigits(): number {\r\n return this.config()?.currencyConfig?.minFractionDigits ?? 2\r\n }\r\n\r\n get maxFractionDigits(): number {\r\n return this.config()?.currencyConfig?.maxFractionDigits ?? 2\r\n }\r\n\r\n protected knobValueInput: Signal<number> = computed(() => {\r\n let response: number = this.value() as number\r\n const knobConfig: IKnobConfig = this.config()?.knobConfig ?? { min: 0, max: 100, step: 1 }\r\n response = parseInt(this.value() as string) ?? 0\r\n if (response < (knobConfig?.min ?? 0)) {\r\n response = knobConfig.min ?? 0\r\n }\r\n if (response > (knobConfig?.max ?? 100)) {\r\n response = knobConfig.max ?? 100\r\n }\r\n return response\r\n })\r\n\r\n protected knobValueTemplate: Signal<string> = computed(() => {\r\n return this.config()?.knobConfig?.valueTemplate ?? ''\r\n })\r\n\r\n // Métodos para manejo de chips\r\n onChipInputChange(event: Event): void {\r\n const target = event.target as HTMLInputElement\r\n this.currentInput = target.value\r\n }\r\n\r\n onChipKeydown(event: KeyboardEvent): void {\r\n if (event.key === ' ' || event.key === 'Enter') {\r\n event.preventDefault()\r\n this.addChip()\r\n } else if (event.key === 'Backspace' && this.currentInput === '' && this.chips.length > 0) {\r\n // Si no hay texto y hay chips, eliminar el último chip\r\n this.removeChip(this.chips.length - 1)\r\n }\r\n // No interceptar las flechas aquí ya que se maneja en onKeyDown\r\n }\r\n\r\n onChipPaste(event: ClipboardEvent): void {\r\n event.preventDefault()\r\n const pastedText = event.clipboardData?.getData('text') || ''\r\n this.processPastedText(pastedText)\r\n }\r\n\r\n addChip(): void {\r\n const trimmedValue = this.currentInput.trim()\r\n if (trimmedValue) {\r\n if (this.chips.includes(trimmedValue)) {\r\n // Mostrar mensaje de duplicado con el chip específico\r\n this.duplicateChips = [trimmedValue]\r\n this.showDuplicateAlert()\r\n } else {\r\n this.chips.push(trimmedValue)\r\n this.currentInput = ''\r\n this.updateChipsValue()\r\n this.hideDuplicateAlert()\r\n }\r\n }\r\n }\r\n\r\n removeChip(index: number): void {\r\n this.chips.splice(index, 1)\r\n this.updateChipsValue()\r\n }\r\n\r\n private updateChipsValue(): void {\r\n const chipsValue = this.chips.join(' ')\r\n this.value.set(chipsValue as T)\r\n this.onChange(chipsValue)\r\n }\r\n\r\n private showDuplicateAlert(): void {\r\n this.showDuplicateMessage = true\r\n // Limpiar timer anterior si existe\r\n if (this.duplicateMessageTimer) {\r\n clearTimeout(this.duplicateMessageTimer)\r\n }\r\n // Ocultar mensaje después de 3 segundos\r\n this.duplicateMessageTimer = setTimeout(() => {\r\n this.hideDuplicateAlert()\r\n }, 3000)\r\n }\r\n\r\n private hideDuplicateAlert(): void {\r\n this.showDuplicateMessage = false\r\n this.duplicateChips = []\r\n if (this.duplicateMessageTimer) {\r\n clearTimeout(this.duplicateMessageTimer)\r\n this.duplicateMessageTimer = null\r\n }\r\n }\r\n\r\n private processPastedText(text: string): void {\r\n // Dividir el texto por espacios y filtrar elementos vacíos\r\n const newChips = text\r\n .split(/\\s+/) // Dividir por uno o más espacios\r\n .map(chip => chip.trim()) // Limpiar espacios en cada elemento\r\n .filter(chip => chip !== '') // Filtrar elementos vacíos\r\n\r\n const foundDuplicates: string[] = []\r\n let addedChips = 0\r\n\r\n // Agregar cada chip nuevo y recopilar duplicados\r\n newChips.forEach(chipText => {\r\n if (!this.chips.includes(chipText)) {\r\n this.chips.push(chipText)\r\n addedChips++\r\n } else {\r\n // Solo agregar a duplicados si no está ya en la lista\r\n if (!foundDuplicates.includes(chipText)) {\r\n foundDuplicates.push(chipText)\r\n }\r\n }\r\n })\r\n\r\n // Limpiar el input actual\r\n this.currentInput = ''\r\n\r\n // Actualizar el valor si se agregaron chips\r\n if (addedChips > 0) {\r\n this.updateChipsValue()\r\n }\r\n\r\n // Mostrar alerta si hubo duplicados\r\n if (foundDuplicates.length > 0) {\r\n this.duplicateChips = foundDuplicates\r\n this.showDuplicateAlert()\r\n } else {\r\n this.hideDuplicateAlert()\r\n }\r\n }\r\n\r\n /**\r\n * Método público para establecer chips desde un array externo\r\n * @param chipsArray Array de strings que representan las chips\r\n */\r\n setChipsFromArray(chipsArray: string[]): void {\r\n if (!Array.isArray(chipsArray)) {\r\n console.warn('setChipsFromArray: El parámetro debe ser un array de strings')\r\n return\r\n }\r\n\r\n // Filtrar elementos válidos (strings no vacíos)\r\n const validChips = chipsArray\r\n .filter(chip => typeof chip === 'string' && chip.trim() !== '')\r\n .map(chip => chip.trim())\r\n\r\n // Actualizar el array de chips\r\n this.chips = [...validChips]\r\n\r\n // Limpiar el input actual\r\n this.currentInput = ''\r\n\r\n // Actualizar el valor del componente\r\n this.updateChipsValue()\r\n\r\n // Ocultar cualquier mensaje de duplicado\r\n this.hideDuplicateAlert()\r\n }\r\n\r\n /**\r\n * Método público para obtener las chips actuales como array\r\n * @returns Array de strings con las chips actuales\r\n */\r\n getChipsAsArray(): string[] {\r\n return [...this.chips]\r\n }\r\n\r\n /**\r\n * Método público para limpiar todas las chips\r\n */\r\n clearAllChips(): void {\r\n this.chips = []\r\n this.currentInput = ''\r\n this.updateChipsValue()\r\n this.hideDuplicateAlert()\r\n }\r\n\r\n /**\r\n * Método público para agregar múltiples chips desde un array\r\n * Evita duplicados y muestra mensajes de alerta si es necesario\r\n * @param chipsArray Array de strings a agregar\r\n */\r\n addChipsFromArray(chipsArray: string[]): void {\r\n if (!Array.isArray(chipsArray)) {\r\n console.warn('addChipsFromArray: El parámetro debe ser un array de strings')\r\n return\r\n }\r\n\r\n // Filtrar elementos válidos\r\n const validChips = chipsArray\r\n .filter(chip => typeof chip === 'string' && chip.trim() !== '')\r\n .map(chip => chip.trim())\r\n\r\n const foundDuplicates: string[] = []\r\n let addedChips = 0\r\n\r\n // Agregar cada chip nuevo y recopilar duplicados\r\n validChips.forEach(chipText => {\r\n if (!this.chips.includes(chipText)) {\r\n this.chips.push(chipText)\r\n addedChips++\r\n } else {\r\n // Solo agregar a duplicados si no está ya en la lista\r\n if (!foundDuplicates.includes(chipText)) {\r\n foundDuplicates.push(chipText)\r\n }\r\n }\r\n })\r\n\r\n // Actualizar el valor si se agregaron chips\r\n if (addedChips > 0) {\r\n this.updateChipsValue()\r\n }\r\n\r\n // Mostrar alerta si hubo duplicados\r\n if (foundDuplicates.length > 0) {\r\n this.duplicateChips = foundDuplicates\r\n this.showDuplicateAlert()\r\n } else {\r\n this.hideDuplicateAlert()\r\n }\r\n }\r\n\r\n // Limpiar timer al destruir el componente\r\n ngOnDestroy(): void {\r\n if (this.duplicateMessageTimer) {\r\n clearTimeout(this.duplicateMessageTimer)\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n\r\n","@let valueInput = value();\r\n@let isDisabled = config().isDisabled ?? false;\r\n@let knobConfig = config().knobConfig;\r\n@let textareaConfig = config().textareaConfig;\r\n@let dateConfig = config().dateConfig;\r\n\r\n@switch (type) {\r\n@case (ETypeInput.CURRENCY) {\r\n<p-inputnumber [ngModel]=\"valueInput\" (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\" mode=\"currency\" [currency]=\"currency\" [locale]=\"locale\"\r\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" class=\"w-full\"\r\n [disabled]=\"isDisabled\" />\r\n}\r\n@case (ETypeInput.DECIMAL) {\r\n<p-inputnumber [ngModel]=\"valueInput\" (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\" mode=\"decimal\" [locale]=\"locale\" [minFractionDigits]=\"2\" [maxFractionDigits]=\"2\"\r\n [useGrouping]=\"true\" class=\"w-full\" [disabled]=\"isDisabled\" />\r\n}\r\n@case (ETypeInput.DATE) {\r\n<p-datepicker [ngModel]=\"valueInput\" appendTo=\"body\" (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\" class=\"w-full\" [disabled]=\"isDisabled\" [maxDate]=\"dateConfig?.maxDate || null\"\r\n [minDate]=\"dateConfig?.minDate || null\" [selectionMode]=\"dateConfig?.selectionMode || 'single'\" />\r\n}\r\n@case (ETypeInput.DATETIME_LOCAL) {\r\n<p-datepicker [ngModel]=\"valueInput\" appendTo=\"body\" (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\" class=\"w-full\" [showTime]=\"true\" [hourFormat]=\"'24'\" [disabled]=\"isDisabled\"\r\n [maxDate]=\"dateConfig?.maxDate || null\" [minDate]=\"dateConfig?.minDate || null\" [selectionMode]=\"dateConfig?.selectionMode || 'single'\" />\r\n}\r\n@case (ETypeInput.SELECT) {\r\n<p-select [options]=\"config().selectConfig?.options ?? []\" [optionLabel]=\"config().selectConfig?.optionLabel ?? 'name'\"\r\n [(ngModel)]=\"valueSelect\" (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\"\r\n appendTo=\"body\" class=\"w-full inline-input-select\" [disabled]=\"config().isDisabled ?? false\" >\r\n @for (template of templates; track $index) {\r\n <ng-template [pTemplate]=\"template.getType()\" let-item>\r\n <ng-container *ngTemplateOutlet=\"template.template; context: { $implicit: item }\"></ng-container>\r\n </ng-template>\r\n }\r\n</p-select>\r\n}\r\n@case (ETypeInput.MULTISELECT) {\r\n<p-multiselect [options]=\"config().multiSelectConfig?.options ?? []\"\r\n [optionLabel]=\"config().multiSelectConfig?.optionLabel ?? 'name'\" [ngModel]=\"valueInput\"\r\n (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" [filter]=\"true\"\r\n appendTo=\"body\" class=\"w-full\" [disabled]=\"isDisabled\" />\r\n}\r\n@case (ETypeInput.OTP) {\r\n<p-inputotp class=\"w-full\" [mask]=\"config().otpConfig?.mask ?? false\" [length]=\"config().otpConfig?.length ?? 6\"\r\n [integerOnly]=\"config().otpConfig?.integerOnly ?? false\" [ngModel]=\"valueInput\"\r\n (ngModelChange)=\"onChangeValue($event)\" (onBlur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" [disabled]=\"isDisabled\" />\r\n}\r\n@case (ETypeInput.KNOB) {\r\n<p-knob [ngModel]=\"knobValueInput()\" (ngModelChange)=\"onChangeValue($event)\" class=\"w-full\" [min]=\"knobConfig?.min ?? 0\"\r\n [max]=\"knobConfig?.max ?? 100\" [step]=\"knobConfig?.step ?? 1\" [disabled]=\"isDisabled\" [readonly]=\"true\"\r\n [valueTemplate]=\"knobValueTemplate()\" [size]=\"knobConfig?.size ?? 100\" />\r\n}\r\n@case (ETypeInput.TEXTAREA) {\r\n<textarea class=\"w-full h-full p-2 border border-gray-300 rounded-md\" pTextarea [rows]=\"textareaConfig?.rows ?? 3\"\r\n [cols]=\"textareaConfig?.cols ?? 30\" [autoResize]=\"true\" [variant]=\"textareaConfig?.variant ?? 'outlined'\"\r\n [disabled]=\"isDisabled\" [ngModel]=\"valueInput\" (ngModelChange)=\"onChangeValue($event)\" (blur)=\"onBlur()\"\r\n (keydown)=\"onKeyDown($event)\"></textarea>\r\n}\r\n@case (ETypeInput.CHIPS) {\r\n<div class=\"chips-input-wrapper\">\r\n <div\r\n class=\"chips-container w-full p-2 border border-gray-300 rounded-md min-h-[40px] flex flex-wrap items-center gap-2\"\r\n [class.border-red-500]=\"showDuplicateMessage\">\r\n @for (chip of chips; track $index) {\r\n <p-chip [label]=\"chip\" [removable]=\"!isDisabled\" (onRemove)=\"removeChip($index)\" class=\"chip-item\" />\r\n }\r\n <input type=\"text\" class=\"chip-input flex-1 border-0 outline-0 bg-transparent min-w-[100px]\" [value]=\"currentInput\"\r\n (input)=\"onChipInputChange($event)\" (keydown)=\"onChipKeydown($event); onKeyDown($event)\"\r\n (paste)=\"onChipPaste($event)\" [disabled]=\"isDisabled\"\r\n placeholder=\"Escribe o pega elementos separados por espacios...\" />\r\n </div>\r\n @if (showDuplicateMessage) {\r\n <div class=\"duplicate-message text-red-500 text-sm mt-1 flex items-center gap-1\">\r\n <i class=\"pi pi-exclamation-triangle text-red-500\"></i>\r\n <span>\r\n @if (duplicateChips.length === 1) {\r\n El elemento \"<strong>{{ duplicatesText }}</strong>\" ya existe en la lista\r\n } @else {\r\n Los elementos \"<strong>{{ duplicatesText }}</strong>\" ya existen en la lista\r\n }\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n}\r\n@default {\r\n<input pInputText class=\"w-full h-full p-2 border border-gray-300 rounded-md\" [type]=\"type\"\r\n [readOnly]=\"config().readonly ?? false\" [ngModel]=\"valueInput\" (ngModelChange)=\"onChangeValue($event)\"\r\n (blur)=\"onBlur()\" (keydown)=\"onKeyDown($event)\" [disabled]=\"isDisabled\" />\r\n}\r\n}","import { computed, effect, inject, Injectable, type Signal, signal } from '@angular/core'\r\nimport type { IButtonConfig } from '../interfaces'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AppButtonNgService {\r\n private buttonConfig = signal<IButtonConfig>({} as IButtonConfig)\r\n\r\n constructor() {\r\n // Effect para manejar automáticamente la rotación de mensajes\r\n effect(() => {\r\n const config = this.buttonConfig()\r\n if (config.loading && config.loadingMessages && config.loadingMessages.length > 1) {\r\n this.startMessageRotation()\r\n } else {\r\n this.stopMessageRotation()\r\n }\r\n })\r\n }\r\n\r\n setButtonConfig(buttonConfig: IButtonConfig) {\r\n this.buttonConfig.set(buttonConfig)\r\n }\r\n\r\n // Computed público para acceder al label dinámico\r\n public readonly label: Signal<string> = computed(() => {\r\n const config = this.buttonConfig()\r\n\r\n // Si está cargando y tiene mensajes de carga, rotar entre ellos\r\n if (config.loading && config.loadingMessages && config.loadingMessages.length > 0) {\r\n const messages = config.loadingMessages\r\n const index = this.messageIndex() % messages.length // Wrap around\r\n return messages[index]\r\n }\r\n\r\n // Si no está cargando, retornar el label normal\r\n return config.label ? config.label : ''\r\n })\r\n\r\n //#region Loading Messages\r\n private messageIndex = signal(0)\r\n private intervalId?: ReturnType<typeof setInterval>\r\n\r\n private startMessageRotation() {\r\n if (this.intervalId) return\r\n\r\n this.intervalId = setInterval(() => {\r\n this.messageIndex.update(index => index + 1)\r\n }, 6000)\r\n }\r\n\r\n private stopMessageRotation() {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId)\r\n this.intervalId = undefined\r\n this.messageIndex.set(0)\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { CommonModule } from '@angular/common'\r\nimport { Component, effect, inject, model, output } from '@angular/core'\r\nimport { ButtonModule } from 'primeng/button'\r\nimport { TooltipModule } from 'primeng/tooltip'\r\nimport type { IButtonConfig } from './interfaces'\r\nimport { AppButtonNgService } from './services/app-button-ng.service'\r\n\r\n@Component({\r\n selector: 'app-button-ng',\r\n imports: [\r\n ButtonModule,\r\n TooltipModule,\r\n CommonModule\r\n ],\r\n templateUrl: './button-ng.component.html',\r\n styleUrl: './button-ng.component.scss',\r\n providers: [AppButtonNgService]\r\n})\r\nexport class ButtonNgComponent {\r\n private readonly appButtonNgService = inject(AppButtonNgService)\r\n buttonConfig = model.required<IButtonConfig>()\r\n onClick = output<void>()\r\n\r\n constructor() {\r\n effect(() => {\r\n this.appButtonNgService.setButtonConfig(this.buttonConfig())\r\n })\r\n }\r\n\r\n get label(): string {\r\n return this.appButtonNgService.label()\r\n }\r\n\r\n onClickButton(): void {\r\n if (this.buttonConfig().onClick) {\r\n return\r\n }\r\n this.onClick.emit()\r\n }\r\n}\r\n","@let config = buttonConfig(); @let tooltipConfig = buttonConfig().tooltipConfig;\r\n@if (!config.hideButton) {\r\n <div\r\n [ngClass]=\"{\r\n 'full-width-button': config.fullWidth,\r\n 'full-height-button': config.fullHeight,\r\n 'cursor-pointer': this.onClick\r\n }\"\r\n [class]=\"config.class ?? ''\"\r\n >\r\n <p-button\r\n [label]=\"config.hasTemplate ? undefined : label\"\r\n [icon]=\"config.hasTemplate ? undefined : config.icon\"\r\n [severity]=\"config.hasTemplate ? 'secondary' : config.severity\"\r\n [loading]=\"config.loading || false\"\r\n [disabled]=\"config.disabled || false\"\r\n [rounded]=\"config.rounded || false\"\r\n [raised]=\"config.raised || false\"\r\n [variant]=\"config.hasTemplate ? 'text' : config.variant\"\r\n [badge]=\"config.badge\"\r\n (onClick)=\"config?.onClick?.() ?? onClickButton()\"\r\n [size]=\"config?.size\"\r\n pTooltip=\"{{ tooltipConfig?.pTooltip }}\"\r\n [tooltipPosition]=\"tooltipConfig?.tooltipPosition ?? 'top'\"\r\n [iconPos]=\"config?.iconPos ?? 'left'\"\r\n [ngClass]=\"{\r\n 'cursor-pointer': (config.onClick || config.hasStaticClick) && !config.disabled,\r\n 'cursor-auto': !((config.onClick || config.hasStaticClick) && !config.disabled),\r\n 'no-hover-template': config.hasTemplate\r\n }\"\r\n [outlined]=\"config.outlined || false\"\r\n [text]=\"config.text || false\"\r\n >\r\n @if (config.hasTemplate) {\r\n <ng-content></ng-content>\r\n }\r\n </p-button>\r\n </div>\r\n}\r\n","import type { PipeTransform } from '@angular/core'\r\nimport { Pipe } from '@angular/core'\r\n\r\n@Pipe({\r\n name: 'keyToDisplayName'\r\n})\r\nexport class KeyToDisplayNamePipe implements PipeTransform {\r\n\r\n transform(key: string, keysNames?: Record<string, string>): string {\r\n return keysNames?.[key] ?? key\r\n }\r\n\r\n}\r\n","import type { HttpErrorResponse } from '@angular/common/http'\r\n\r\nexport interface IApiError {\r\n errorCode: string\r\n message: string[] | string\r\n timestamp: string\r\n errors: IFieldError[]\r\n}\r\nexport interface IFieldError {\r\n field: string\r\n message: string\r\n}\r\n\r\n\r\n/**\r\n * Utilidades para manejar errores de API según la interfaz IApiError\r\n */\r\nexport class ApiErrorUtil {\r\n /**\r\n * Procesa errores de API y extrae el mensaje según la interfaz IApiError\r\n * @param error - El error HTTP recibido\r\n * @param fallbackMessage - Mensaje por defecto si no se puede extraer el mensaje del error\r\n * @returns El mensaje de error procesado\r\n */\r\n static handleApiError(error: HttpErrorResponse, fallbackMessage: string): string {\r\n const apiError = error.error as IApiError\r\n const errorMessage = Array.isArray(apiError?.message)\r\n ? apiError.message.join(', ')\r\n : apiError?.message ?? fallbackMessage\r\n return errorMessage\r\n }\r\n\r\n /**\r\n * Procesa errores de API con información detallada de campos\r\n * y muestra tanto el mensaje general como los errores específicos de campo\r\n * @param error - El error HTTP recibido\r\n * @param fallbackMessage - Mensaje por defecto si no se puede extraer el mensaje del error\r\n * @returns El mensaje de error procesado con información de campos si está disponible\r\n */\r\n static handleApiErrorWithFields(error: HttpErrorResponse, fallbackMessage: string): string {\r\n const apiError = error.error as IApiError\r\n\r\n let errorMessage = Array.isArray(apiError?.message)\r\n ? apiError.message.join(', ')\r\n : apiError?.message ?? fallbackMessage\r\n\r\n // Si hay errores de campo específicos, los agregamos al mensaje\r\n if (apiError?.errors && apiError.errors.length > 0) {\r\n const fieldErrors = apiError.errors\r\n .map(fieldError => `${fieldError.field}: ${fieldError.message}`)\r\n .join(', ')\r\n\r\n errorMessage = `${errorMessage}. Errores de campos: ${fieldErrors}`\r\n }\r\n\r\n return errorMessage\r\n }\r\n\r\n /**\r\n * Obtiene solo los errores de campo específicos\r\n * @param error - El error HTTP recibido\r\n * @returns Array de errores de campo o array vacío si no hay errores\r\n */\r\n static getFieldErrors(error: HttpErrorResponse): Array<{ field: string; message: string }> {\r\n const apiError = error.error as IApiError\r\n return apiError?.errors ?? []\r\n }\r\n\r\n /**\r\n * Verifica si el error tiene errores de campo específicos\r\n * @param error - El error HTTP recibido\r\n * @returns true si hay errores de campo, false en caso contrario\r\n */\r\n static hasFieldErrors(error: HttpErrorResponse): boolean {\r\n const apiError = error.error as IApiError\r\n return apiError?.errors && apiError.errors.length > 0\r\n }\r\n\r\n /**\r\n * Obtiene el código de error específico\r\n * @param error - El error HTTP recibido\r\n * @returns El código de error o undefined si no está disponible\r\n */\r\n static getErrorCode(error: HttpErrorResponse): string | undefined {\r\n const apiError = error.error as IApiError\r\n return apiError?.errorCode\r\n }\r\n\r\n /**\r\n * Obtiene el timestamp del error\r\n * @param error - El error HTTP recibido\r\n * @returns El timestamp del error o undefined si no está disponible\r\n */\r\n static getErrorTimestamp(error: HttpErrorResponse): string | undefined {\r\n const apiError = error.error as IApiError\r\n return apiError?.timestamp\r\n }\r\n}\r\n","export class CookieUtil {\r\n /**\r\n * Obtiene el valor de una cookie por su nombre\r\n * @param name - Nombre de la cookie\r\n * @returns El valor de la cookie o null si no existe\r\n */\r\n static getCookie(name: string): string | null {\r\n if (typeof document === 'undefined') {\r\n return null\r\n }\r\n\r\n const nameEQ = name + '='\r\n const ca = document.cookie.split(';')\r\n\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i]\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1, c.length)\r\n }\r\n if (c.indexOf(nameEQ) === 0) {\r\n return c.substring(nameEQ.length, c.length)\r\n }\r\n }\r\n return null\r\n }\r\n\r\n /**\r\n * Establece una cookie\r\n * @param name - Nombre de la cookie\r\n * @param value - Valor de la cookie\r\n * @param days - Días hasta que expire (por defecto 365)\r\n * @param path - Ruta de la cookie (por defecto '/')\r\n */\r\n static setCookie(name: string, value: string, days: number = 365, path: string = '/'): void {\r\n if (typeof document === 'undefined') {\r\n return\r\n }\r\n\r\n let expires = ''\r\n if (days) {\r\n const date = new Date()\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000))\r\n expires = '; expires=' + date.toUTCString()\r\n }\r\n document.cookie = name + '=' + (value || '') + expires + '; path=' + path\r\n }\r\n\r\n /**\r\n * Elimina una cookie\r\n * @param name - Nombre de la cookie a eliminar\r\n * @param path - Ruta de la cookie (por defecto '/')\r\n */\r\n static eraseCookie(name: string, path: string = '/'): void {\r\n if (typeof document === 'undefined') {\r\n return\r\n }\r\n\r\n document.cookie = name + '=; Path=' + path + '; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'\r\n }\r\n\r\n /**\r\n * Obtiene un valor booleano desde una cookie\r\n * @param name - Nombre de la cookie\r\n * @param defaultValue - Valor por defecto si la cookie no existe\r\n * @returns El valor booleano\r\n */\r\n static getBooleanCookie(name: string, defaultValue: boolean = false): boolean {\r\n const value = this.getCookie(name)\r\n if (value === null) {\r\n return defaultValue\r\n }\r\n return value === 'true'\r\n }\r\n\r\n /**\r\n * Establece un valor booleano en una cookie\r\n * @param name - Nombre de la cookie\r\n * @param value - Valor booleano\r\n * @param days - Días hasta que expire (por defecto 365)\r\n * @param path - Ruta de la cookie (por defecto '/')\r\n */\r\n static setBooleanCookie(name: string, value: boolean, days: number = 365, path: string = '/'): void {\r\n this.setCookie(name, value.toString(), days, path)\r\n }\r\n}\r\n","export const formatCurrency = (amount: number, currency: string) => {\r\n return new Intl.NumberFormat('es-CO', {\r\n style: 'currency',\r\n currency: currency || 'COP'\r\n }).format(amount)\r\n}\r\n","export const isSameDay = (date1: Date, date2: Date): boolean => {\r\n const date1Copy = new Date(date1.setHours(0, 0, 0, 0))\r\n const date2Copy = new Date(date2.setHours(0, 0, 0, 0))\r\n return date1Copy.getTime() === date2Copy.getTime()\r\n}\r\n\r\nexport const formatDateDMA = (date: Date): string => {\r\n return new Date(date).toLocaleDateString('es-CO', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit'\r\n })\r\n}\r\n\r\n// Crea una funcion que tambien muestre la hora\r\nexport const formatDateDMAWithTime = (date: Date): string => {\r\n return new Date(date).toLocaleDateString('es-CO', {\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })\r\n}\r\n","\r\n/**\r\n * Enum con los tipos de archivos más relevantes para la aplicación\r\n */\r\nexport enum EFileType {\r\n // Documentos\r\n PDF = 'application/pdf',\r\n DOC = 'application/msword',\r\n DOCX = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n XLS = 'application/vnd.ms-excel',\r\n XLSX = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n PPT = 'application/vnd.ms-powerpoint',\r\n PPTX = 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n TXT = 'text/plain',\r\n RTF = 'application/rtf',\r\n\r\n // Imágenes\r\n JPG = 'image/jpeg',\r\n PNG = 'image/png',\r\n GIF = 'image/gif',\r\n BMP = 'image/bmp',\r\n SVG = 'image/svg+xml',\r\n WEBP = 'image/webp',\r\n\r\n // Archivos comprimidos\r\n ZIP = 'application/zip',\r\n RAR = 'application/vnd.rar',\r\n TAR = 'application/x-tar',\r\n GZ = 'application/gzip',\r\n\r\n // Archivos de datos\r\n CSV = 'text/csv',\r\n JSON = 'application/json',\r\n XML = 'application/xml',\r\n\r\n // Archivos de audio\r\n MP3 = 'audio/mpeg',\r\n WAV = 'audio/wav',\r\n OGG = 'audio/ogg',\r\n\r\n // Archivos de video\r\n MP4 = 'video/mp4',\r\n AVI = 'video/x-msvideo',\r\n MOV = 'video/quicktime',\r\n WMV = 'video/x-ms-wmv',\r\n\r\n // Todos los tipos de imagen\r\n ALL_IMAGES = 'image/*',\r\n\r\n // Todos los tipos de documento\r\n ALL_DOCUMENTS = 'application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,text/plain,application/rtf',\r\n\r\n // Todos los tipos de archivo\r\n ALL_FILES = '*/*'\r\n}\r\n\r\n/**\r\n * Interfaz para el callback del archivo seleccionado\r\n */\r\nexport interface IFileSelectedCallback {\r\n (file: File): void\r\n}\r\n\r\n/**\r\n * Interfaz para las opciones del trigger de archivo\r\n */\r\nexport interface ITriggerFileInputOptions {\r\n accept?: EFileType\r\n multiple?: boolean\r\n onFileSelected?: IFileSelectedCallback\r\n}\r\n\r\n/**\r\n * Método mejorado para abrir el selector de archivos\r\n * @param options - Opciones para configurar el input de archivo\r\n */\r\nexport const triggerFileInput = (options: ITriggerFileInputOptions = {}): void => {\r\n const {\r\n accept = EFileType.ALL_FILES,\r\n multiple = false,\r\n onFileSelected\r\n } = options\r\n\r\n const input = document.createElement('input')\r\n input.type = 'file'\r\n input.accept = accept\r\n input.multiple = multiple\r\n input.style.display = 'none'\r\n\r\n input.onchange = (event: Event) => {\r\n const target = event.target as HTMLInputElement\r\n const files = target.files\r\n\r\n if (files && files.length > 0 && onFileSelected) {\r\n if (multiple) {\r\n // Si es múltiple, llamar al callback con todos los archivos\r\n Array.from(files).forEach(file => {\r\n onFileSelected(file)\r\n })\r\n } else {\r\n // Si es único, llamar al callback con el primer archivo\r\n const file = files[0]\r\n onFileSelected(file)\r\n }\r\n }\r\n\r\n document.body.removeChild(input)\r\n }\r\n\r\n document.body.appendChild(input)\r\n input.click()\r\n}\r\n\r\n/**\r\n * Interfaz para las opciones de captura de cámara\r\n */\r\nexport interface ICameraOptions {\r\n width?: number\r\n height?: number\r\n quality?: number\r\n facingMode?: 'user' | 'environment'\r\n onPhotoTaken?: (file: File) => void\r\n onError?: (error: Error) => void\r\n}\r\n\r\n/**\r\n * Función para capturar una foto usando la cámara\r\n */\r\nexport const capturePhotoFromCamera = async(options: ICameraOptions = {}): Promise<void> => {\r\n const {\r\n quality = 0.9,\r\n facingMode = 'environment',\r\n onPhotoTaken,\r\n onError\r\n } = options\r\n\r\n try {\r\n if (!navigator.mediaDevices?.getUserMedia) {\r\n throw new Error('Cámara no soportada en este navegador')\r\n }\r\n\r\n const stream = await navigator.mediaDevices.getUserMedia({\r\n video: { facingMode }\r\n })\r\n\r\n const video = document.createElement('video')\r\n const canvas = document.createElement('canvas')\r\n const context = canvas.getContext('2d')!\r\n\r\n // Crear modal\r\n const modal = document.createElement('div')\r\n modal.style.cssText = `\r\n position: fixed; top: 0; left: 0; width: 100%; height: 100%;\r\n background: rgba(0,0,0,0.9); display: flex; flex-direction: column;\r\n align-items: center; justify-content: center; z-index: 10000;\r\n `\r\n\r\n video.style.cssText = 'width: 80%; max-width: 500px; border-radius: 8px;'\r\n video.srcObject = stream\r\n video.autoplay = true\r\n video.playsInline = true\r\n\r\n const buttonsDiv = document.createElement('div')\r\n buttonsDiv.style.cssText = 'display: flex; gap: 20px; margin-top: 20px;'\r\n\r\n const captureBtn = document.createElement('button')\r\n captureBtn.textContent = 'Tomar Foto'\r\n captureBtn.style.cssText = `\r\n padding: 12px 24px; background: #007bff; color: white;\r\n border: none; border-radius: 6px; cursor: pointer; font-size: 16px;\r\n `\r\n\r\n const cancelBtn = document.createElement('button')\r\n cancelBtn.textContent = 'Cancelar'\r\n cancelBtn.style.cssText = `\r\n padding: 12px 24px; background: #6c757d; color: white;\r\n border: none; border-radius: 6px; cursor: pointer; font-size: 16px;\r\n `\r\n\r\n const cleanup = () => {\r\n stream.getTracks().forEach(track => track.stop())\r\n modal.remove()\r\n }\r\n\r\n captureBtn.onclick = () => {\r\n canvas.width = video.videoWidth\r\n canvas.height = video.videoHeight\r\n context.drawImage(video, 0, 0)\r\n\r\n canvas.toBlob((blob) => {\r\n if (blob && onPhotoTaken) {\r\n const file = new File([blob], `photo-${Date.now()}.jpg`, { type: 'image/jpeg' })\r\n onPhotoTaken(file)\r\n }\r\n cleanup()\r\n }, 'image/jpeg', quality)\r\n }\r\n\r\n cancelBtn.onclick = cleanup\r\n document.addEventListener('keydown', (e) => {\r\n if (e.key === 'Escape') cleanup()\r\n })\r\n\r\n buttonsDiv.append(captureBtn, cancelBtn)\r\n modal.append(video, buttonsDiv)\r\n document.body.appendChild(modal)\r\n\r\n } catch (error) {\r\n if (onError) onError(error as Error)\r\n }\r\n}\r\n\r\nenum EFileIcons {\r\n FILE = 'file',\r\n IMAGE = 'image',\r\n VIDEO = 'video',\r\n FOLDER = 'folder',\r\n EXCEL = 'excel',\r\n SIGNATURE = 'signature',\r\n CONTRACT = 'contract',\r\n FINGERPRINT = 'fingerprint',\r\n ID_CARD = 'id_card',\r\n FILE_BOX = 'file_box',\r\n SECURE_BUILDING = 'secure_building',\r\n POLICE = 'police'\r\n}\r\n\r\nexport const DocumentIcon: Record<EFileIcons, string> = {\r\n [EFileIcons.FILE]: 'fa-solid fa-file-lines',\r\n [EFileIcons.IMAGE]: 'fa-solid fa-file-image',\r\n [EFileIcons.VIDEO]: 'fa-solid fa-file-video',\r\n [EFileIcons.FOLDER]: 'fa-solid fa-folder',\r\n [EFileIcons.EXCEL]: 'fa-solid fa-file-excel',\r\n [EFileIcons.SIGNATURE]: 'fa-solid fa-signature',\r\n [EFileIcons.CONTRACT]: 'fa-solid fa-file-contract',\r\n [EFileIcons.FINGERPRINT]: 'fa-solid fa-fingerprint',\r\n [EFileIcons.ID_CARD]: 'fa-solid fa-id-card',\r\n [EFileIcons.SECURE_BUILDING]: 'fa-solid fa-building-shield',\r\n [EFileIcons.POLICE]: 'fa-solid fa-hand-middle-finger',\r\n [EFileIcons.FILE_BOX]: 'fa-solid fa-box-archive'\r\n}\r\n\r\nexport const downloadFile = (blob: Blob, fileName: string): void => {\r\n const url = window.URL.createObjectURL(blob)\r\n const link = document.createElement('a')\r\n link.href = url\r\n link.download = fileName\r\n document.body.appendChild(link)\r\n link.click()\r\n document.body.removeChild(link)\r\n window.URL.revokeObjectURL(url)\r\n}\r\n","//sin uuid, codigo propio\r\nexport const generateId = (): string => {\r\n return Date.now().toString(36) + Math.random().toString(36).substring(2, 15)\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","export const formatNumber = (number: number): string => {\r\n return new Intl.NumberFormat('es-CO', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2\r\n }).format(number)\r\n}\r\n\r\nexport const fixedNumber = (number: number): number => {\r\n return Number(number.toFixed(2))\r\n}\r\n","import type { IPrimeNgSelection } from '../components/prime-ng/interfaces'\r\n\r\nexport const hasValues = (obj: Record<string, any>): boolean => {\r\n return Object.values(obj).some(value => value !== null && value !== undefined)\r\n}\r\n\r\n/**\r\n * Elimina las propiedades de un objeto que tengan valores null o undefined.\r\n * Retorna un nuevo objeto sin mutar el original.\r\n * @param obj - Objeto del cual se eliminarán las propiedades null/undefined\r\n * @returns Nuevo objeto sin las propiedades con valores null o undefined\r\n */\r\nexport const removeNullUndefined = <T extends Record<string, any>>(obj: T): Partial<T> => {\r\n const result: Partial<T> = {}\r\n\r\n Object.keys(obj).forEach(key => {\r\n const value = obj[key]\r\n if (value !== null && value !== undefined) {\r\n result[key as keyof T] = value\r\n }\r\n })\r\n\r\n return result\r\n}\r\n\r\n/**\r\n * Realiza un upsert en un array de strings. Si el string ya existe, no hace nada.\r\n * Si no existe, lo agrega al array.\r\n * @param targetArray - Array de strings donde se realizará el upsert\r\n * @param value - String o array de strings a insertar\r\n * @returns Array actualizado con los nuevos valores\r\n */\r\nexport const upsertArrayStrings = (targetArray: string[], value: string | string[]): string[] => {\r\n // Crear una copia del array original para evitar mutaciones\r\n const result = [...targetArray]\r\n\r\n // Convertir el valor a array para procesamiento uniforme\r\n const valuesToInsert = Array.isArray(value) ? value : [value]\r\n\r\n // Procesar cada valor\r\n valuesToInsert.forEach(stringValue => {\r\n // Solo agregar si no existe en el array\r\n if (!result.includes(stringValue)) {\r\n result.push(stringValue)\r\n }\r\n })\r\n\r\n return result\r\n}\r\n\r\nexport const sameArray = (arr1: unknown[], arr2: unknown[]): boolean => {\r\n if (arr1.length !== arr2.length) return false\r\n\r\n const sorted1 = Array.from(arr1).sort()\r\n const sorted2 = Array.from(arr2).sort()\r\n\r\n return sorted1.every((item, index) => item === sorted2[index])\r\n}\r\n\r\nexport const getOptionByCode = <T>(options: IPrimeNgSelection<T>[], code: T | undefined): IPrimeNgSelection<T> | undefined => {\r\n if (!code) return undefined\r\n return options.find((item) => item.code === code)\r\n}\r\n\r\nexport const createEnumeratedList = (items: string[]): string => {\r\n if (items.length === 0) {\r\n return ''\r\n }\r\n\r\n if (items.length === 1) {\r\n return `1. ${items[0]}`\r\n }\r\n\r\n return items\r\n .map((item, index) => `${index + 1}. ${item}`)\r\n .join('\\n')\r\n}\r\n","export class PrimeNgUtil {\r\n static isPrimeNgSelection(value: any): boolean {\r\n return typeof value === 'object' && value !== null && 'name' in value && 'code' in value\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common'\r\nimport { Component } from '@angular/core'\r\n\r\n@Component({\r\n selector: 'app-aminated-container',\r\n imports: [CommonModule],\r\n templateUrl: './aminated-container.component.html',\r\n styleUrl: './aminated-container.component.scss'\r\n})\r\nexport class AminatedContainerComponent {\r\n isLoading: boolean = true\r\n}\r\n","<div class=\"fade-in-container\">\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, model } from '@angular/core'\r\nimport { BadgeModule } from 'primeng/badge'\r\nimport type { IBadgeConfig, IBadgeSeverity, IBadgeSize } from './interfaces'\r\n@Component({\r\n selector: 'app-badge-ng',\r\n imports: [BadgeModule],\r\n templateUrl: './badge-ng.component.html'\r\n})\r\nexport class BadgeNgComponent {\r\n config = model.required<IBadgeConfig>()\r\n\r\n get value(): string {\r\n return this.config().value\r\n }\r\n\r\n get severity(): IBadgeSeverity {\r\n return this.config().severity\r\n }\r\n\r\n get badgeSize(): IBadgeSize {\r\n return this.config().badgeSize ?? 'small'\r\n }\r\n\r\n get fullWidth(): boolean {\r\n return this.config().fullWidth ?? true\r\n }\r\n}\r\n","<p-badge\r\n [style]=\"{\r\n textAlign: 'center',\r\n width: fullWidth ? '100%' : 'auto'\r\n }\"\r\n [value]=\"value\"\r\n [severity]=\"severity\"\r\n [badgeSize]=\"badgeSize\"\r\n/>\r\n","import { Component } from '@angular/core'\r\nimport { ToolbarModule } from 'primeng/toolbar'\r\n@Component({\r\n selector: 'app-toolbar-ng',\r\n imports: [\r\n ToolbarModule\r\n ],\r\n templateUrl: './toolbar-ng.component.html',\r\n styleUrl: './toolbar-ng.component.scss'\r\n})\r\nexport class ToolbarNgComponent {\r\n\r\n}\r\n","<p-toolbar class=\"border-0 bg-transparent\">\r\n <ng-template pTemplate=\"start\">\r\n <ng-content select=\"[toolbarStart]\"></ng-content>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"center\">\r\n <ng-content select=\"[toolbarCenter]\"></ng-content>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"end\">\r\n <ng-content select=\"[toolbarEnd]\"></ng-content>\r\n </ng-template>\r\n</p-toolbar>\r\n","import type { Signal, WritableSignal } from '@angular/core'\r\nimport { computed, inject, Injectable, signal } from '@angular/core'\r\nimport type { IEditTableNgConfig, IGlobalSearchForm } from '../interfaces'\r\nimport { FormGroup, NonNullableFormBuilder } from '@angular/forms'\r\nimport { ETypeInput } from '../../../origin/form/enums'\r\nimport type { IControlConfig } from '../../../origin/form/interfaces'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TableNgEditService {\r\n private editConfig: WritableSignal<IEditTableNgConfig | undefined> = signal<IEditTableNgConfig | undefined>(undefined)\r\n private keysNames: WritableSignal<Record<string, string>> = signal<Record<string, string>>({})\r\n constructor() { }\r\n\r\n setEditConfig(editConfig: IEditTableNgConfig | undefined): void {\r\n this.editConfig.set(editConfig)\r\n }\r\n\r\n setKeysNames(keysNames: Record<string, string>): void {\r\n this.keysNames.set(keysNames)\r\n }\r\n\r\n private fb = inject(NonNullableFormBuilder)\r\n controls: Signal<IControlConfig[]> = computed(() => {\r\n const formValues = this.searchFormGroup().value\r\n const controls = [\r\n {\r\n controlName: 'search',\r\n control: this.fb.control(formValues.search, { validators: [] }),\r\n typeInput: ETypeInput.TEXT,\r\n colSpan: 12,\r\n label: '-'\r\n }\r\n ]\r\n return controls\r\n })\r\n searchFormGroup: WritableSignal<FormGroup<IGlobalSearchForm>> = signal(new FormGroup({}))\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TableNgGeneralService {\r\n\r\n constructor() { }\r\n public readonly MOCK_EMPTY_DATE = new Date(1900, 0, 1)\r\n}\r\n","import type { Signal, WritableSignal } from '@angular/core'\r\nimport { computed, inject, Injectable, signal } from '@angular/core'\r\nimport { toSignal } from '@angular/core/rxjs-interop'\r\nimport { FormGroup, NonNullableFormBuilder } from '@angular/forms'\r\nimport type { SortEvent, SortMeta } from 'primeng/api'\r\nimport { FilterService } from 'primeng/api'\r\nimport type { Table } from 'primeng/table'\r\nimport { ETypeInput } from '../../../origin/form/enums'\r\nimport type { IControlConfig } from '../../../origin/form/interfaces'\r\nimport type { IButtonConfig } from '../../button-ng/interfaces'\r\nimport type { IGlobalSearchForm, ISelectionTableConfig, ITableNgConfig, ITableNgData } from '../interfaces'\r\nimport { TableNgGeneralService } from './table-ng-general.service'\r\n// import { CustomDialogService } from '../../dynamic-dialog/services/custom-dialog.service'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TableNgService {\r\n private readonly tableNgGeneralService = inject(TableNgGeneralService)\r\n private readonly filterService = inject(FilterService)\r\n // private readonly dialogService = inject(CustomDialogService)\r\n private initialValue!: ITableNgData[]\r\n\r\n constructor() {\r\n this.filterService.register('globalCustomFilter', (rowData: string | IButtonConfig[], filter: string): boolean => {\r\n if (!filter || filter.trim() === '') return true\r\n\r\n const searchTerm = filter.toLowerCase()\r\n\r\n // Si es string\r\n if (typeof rowData === 'string') {\r\n return rowData.toLowerCase().includes(searchTerm)\r\n }\r\n\r\n // Si es array de botones\r\n if (Array.isArray(rowData)) {\r\n return rowData.some((button: IButtonConfig) => {\r\n const label = button.label || ''\r\n return label.toLowerCase().includes(searchTerm)\r\n })\r\n }\r\n\r\n return false\r\n })\r\n\r\n /**\r\n * Filtro para arrays de strings que verifica si el valor contiene alguno de los strings del filtro.\r\n * Uso: dt.filter(['valor1', 'valor2'], 'nombreColumna', 'arrayStringFilter')\r\n * @param rowData - Puede ser un string o array de strings\r\n * @param filter - Array de strings para filtrar\r\n * @returns true si encuentra coincidencias parciales (case-insensitive)\r\n */\r\n this.filterService.register('arrayStringFilter', (rowData: string | string[], filter: string[]): boolean => {\r\n // Si no hay filtro o el filtro está vacío, mostrar todos los elementos\r\n if (!filter || !Array.isArray(filter) || filter.length === 0) return true\r\n\r\n // Si rowData es null, undefined o vacío, no mostrar el elemento\r\n if (rowData == null || rowData === '') return false\r\n\r\n // Si rowData es un string\r\n if (typeof rowData === 'string') {\r\n return filter.some(filterValue =>\r\n rowData.toLowerCase().includes(filterValue.toLowerCase())\r\n )\r\n }\r\n\r\n // Si rowData es un array de strings\r\n if (Array.isArray(rowData)) {\r\n return rowData.some(dataValue =>\r\n filter.some(filterValue =>\r\n typeof dataValue === 'string' &&\r\n dataValue.toLowerCase().includes(filterValue.toLowerCase())\r\n )\r\n )\r\n }\r\n\r\n // Para otros tipos de datos, convertir a string si es posible\r\n const stringValue = String(rowData)\r\n if (stringValue && stringValue !== 'undefined' && stringValue !== 'null') {\r\n return filter.some(filterValue =>\r\n stringValue.toLowerCase().includes(filterValue.toLowerCase())\r\n )\r\n }\r\n\r\n return false\r\n })\r\n\r\n /**\r\n * Filtro exacto para arrays de strings que verifica coincidencias exactas.\r\n * Uso: dt.filter(['valor1', 'valor2'], 'nombreColumna', 'arrayStringExactFilter')\r\n * @param rowData - Puede ser un string o array de strings\r\n * @param filter - Array de strings para filtrar\r\n * @returns true si encuentra coincidencias exactas (case-sensitive)\r\n */\r\n this.filterService.register('arrayStringExactFilter', (rowData: string | string[], filter: string[]): boolean => {\r\n if (!filter || !Array.isArray(filter) || filter.length === 0) return true\r\n\r\n // Si rowData es null, undefined o vacío, no mostrar el elemento\r\n if (rowData == null || rowData === '') return false\r\n\r\n // Si rowData es un string\r\n if (typeof rowData === 'string') {\r\n return filter.includes(rowData)\r\n }\r\n\r\n // Si rowData es un array de strings\r\n if (Array.isArray(rowData)) {\r\n return rowData.some(dataValue => filter.includes(dataValue))\r\n }\r\n\r\n // Para otros tipos de datos, convertir a string si es posible\r\n const stringValue = String(rowData)\r\n if (stringValue && stringValue !== 'undefined' && stringValue !== 'null') {\r\n return filter.includes(stringValue)\r\n }\r\n\r\n return false\r\n })\r\n\r\n this.filterService.register('customIn', (rowData: string | any[], filter: string[]): boolean => {\r\n if (!filter || !Array.isArray(filter) || filter.length === 0) return true\r\n\r\n // Si rowData es null, undefined o vacío, no mostrar el elemento\r\n if (rowData == null || rowData === '') return false\r\n\r\n if (typeof rowData === 'string') {\r\n return filter.includes(rowData)\r\n }\r\n\r\n // Para otros tipos de datos, convertir a string si es posible\r\n const stringValue = String(rowData)\r\n if (stringValue && stringValue !== 'undefined' && stringValue !== 'null') {\r\n return filter.includes(stringValue)\r\n }\r\n\r\n return false\r\n })\r\n }\r\n\r\n get MOCK_EMPTY_DATE(): Date {\r\n return this.tableNgGeneralService.MOCK_EMPTY_DATE\r\n }\r\n\r\n setInitialValue(data: ITableNgData[]): void {\r\n this.initialValue = data\r\n }\r\n\r\n //#region SORT\r\n customSort(event: SortEvent) {\r\n let field: string | undefined = undefined\r\n let order: number | undefined = undefined\r\n switch (event.mode) {\r\n case 'single':\r\n field = event.field\r\n order = event.order\r\n break\r\n\r\n case 'multiple': {\r\n const multiSortMeta: SortMeta[] = event.multiSortMeta ?? []\r\n const sortMeta: SortMeta = multiSortMeta[0]\r\n field = sortMeta?.field ?? undefined\r\n order = sortMeta?.order ?? undefined\r\n break\r\n }\r\n\r\n default:\r\n break\r\n }\r\n\r\n if (!field || order === undefined) return\r\n\r\n const data: ITableNgData[] = event.data as ITableNgData[] ?? []\r\n\r\n if (order === 0) {\r\n // Sin sorting - restaurar orden original\r\n data.splice(0, data.length, ...this.initialValue)\r\n } else {\r\n // Aplicar sorting\r\n data.sort((a, b) => {\r\n const valueA = this.getFieldValue(a, field)\r\n const valueB = this.getFieldValue(b, field)\r\n\r\n const result = this.compareValues(valueA, valueB)\r\n return order * result // 1 para ASC, -1 para DESC\r\n })\r\n }\r\n }\r\n\r\n private getFieldValue(item: ITableNgData, field: string): string | IButtonConfig[] | Date {\r\n const rawValue = item.rowData[field]\r\n\r\n // Si es un array (probablemente IButtonConfig[])\r\n if (Array.isArray(rawValue) && rawValue.length > 0) {\r\n // Verificar si tenemos configuración de sorting para este campo\r\n const buttonKeyToSort = item.sortConfig?.buttonKeyToSort?.[field]\r\n\r\n if (buttonKeyToSort) {\r\n // Usar la primera configuración de botón del array\r\n const firstButton = rawValue[0]\r\n return firstButton[buttonKeyToSort] as string\r\n }\r\n\r\n // Si no hay configuración, intentar usar 'label' por defecto\r\n const firstButton = rawValue[0]\r\n return firstButton.label || ''\r\n }\r\n\r\n // Si es un string o cualquier otro tipo\r\n return rawValue\r\n }\r\n\r\n private compareValues(a: any, b: any): number {\r\n // Manejar valores null/undefined\r\n if (a == null && b == null) return 0\r\n if (a == null) return -1\r\n if (b == null) return 1\r\n\r\n // Si ambos son strings, usar localeCompare para mejor sorting\r\n if (typeof a === 'string' && typeof b === 'string') {\r\n return a.toLowerCase().localeCompare(b.toLowerCase())\r\n }\r\n\r\n // Si ambos son números\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a - b\r\n }\r\n\r\n // Si ambos son booleanos\r\n if (typeof a === 'boolean' && typeof b === 'boolean') {\r\n return a === b ? 0 : a ? 1 : -1\r\n }\r\n\r\n // Si son fechas\r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() - b.getTime()\r\n }\r\n\r\n // Para otros tipos, convertir a string y comparar\r\n const strA = String(a).toLowerCase()\r\n const strB = String(b).toLowerCase()\r\n return strA.localeCompare(strB)\r\n }\r\n //#endregion\r\n\r\n //#region Global Filter\r\n private fb = inject(NonNullableFormBuilder)\r\n\r\n controls: Signal<IControlConfig[]> = computed(() => {\r\n const formValues = this.searchFormGroup().value\r\n const controls = [\r\n {\r\n controlName: 'search',\r\n control: this.fb.control(formValues.search, { validators: [] }),\r\n typeInput: ETypeInput.TEXT,\r\n colSpan: 12,\r\n label: 'Buscar'\r\n }\r\n ]\r\n return controls\r\n })\r\n searchFormGroup: WritableSignal<FormGroup<IGlobalSearchForm>> = signal(new FormGroup({}))\r\n values = toSignal(this.searchFormGroup().valueChanges)\r\n submitGlobalSearch(formGroup: FormGroup<IGlobalSearchForm>, dt: Table) {\r\n const search: string = formGroup.value.search ?? ''\r\n dt.filterGlobal(search, 'globalCustomFilter')\r\n }\r\n clearSearchInput() {\r\n this.searchFormGroup().get('search')?.setValue('')\r\n }\r\n //#endregion\r\n //#region Selection\r\n async openModalManagementSelectedItems(selectedItems: WritableSignal<ITableNgData[]>, config?: ITableNgConfig) {\r\n const { SelectedItemsManagementComponent } = await import('../components/selected-items-management/selected-items-management.component')\r\n let configSelectedItems = config\r\n if (config) {\r\n configSelectedItems = structuredClone(config)\r\n const selectionTableConfig: ISelectionTableConfig = {\r\n ...(configSelectedItems.selectionTableConfig ?? {}),\r\n showManagementConfig: false\r\n }\r\n delete configSelectedItems.lazyLoadingConfig\r\n\r\n configSelectedItems.selectionTableConfig = selectionTableConfig\r\n\r\n }\r\n // const ref = this.dialogService?.open(SelectedItemsManagementComponent, {\r\n // header: 'Gestionar Seleccionados',\r\n // data: {\r\n // selectedItems: selectedItems(),\r\n // config: configSelectedItems\r\n // },\r\n // width: '90%',\r\n // height: '90%',\r\n // styleClass: 'overflow-hidden'\r\n // })\r\n\r\n // ref.onClose.subscribe((selectedReturnItems: ITableNgData[] | undefined) => {\r\n // if (selectedReturnItems) {\r\n // selectedItems.set(selectedReturnItems)\r\n // }\r\n // })\r\n }\r\n //#endregion\r\n\r\n //#region Custom Filter\r\n //#endregion\r\n\r\n excelButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n label: '',\r\n icon: 'fa-solid fa-file-excel',\r\n variant: 'text',\r\n severity: 'success',\r\n raised: true,\r\n size: 'large',\r\n tooltipConfig: {\r\n pTooltip: 'Exportar a Excel',\r\n tooltipPosition: 'top'\r\n }\r\n }\r\n })\r\n\r\n pdfButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n label: '',\r\n icon: 'fa-solid fa-file-pdf',\r\n variant: 'text',\r\n severity: 'danger',\r\n raised: true,\r\n size: 'large',\r\n tooltipConfig: {\r\n pTooltip: 'Exportar a PDF',\r\n tooltipPosition: 'top'\r\n }\r\n }\r\n })\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\r\nimport { CommonModule } from '@angular/common'\r\nimport type { OnDestroy, OnInit, Signal, TemplateRef, WritableSignal } from '@angular/core'\r\nimport { ChangeDetectionStrategy, Component, computed, ContentChild, effect, inject, input, model, output, signal, ViewChild } from '@angular/core'\r\nimport { FormsModule, NonNullableFormBuilder, type FormGroup } from '@angular/forms'\r\nimport jsPDF from 'jspdf'\r\nimport autoTable from 'jspdf-autotable'\r\nimport type { FilterMetadata, SortEvent } from 'primeng/api'\r\nimport type { Table, TableFilterEvent, TableLazyLoadEvent } from 'primeng/table'\r\nimport { TableModule } from 'primeng/table'\r\nimport * as XLSX from 'xlsx'\r\nimport { KeyToDisplayNamePipe } from '../../../pipes'\r\nimport { formatNumber, generateId, PrimeNgUtil, removeNullUndefined } from '../../../utils'\r\nimport { AminatedContainerComponent } from '../../origin/aminated-container/aminated-container.component'\r\nimport { InlineInputComponent } from '../../origin/form/components/inline-input/inline-input.component'\r\nimport { ETypeInput } from '../../origin/form/enums'\r\nimport { FormComponent } from '../../origin/form/form.component'\r\nimport type { IControlConfig } from '../../origin/form/interfaces'\r\nimport { HttpMessageComponent } from '../../origin/http-message/http-message.component'\r\nimport type { IHttpMessage } from '../../origin/http-message/interfaces'\r\nimport type { IPickListElement } from '../../origin/pick-list/interfaces'\r\nimport { BadgeNgComponent } from '../badge/badge-ng.component'\r\nimport { ButtonNgComponent } from '../button-ng/button-ng.component'\r\nimport type { IButtonConfig } from '../button-ng/interfaces'\r\n// import { CustomDialogService } from './services/custom-dialog.service'\r\nimport { ToolbarNgComponent } from '../toolbar-ng/toolbar-ng.component'\r\n// import { ModalAdvancedFilterComponent } from './components/modal-advanced-filter/modal-advanced-filter.component'\r\nimport type { IEditTableNgConfig, IErrorConfig, IFooterConfig, IGlobalSearchForm, ILazyLoadResponse, IMetaPagination, IPipeConfig, ITableNgConfig, ITableNgData, ITableNgLazyLoading } from './interfaces'\r\nimport { TableNgEditService } from './services/table-ng-edit.service'\r\nimport { TableNgService } from './services/table-ng.service'\r\nimport { IPrimeNgSelection, IColumnPrimeNg } from '../interfaces'\r\n\r\n\r\n@Component({\r\n selector: 'app-table-ng',\r\n imports: [\r\n CommonModule,\r\n TableModule,\r\n ButtonNgComponent,\r\n ToolbarNgComponent,\r\n FormComponent,\r\n KeyToDisplayNamePipe,\r\n FormsModule,\r\n InlineInputComponent,\r\n AminatedContainerComponent,\r\n BadgeNgComponent,\r\n HttpMessageComponent\r\n ],\r\n templateUrl: './table-ng.component.html',\r\n styleUrl: './table-ng.component.scss',\r\n providers: [TableNgService, TableNgEditService],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TableNgComponent<T extends Record<string, any> = Record<string, any>> implements OnInit, OnDestroy {\r\n private readonly tableNgService = inject(TableNgService)\r\n private readonly tableNgEditService = inject(TableNgEditService)\r\n // private readonly dialogService = inject(CustomDialogService)\r\n\r\n readonly data = model.required<ITableNgData<T>[]>()\r\n\r\n // Loading state management\r\n private loadingTimeout: any = null\r\n protected isLoading = signal<boolean>(false)\r\n protected timeoutExpired = signal<boolean>(false)\r\n readonly config = model<ITableNgConfig>()\r\n readonly editConfig = model<IEditTableNgConfig<T>>()\r\n readonly footerConfig = model<IFooterConfig>()\r\n public toolbarButtons = model<IButtonConfig[]>([])\r\n public sourceElements = model<IPickListElement[]>([])\r\n public targetElements = model<IPickListElement[]>([])\r\n public httpMessage = model<IHttpMessage>()\r\n\r\n public lazyLoading = output<ILazyLoadResponse>()\r\n public outputChangeData = output<ITableNgData<T>[]>()\r\n public outputHandleEditInitButton = output<ITableNgData<T>>()\r\n public outputAddRow = output<ITableNgData<T>[]>()\r\n public outputDeleteRow = output<ITableNgData<T>>()\r\n public outputRowInlineChange = output<T>()\r\n public outputRowDataChange = output<ITableNgData<T>>()\r\n public outputEditData = output<ITableNgData<T>[]>()\r\n public outputIsEditing = output<boolean>()\r\n\r\n public resetData(): void {\r\n this.data.set([])\r\n }\r\n\r\n advancedFiltersPerformed: string[] = []\r\n advancedFiltersValues: WritableSignal<Record<string, Record<string, any>>> = signal({})\r\n @ViewChild('dt') dt!: Table\r\n\r\n private readonly fb = inject(NonNullableFormBuilder)\r\n constructor() {\r\n this.tableNgEditService.setEditConfig(this.editConfig())\r\n this.tableNgEditService.setKeysNames(this.config()?.keysNames ?? {})\r\n\r\n effect(() => {\r\n this.outputChangeData.emit([...this.data()])\r\n })\r\n\r\n // Effect para gestionar el loading basado en el estado de data\r\n effect(() => {\r\n const currentData = this.data()\r\n\r\n // Limpiar el timeout anterior si existe\r\n if (this.loadingTimeout) {\r\n clearTimeout(this.loadingTimeout)\r\n this.loadingTimeout = null\r\n }\r\n\r\n if (currentData.length === 0) {\r\n // Si data está vacío, activar loading\r\n this.isLoading.set(true)\r\n\r\n this.loadingTimeout = setTimeout(() => {\r\n if (this.data().length === 0) {\r\n this.isLoading.set(false)\r\n this.timeoutExpired.set(true)\r\n }\r\n }, 0)\r\n } else {\r\n // Si hay data, desactivar loading y resetear timeout\r\n this.isLoading.set(false)\r\n this.timeoutExpired.set(false)\r\n }\r\n })\r\n }\r\n ngOnInit(): void {\r\n this.tableNgService.setInitialValue([...this.data()])\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Limpiar el timeout al destruir el componente\r\n if (this.loadingTimeout) {\r\n clearTimeout(this.loadingTimeout)\r\n this.loadingTimeout = null\r\n }\r\n }\r\n\r\n get hideToolbar(): boolean { return this.config()?.hideToolbar ?? false }\r\n\r\n /**\r\n * Calcula el número total de columnas para el colspan del mensaje vacío\r\n */\r\n protected totalColumns: Signal<number> = computed(() => {\r\n const selectedColumns = this.config()?.selectedColumns ?? []\r\n const baseColumns = selectedColumns.length > 0 ? selectedColumns.length : this.keys().length\r\n const selectionColumn = this.config()?.selectionTableConfig?.isEnabled ? 1 : 0\r\n const expansionColumn = this.config()?.rowExpansionConfig?.isEnabled ? 1 : 0\r\n const editColumn = (this.editConfig()?.type === 'row' || this.editConfig()?.type === 'cell') && this.editConfig()?.isEnabled ? 1 : 0\r\n\r\n return baseColumns + selectionColumn + expansionColumn + editColumn\r\n })\r\n\r\n isPrimeNgSelection(value: any): boolean {\r\n return PrimeNgUtil.isPrimeNgSelection(value)\r\n }\r\n\r\n hasErrorValues(object: Record<string, IErrorConfig>): boolean {\r\n return Object.keys(object).length > 0\r\n }\r\n\r\n private rowFieldsValue: WritableSignal<Record<string, string | number | boolean | null | IPrimeNgSelection<string | boolean>>> = signal({})\r\n public rowFieldsHasValue: Signal<Record<string, boolean>> = computed(() => {\r\n return Object.keys(this.rowFieldsValue()).reduce((acc, key: string) => {\r\n acc[key] = !!this.rowFieldsValue()[key]\r\n return acc\r\n }, {} as Record<string, boolean>)\r\n })\r\n\r\n inlineChange(value: string | number | boolean | null | IPrimeNgSelection<string | boolean>, key: string) {\r\n this.rowFieldsValue.update((prev: Record<string, string | number | boolean | null | IPrimeNgSelection<string | boolean>>) => {\r\n return { ...prev, [key]: value }\r\n })\r\n this.outputRowInlineChange.emit({ ...this.rowFieldsValue() } as T)\r\n }\r\n\r\n trackById(index: number, item: { id: any }): any {\r\n return item.id\r\n }\r\n\r\n frozenHandle(value: boolean | undefined): boolean {\r\n return value ? value : false\r\n }\r\n\r\n isDate(value: any): boolean {\r\n return value instanceof Date\r\n }\r\n\r\n onFilter(event: TableFilterEvent) {\r\n const filters = event.filters\r\n if (!filters) return\r\n const global: undefined | Record<string, any> = filters['global']\r\n if (!global?.['value']) {\r\n this.handleAdvancedFiltersPerformed(filters)\r\n }\r\n }\r\n\r\n resetRowDatas(): void {\r\n this.data.update((data: ITableNgData<T>[]) => {\r\n return data.map((item: ITableNgData<T>) => {\r\n return {\r\n ...item,\r\n rowData: {} as T\r\n }\r\n })\r\n })\r\n }\r\n\r\n get ETypeInput(): typeof ETypeInput {\r\n return ETypeInput\r\n }\r\n\r\n handleAdvancedFiltersPerformed(filters: TableFilterEvent['filters']) {\r\n if (!filters) return\r\n const entriesFilters = Object.entries(filters)\r\n const keysColumn = this.config()?.keys ?? []\r\n entriesFilters.forEach(([key, value]) => {\r\n const valueArray = value as FilterMetadata[]\r\n const hasValue = !!valueArray[0]?.value\r\n const keyColumn = key.split('.')[1]\r\n\r\n if (keysColumn.includes(keyColumn)) {\r\n const index = this.advancedFiltersPerformed.indexOf(keyColumn)\r\n if (hasValue && index === -1) {\r\n // Agregar si no existe\r\n this.advancedFiltersPerformed.push(keyColumn)\r\n } else if (!hasValue && index !== -1) {\r\n // Quitar si ya no tiene valor\r\n this.advancedFiltersPerformed.splice(index, 1)\r\n }\r\n }\r\n\r\n })\r\n }\r\n\r\n numberOfRecords: Signal<number> = computed(() => {\r\n return this.data().length ?? 0\r\n })\r\n\r\n hasRecords: Signal<boolean> = computed(() => {\r\n return this.numberOfRecords() > 0\r\n })\r\n\r\n /**\r\n * Computed que valida si al menos una fila tiene datos válidos en rowData.\r\n * Retorna true si al menos una fila tiene un valor que no sea '', null o undefined.\r\n * Retorna false si todas las filas tienen valores vacíos, null o undefined.\r\n */\r\n hasValidRowData: Signal<boolean> = computed(() => {\r\n const data = this.data()\r\n\r\n return data.some(item => {\r\n if (!item?.rowData || typeof item.rowData !== 'object') {\r\n return false\r\n }\r\n\r\n const values = Object.values(item.rowData)\r\n\r\n // Verificar si al menos un valor es válido (no vacío, null o undefined)\r\n return values.some(value => {\r\n if (value === null || value === undefined || value === '') {\r\n return false\r\n }\r\n // Si es string, verificar que no esté vacío después de trim\r\n if (typeof value === 'string') {\r\n return value.trim() !== ''\r\n }\r\n // Para otros tipos (números, fechas, booleanos, etc.)\r\n return true\r\n })\r\n })\r\n })\r\n\r\n readonly keys: Signal<string[]> = computed(() => {\r\n return this.config()?.keys ?? []\r\n })\r\n\r\n onRowClick(item: ITableNgData<T>) {\r\n item.onClick()\r\n }\r\n\r\n //#region Scroll Config\r\n protected scrollHeight: Signal<string> = computed(() => {\r\n const scrollHeightInitial = this.config()?.scrollConfig?.scrollHeight ?? '58vh'\r\n let res: string = scrollHeightInitial\r\n if (this.showBottomToolbar()) {\r\n const { number: size, unit } = this.parseValue(scrollHeightInitial)\r\n\r\n res = `${size - 7.6}${unit}`\r\n }\r\n return res\r\n })\r\n\r\n private parseValue(str: string): { number: number, unit: string } {\r\n const match = str.match(/^(-?\\d+\\.?\\d*)(.*)$/)\r\n\r\n if (match) {\r\n return {\r\n number: parseFloat(match[1]),\r\n unit: match[2]\r\n }\r\n }\r\n\r\n return { number: 0, unit: '' }\r\n }\r\n //#endregion\r\n\r\n //#region Paginator Config\r\n paginatorStyleClass: Signal<string> = computed(() => {\r\n if (this.showBottomToolbar()) {\r\n return 'p-datatable-paginator p-datatable-paginator-bottom sticky bottom-18 z-10'\r\n }\r\n return 'p-datatable-paginator p-datatable-paginator-bottom sticky bottom-2 z-10'\r\n })\r\n //#endregion\r\n\r\n //#region toolbar config\r\n showBottomToolbar: Signal<boolean> = computed(() => {\r\n return this.showManagementSelectionConfig()\r\n })\r\n //#endregion\r\n\r\n //#region Clear Filters\r\n clearFilters() {\r\n this.tableNgService.clearSearchInput()\r\n this.advancedFiltersPerformed = []\r\n this.advancedFiltersValues.set({})\r\n this.dt.clear()\r\n this.targetElements.set([])\r\n this.handleTableValueToSourceElements()\r\n this.selectedItems.set([])\r\n }\r\n\r\n get filteredValue(): boolean {\r\n return !!this.dt?.filteredValue && this.dt.filteredValue.length > 0\r\n }\r\n\r\n clearFiltersButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-filter-circle-xmark',\r\n rounded: true,\r\n raised: true,\r\n severity: 'contrast',\r\n tooltipConfig: {\r\n pTooltip: 'Limpiar filtros'\r\n },\r\n onClick: () => {\r\n this.clearFilters()\r\n }\r\n }\r\n })\r\n //#endregion\r\n\r\n //#region Global Filter\r\n get controlsGlobalFilter(): IControlConfig[] {\r\n return this.tableNgService.controls()\r\n }\r\n get searchFormGroupGlobalFilter(): FormGroup {\r\n return this.tableNgService.searchFormGroup()\r\n }\r\n\r\n submitGlobalSearch(formGroup: FormGroup<IGlobalSearchForm>) {\r\n this.dt.globalFilterFields = this.config()?.globalFilterConfig?.globalFilterFields ?? []\r\n this.tableNgService.submitGlobalSearch(formGroup, this.dt)\r\n }\r\n //#endregion\r\n\r\n //#region SORT\r\n customSort(event: SortEvent) {\r\n this.tableNgService.customSort(event)\r\n }\r\n //#endregion\r\n\r\n //#region Selection\r\n selectedItems = model<ITableNgData<T>[]>([])\r\n protected totalItemsSelected: Signal<number> = computed(() => this.selectedItems().length)\r\n protected showManagementSelectionConfig: Signal<boolean> = computed(() => this.totalItemsSelected() > 0 && (this.config()?.selectionTableConfig?.showManagementConfig ?? false))\r\n\r\n protected buttonTotalItemsSelected: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n label: this.totalItemsSelected().toLocaleString(),\r\n variant: 'text',\r\n rounded: true\r\n }\r\n })\r\n\r\n protected showSelectedItemsManagementButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-eye',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'secondary',\r\n onClick: () => {\r\n this.openModalManagementSelectedItems()\r\n }\r\n }\r\n })\r\n\r\n openModalManagementSelectedItems() {\r\n this.tableNgService.openModalManagementSelectedItems(this.selectedItems, this.config())\r\n .then(() => { })\r\n .catch(() => { })\r\n }\r\n //#endregion\r\n\r\n //#region Custom Filter\r\n inlineFormChanges(inlineValue: unknown, filter: (value: any) => void, typeInput?: ETypeInput, key?: string): void {\r\n const lazyLoadingConfig = this.config()?.lazyLoadingConfig\r\n if (typeInput === ETypeInput.MULTISELECT) {\r\n const options: IPrimeNgSelection[] | undefined = inlineValue ? inlineValue as IPrimeNgSelection[] : undefined\r\n const arrayValue: string[] | undefined = options ? options.map((data: IPrimeNgSelection) => lazyLoadingConfig?.isEnabled ? data.code : data.name) : undefined\r\n if (Array.isArray(arrayValue) && arrayValue.length === 0) {\r\n if (key) {\r\n this.advancedFiltersValues.update((prev: Record<string, any>) => {\r\n const { [key]: _value, ...rest } = prev\r\n return { ...rest }\r\n })\r\n }\r\n }\r\n if (inlineValue && (Array.isArray(arrayValue) && arrayValue.length > 0)) {\r\n filter(arrayValue)\r\n }\r\n }\r\n }\r\n formChanges(formValue: Record<string, any>, filter: (value: any) => void, key: string): void {\r\n\r\n if (Array.isArray(formValue['multiSelect'])) {\r\n this.advancedFiltersValues.update((prev: Record<string, Record<string, any>>) => {\r\n return { ...prev, [key]: formValue }\r\n })\r\n }\r\n if (!Array.isArray(formValue['multiSelect']) && this.advancedFiltersValues()?.[key]) {\r\n this.advancedFiltersValues.update((prev: Record<string, any>) => {\r\n const { [key]: _value, ...rest } = prev\r\n return { ...rest }\r\n })\r\n }\r\n const arrayValue: string[] = Array.isArray(formValue['multiSelect'])\r\n ? (formValue['multiSelect'] as IPrimeNgSelection[]).map((data) => data.code)\r\n : []\r\n\r\n if (arrayValue.length > 0) {\r\n filter(arrayValue)\r\n }\r\n }\r\n\r\n rowDataKey(key: string) {\r\n return `rowData.${key}`\r\n }\r\n //#endregion\r\n\r\n //#region Lazy Loading\r\n\r\n onLazyLoad(event: TableLazyLoadEvent) {\r\n const filters: Record<string, FilterMetadata | FilterMetadata[] | undefined> = event.filters ?? {}\r\n const filtersWithValue = this.getFiltersWithValue(filters)\r\n\r\n const metaPagination: IMetaPagination = {\r\n limit: event.rows ?? undefined,\r\n skip: event.first ?? undefined\r\n }\r\n if (event.sortOrder) {\r\n metaPagination.sortOrder = event.sortOrder === 1 ? 'ASC' : 'DESC'\r\n }\r\n if (event.sortField) {\r\n metaPagination.sortBy = event.sortField as 'createdAt' | 'updatedAt'\r\n }\r\n const lazyLoadResponse: ILazyLoadResponse = {\r\n filters: filtersWithValue,\r\n metaPagination\r\n }\r\n this.lazyLoading.emit(lazyLoadResponse)\r\n }\r\n\r\n private getFiltersWithValue(filters: Record<string, FilterMetadata | FilterMetadata[] | undefined>): Record<string, FilterMetadata | FilterMetadata[]> {\r\n const result: Record<string, FilterMetadata | FilterMetadata[]> = {}\r\n\r\n Object.entries(filters).forEach(([key, filter]) => {\r\n const keyColumn = key.split('.')[1]\r\n if (!filter) return\r\n\r\n if (Array.isArray(filter)) {\r\n // Si es un array, filtrar solo los elementos que tienen value\r\n const filtersWithValue = filter.filter(f => f.value !== undefined && f.value !== null && f.value !== '')\r\n if (filtersWithValue.length > 0) {\r\n result[keyColumn] = filtersWithValue\r\n }\r\n } else {\r\n // Si es un objeto único, verificar si tiene value\r\n if (filter.value !== undefined && filter.value !== null && filter.value !== '') {\r\n result[keyColumn] = filter\r\n }\r\n }\r\n })\r\n\r\n return result\r\n }\r\n //#endregion\r\n\r\n //#region Edit\r\n onCellValueChange() {\r\n this.updateDataWithTableValue()\r\n }\r\n\r\n onRowDataChange(_data: ITableNgData<T>) {\r\n }\r\n\r\n onEditData() {\r\n this.updateDataWithTableValue()\r\n this.outputEditData.emit([...this.data()])\r\n }\r\n\r\n get controlsEdit(): IControlConfig[] {\r\n return this.tableNgEditService.controls()\r\n }\r\n\r\n get searchFormGroupEdit(): FormGroup {\r\n return this.tableNgEditService.searchFormGroup()\r\n }\r\n\r\n customControlConfig(key: string, value: any): IControlConfig {\r\n return {\r\n controlName: key,\r\n control: this.fb.control(value),\r\n typeInput: ETypeInput.TEXT\r\n }\r\n }\r\n\r\n cellFormGroup: FormGroup = this.fb.group({})\r\n\r\n //#region Row\r\n\r\n addRowButton: Signal<IButtonConfig> = computed(() => {\r\n const editConfig = this.editConfig()\r\n const isDisabled = editConfig?.type === 'cell'\r\n ? (editConfig?.cellEditConfig?.isDisabledAddButton ?? false)\r\n : (editConfig?.rowEditConfig?.isDisabledAddButton ?? false) || this.hasRowInEdit\r\n\r\n const button: IButtonConfig = {\r\n icon: 'fa-solid fa-plus',\r\n rounded: true,\r\n severity: 'success',\r\n tooltipConfig: {\r\n pTooltip: 'Agregar registro',\r\n tooltipPosition: 'top'\r\n },\r\n onClick: () => {\r\n this.addRow()\r\n },\r\n disabled: isDisabled\r\n }\r\n return button\r\n })\r\n\r\n public addRow(): void {\r\n const editConfig = this.editConfig()\r\n // Si es modo cell y hay defaultTableNgData configurado, agregar la fila directamente\r\n if (editConfig?.type === 'cell' && editConfig?.cellEditConfig?.defaultTableNgData) {\r\n const newRow = this.editConfig()?.cellEditConfig?.defaultTableNgData\r\n if (newRow) {\r\n this.data.update(currentData => [...currentData, newRow])\r\n this.outputChangeData.emit(this.data())\r\n return\r\n }\r\n }\r\n\r\n // Comportamiento original para modo row o cuando no hay defaultTableNgData\r\n this.outputAddRow.emit(this.data())\r\n this.setEditingRowId(null)\r\n }\r\n\r\n private defaultTableNgData: Signal<ITableNgData<T>> = computed(() => {\r\n const editConfig = this.editConfig()\r\n let defaultData: ITableNgData<T> | undefined\r\n\r\n // Usar la configuración apropiada según el tipo de edición\r\n if (editConfig?.type === 'cell' && editConfig?.cellEditConfig?.defaultTableNgData) {\r\n defaultData = editConfig.cellEditConfig.defaultTableNgData\r\n } else if (editConfig?.type === 'row' && editConfig?.rowEditConfig?.defaultTableNgData) {\r\n defaultData = editConfig.rowEditConfig.defaultTableNgData\r\n }\r\n\r\n const res = { ...defaultData } as ITableNgData<T>\r\n return {\r\n ...res,\r\n id: generateId()\r\n }\r\n })\r\n\r\n private clonedRowData: T | null = null\r\n private editingRowId: WritableSignal<string | null> = signal(null)\r\n\r\n /**\r\n * Verifica si una fila específica está siendo editada\r\n */\r\n isRowEditing(id: string): boolean {\r\n return this.editingRowId() === id\r\n }\r\n\r\n /**\r\n * Verifica si hay alguna fila siendo editada actualmente\r\n */\r\n get hasRowInEdit(): boolean {\r\n return this.editingRowId() !== null\r\n }\r\n\r\n onRowEditInit(data: ITableNgData<T>) {\r\n // Verificar si ya hay una fila en edición\r\n\r\n this.clonedRowData = structuredClone(data.rowData)\r\n this.setEditingRowId(data.id)\r\n this.outputHandleEditInitButton.emit(data)\r\n }\r\n\r\n private setEditingRowId(id: string | null) {\r\n this.editingRowId.set(id)\r\n this.outputIsEditing.emit(true)\r\n }\r\n\r\n onRowEditSave(_data: ITableNgData<T>) {\r\n this.clonedRowData = null\r\n this.editingRowId.set(null)\r\n this.updateDataWithTableValue()\r\n this.setEnableErrors(false)\r\n this.outputIsEditing.emit(false)\r\n this.outputRowDataChange.emit(_data)\r\n }\r\n\r\n onRowEditCancel(data: ITableNgData<T>, index: number) {\r\n if (this.clonedRowData && this.editingRowId() === data.id) {\r\n const items = [...this.data()]\r\n items[index] = { ...items[index], rowData: this.clonedRowData }\r\n this.data.set(items)\r\n }\r\n this.clonedRowData = null\r\n this.setEditingRowId(null)\r\n this.setEnableErrors(false)\r\n this.outputIsEditing.emit(false)\r\n }\r\n\r\n private updateDataWithTableValue() {\r\n const tableValue = (this.dt.value ?? []) as ITableNgData<T>[]\r\n this.data.set([...tableValue])\r\n }\r\n\r\n editInitButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-pencil',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'secondary'\r\n }\r\n })\r\n\r\n getEditInitButton(productId: string): IButtonConfig {\r\n return {\r\n ...this.editInitButton(),\r\n disabled: this.hasRowInEdit && !this.isRowEditing(productId)\r\n }\r\n }\r\n\r\n editSaveButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-check',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'secondary'\r\n }\r\n })\r\n\r\n editSaveButtonWithErrors: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-check',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'secondary'\r\n }\r\n })\r\n\r\n enableErrors: boolean = false\r\n setEnableErrors(value: boolean) {\r\n this.enableErrors = value\r\n }\r\n\r\n onEditSaveWithErrors() {\r\n this.setEnableErrors(true)\r\n }\r\n\r\n editCancelButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-times',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'secondary'\r\n }\r\n })\r\n\r\n deleteRowButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'fa-solid fa-trash',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'danger'\r\n }\r\n })\r\n\r\n getDeleteRowButton(): IButtonConfig {\r\n return {\r\n ...this.deleteRowButton(),\r\n disabled: this.hasRowInEdit\r\n }\r\n }\r\n\r\n removeRowFromData(data: ITableNgData<T>) {\r\n const { id } = data\r\n const items = [...this.data()]\r\n items.splice(items.findIndex(item => item.id === id), 1)\r\n this.data.set(items)\r\n this.outputDeleteRow.emit(data)\r\n }\r\n\r\n deleteRow(data: ITableNgData<T>) {\r\n this.removeRowFromData(data)\r\n this.outputEditData.emit(this.data())\r\n }\r\n //#endregion Row\r\n\r\n get footerRows() {\r\n return this.footerConfig()?.footerRows || []\r\n }\r\n\r\n applyPipe(value: any, pipeConfig?: IPipeConfig): string {\r\n if (!pipeConfig || !pipeConfig.pipe) {\r\n return value?.toString() || ''\r\n }\r\n\r\n switch (pipeConfig.pipe) {\r\n case 'currency': {\r\n const currencyCode = pipeConfig.args?.[0] || 'COP'\r\n return new Intl.NumberFormat('es-CO', {\r\n style: 'currency',\r\n currency: currencyCode\r\n\r\n }).format(value)\r\n }\r\n\r\n case 'number': {\r\n const digits = pipeConfig.args?.[0] || '1.2-2'\r\n const [minInteger, fractional] = digits.split('.')\r\n const [minFractional, maxFractional] = fractional ? fractional.split('-') : ['0', '0']\r\n return new Intl.NumberFormat('es-CO', {\r\n minimumIntegerDigits: parseInt(minInteger),\r\n minimumFractionDigits: parseInt(minFractional),\r\n maximumFractionDigits: parseInt(maxFractional || minFractional)\r\n }).format(value)\r\n }\r\n\r\n case 'date': {\r\n if (value instanceof Date) {\r\n return value.toLocaleDateString('es-CO')\r\n }\r\n return value?.toString() || ''\r\n }\r\n\r\n default:\r\n return value?.toString() || ''\r\n }\r\n }\r\n\r\n // #endregion\r\n //#region Row Expansion\r\n protected rowExpansionButton(isRowExpanded: boolean): Signal<IButtonConfig> {\r\n return computed(() => {\r\n return {\r\n icon: isRowExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right',\r\n rounded: true,\r\n variant: 'text',\r\n severity: 'contrast'\r\n }\r\n })\r\n }\r\n //#endregion\r\n\r\n itemTemplateInput = input<TemplateRef<{ $implicit: T }> | null>(null)\r\n @ContentChild('item', { static: true }) itemTemplate!: TemplateRef<{ $implicit: T }>\r\n get currentItemTemplate(): TemplateRef<{ $implicit: T }> | null {\r\n return this.itemTemplateInput() || this.itemTemplate || null\r\n }\r\n\r\n isThatItemInTheProductSelection(field: string): boolean {\r\n const selectedColumns = this.config()?.selectedColumns ?? []\r\n if (!selectedColumns.length) {\r\n return true\r\n }\r\n return selectedColumns.some((column: IColumnPrimeNg) => column.field === field)\r\n }\r\n\r\n //#region Advanced Identifier Filters\r\n advancedIdentifierFiltersButton: Signal<IButtonConfig> = computed(() => {\r\n return {\r\n icon: 'pi pi-filter',\r\n rounded: true,\r\n severity: 'warn',\r\n raised: true,\r\n tooltipConfig: {\r\n pTooltip: this.data().length === 0 ? 'No hay datos para filtrar' : 'Filtros avanzados',\r\n tooltipPosition: 'top'\r\n },\r\n onClick: () => {\r\n this.openAdvancedIdentifierFilters()\r\n },\r\n disabled: this.data().length === 0\r\n }\r\n })\r\n openAdvancedIdentifierFilters() {\r\n if (this.sourceElements().length === 0) {\r\n this.handleTableValueToSourceElements()\r\n }\r\n this.handleSelectedItemsToSourceElements()\r\n if (this.data().length === 0) {\r\n return\r\n }\r\n // const ref = this.dialogService.open(ModalAdvancedFilterComponent, {\r\n // header: 'Filtros Avanzados',\r\n // width: '70%',\r\n // height: '70%',\r\n // styleClass: 'overflow-hidden',\r\n // data: {\r\n // sourceElements: this.sourceElements(),\r\n // targetElements: this.targetElements()\r\n // }\r\n // })\r\n // ref.onClose.subscribe((result: { success: boolean, data: { sourceElements: IPickListElement[], targetElements: IPickListElement[] } }) => {\r\n // const { sourceElements, targetElements } = result?.data ?? {}\r\n // if (!result?.success) {\r\n // return\r\n // }\r\n // if (result?.data?.targetElements?.length === 0) {\r\n // return\r\n // }\r\n // if (sourceElements.length === 0) {\r\n // return\r\n // }\r\n // this.sourceElements.set(sourceElements ?? [])\r\n // this.targetElements.set(targetElements ?? [])\r\n // this.identifiersSelected.set((this.targetElements() ?? []).filter((element: IPickListElement) => element.buttonConfig?.label).map((element: IPickListElement) => element.buttonConfig?.label as string) ?? [])\r\n // this.dt.filter(this.identifiersSelected(), 'rowData.identifier', 'arrayStringFilter')\r\n // })\r\n }\r\n private handleTableValueToSourceElements(): void {\r\n const value = this.data()\r\n if (!value.some((item: ITableNgData<T>) => item.rowData['identifier'])) {\r\n return\r\n }\r\n const sourceElements: IPickListElement[] = value.map((item: ITableNgData<T>) => ({\r\n id: item.id,\r\n buttonConfig: {\r\n label: item.rowData['identifier'],\r\n fullWidth: true,\r\n fullHeight: true\r\n },\r\n isSelected: false\r\n }))\r\n this.sourceElements.set(sourceElements)\r\n }\r\n private handleSelectedItemsToSourceElements(): void {\r\n const selectedItems: ITableNgData<T>[] = this.selectedItems()\r\n if (!selectedItems.some((item: ITableNgData<T>) => item.rowData['identifier'])) {\r\n return\r\n }\r\n const identifiers: string[] = selectedItems.map((item: ITableNgData<T>) => item.rowData['identifier'])\r\n const sourceElements: IPickListElement[] = this.sourceElements().map((item: IPickListElement) => ({\r\n ...item,\r\n isSelected: identifiers.includes(item.buttonConfig?.label as string)\r\n }))\r\n this.sourceElements.set(sourceElements)\r\n }\r\n private identifiersSelected: WritableSignal<string[]> = signal<string[]>([])\r\n //#endregion\r\n\r\n get excelButton(): IButtonConfig {\r\n return this.tableNgService.excelButton()\r\n }\r\n\r\n get pdfButton(): IButtonConfig {\r\n return this.tableNgService.pdfButton()\r\n }\r\n\r\n private lazyLoadingConfig: Signal<ITableNgLazyLoading | undefined> = computed(() => {\r\n return this.config()?.lazyLoadingConfig ?? undefined\r\n })\r\n private isEnabledLazyLoading: Signal<boolean> = computed(() => {\r\n return this.lazyLoadingConfig()?.isEnabled ?? false\r\n })\r\n\r\n private prepareDataForExport(dataToExport: ITableNgData<T>[]): Record<string, any>[] {\r\n const keys: string[] = this.config()?.keys ?? []\r\n const keysNames: Record<string, string> = this.config()?.keysNames ?? {}\r\n return dataToExport.map((item: ITableNgData<T>) => {\r\n const row: Record<string, any> = {}\r\n const rowData: T = item.rowData\r\n keys.forEach((key: string) => {\r\n const keyName: string = keysNames[key] ?? key\r\n if (rowData[key]) {\r\n let value = rowData[key]\r\n switch (typeof value) {\r\n\r\n case 'number':\r\n value = formatNumber(value)\r\n break\r\n\r\n default:\r\n break\r\n }\r\n row[keyName] = value\r\n }\r\n })\r\n return row\r\n })\r\n }\r\n\r\n exportCSV(data: Record<string, T>[]) {\r\n // Create a new workbook\r\n const workbook = XLSX.utils.book_new()\r\n const worksheet = XLSX.utils.json_to_sheet(data)\r\n\r\n // Get title from config or use default\r\n const name = this.config()?.excelConfig?.name ?? 'Report'\r\n const fileName = name || 'table-export'\r\n\r\n // Excel sheet names cannot exceed 31 characters\r\n const sheetName = name.substring(0, 31)\r\n\r\n // Add the worksheet to the workbook\r\n XLSX.utils.book_append_sheet(workbook, worksheet, sheetName)\r\n\r\n // Generate Excel file and trigger download\r\n XLSX.writeFile(workbook, `${fileName}.xlsx`)\r\n }\r\n\r\n protected exportData(dt: Table, endpoint: 'excel' | 'pdf'): void {\r\n if (this.isEnabledLazyLoading()) {\r\n const filters: Record<string, any> = dt.filters ?? {}\r\n const filterQuery: Record<string, any> = {}\r\n Object.entries(filters).forEach(([key, value]) => {\r\n const keyName = key.split('.')[1]\r\n const valueFilter = value[0]?.value\r\n filterQuery[keyName] = valueFilter\r\n })\r\n this.lazyLoadingConfig()?.excelLazyLoadingConfig?.callback(removeNullUndefined<Record<string, any>>(filterQuery))\r\n .subscribe((response: ITableNgData<any>[]) => {\r\n const data: Record<string, T>[] = this.prepareDataForExport(response)\r\n if (endpoint === 'excel') {\r\n this.exportCSV(data)\r\n } else {\r\n this.exportPDF(data)\r\n }\r\n })\r\n } else {\r\n const value: ITableNgData<T>[] = dt.value ?? this.data()\r\n const filteredValue: ITableNgData<T>[] = dt.filteredValue ?? []\r\n let dataToExport: ITableNgData<T>[] = []\r\n\r\n if (filteredValue.length > 0) {\r\n dataToExport = filteredValue\r\n } else {\r\n dataToExport = value\r\n }\r\n const data: Record<string, T>[] = this.prepareDataForExport(dataToExport)\r\n if (endpoint === 'excel') {\r\n this.exportCSV(data)\r\n } else {\r\n this.exportPDF(data)\r\n }\r\n }\r\n }\r\n\r\n exportPDF(data: Record<string, T>[]) {\r\n // Get title from config or use default\r\n const name = this.config()?.pdfConfig?.name ?? this.config()?.excelConfig?.name ?? 'Report'\r\n const fileName = name || 'table-export'\r\n\r\n // Get keys and column names\r\n const keys: string[] = this.config()?.keys ?? []\r\n const keysNames: Record<string, string> = this.config()?.keysNames ?? {}\r\n\r\n // Prepare headers\r\n const headers: string[] = keys.map((key: string) => keysNames[key] ?? key)\r\n\r\n // Prepare rows data\r\n const rows: any[][] = data.map((row: Record<string, T>) => {\r\n return keys.map((key: string) => {\r\n const keyName: string = keysNames[key] ?? key\r\n return row[keyName] ?? ''\r\n })\r\n })\r\n\r\n // Create PDF document\r\n const doc = new jsPDF({\r\n orientation: 'landscape',\r\n unit: 'mm',\r\n format: 'a4'\r\n })\r\n\r\n // Add title\r\n doc.setFontSize(16)\r\n doc.text(name, 14, 15)\r\n\r\n // Add table\r\n autoTable(doc, {\r\n head: [headers],\r\n body: rows,\r\n startY: 20,\r\n styles: {\r\n fontSize: 8,\r\n cellPadding: 2\r\n },\r\n headStyles: {\r\n fillColor: [66, 139, 202],\r\n textColor: 255,\r\n fontStyle: 'bold'\r\n },\r\n alternateRowStyles: {\r\n fillColor: [245, 245, 245]\r\n },\r\n margin: { top: 20 }\r\n })\r\n\r\n // Save PDF\r\n doc.save(`${fileName}.pdf`)\r\n }\r\n\r\n enableExcelButton: Signal<boolean> = computed(() => {\r\n return this.config()?.excelConfig?.isEnabled ?? false\r\n })\r\n\r\n enablePdfButton: Signal<boolean> = computed(() => {\r\n return this.config()?.pdfConfig?.isEnabled ?? false\r\n })\r\n}\r\n","@let paginationConfig = config()?.paginationConfig;\r\n@let globalFilterConfig = config()?.globalFilterConfig;\r\n@let selectionTableConfig = config()?.selectionTableConfig;\r\n@let filterConfigByKey = config()?.filterConfigByKey;\r\n@let frozenColumnConfigByKey = config()?.frozenColumnConfigByKey;\r\n@let scrollConfig = config()?.scrollConfig;\r\n@let lazyLoadingConfig = config()?.lazyLoadingConfig;\r\n@let keysNames = config()?.keysNames;\r\n@let columnConfig = config()?.columnConfig;\r\n@let editEnabled = editConfig()?.isEnabled ?? false;\r\n@let editType = editConfig()?.type ?? 'cell';\r\n@let inlineControls = editConfig()?.inlineControls;\r\n@let rowErrorConfig = editConfig()?.rowEditConfig?.rowErrorConfig;\r\n@let footerRows = footerConfig()?.footerRows;\r\n@let footerEnabled = footerConfig()?.isEnabled ?? false;\r\n@let titleConfig = config()?.titleConfig;\r\n@let selectedColumns = config()?.selectedColumns;\r\n@let rowExpansionConfig = config()?.rowExpansionConfig;\r\n@let advancedIdentifierFiltersConfig = config()?.globalFilterConfig?.advancedIdentifierFiltersConfig;\r\n\r\n<app-aminated-container>\r\n <div class=\"p-datatable-wrapper\">\r\n @if (titleConfig?.isEnabled && titleConfig?.title) {\r\n <div class=\"table-title-container\">\r\n <h2 class=\"table-title\">{{ titleConfig!.title }}</h2>\r\n </div>\r\n }\r\n @if (!hideToolbar || (filteredValue || advancedFiltersPerformed.length > 0)) {\r\n <app-toolbar-ng class=\"p-toolbar-header sticky top-0 z-30 dark:bg-gray-800\">\r\n <div class=\"flex gap-2\" toolbarStart>\r\n @if (globalFilterConfig?.isEnabled && !lazyLoadingConfig?.isEnabled) {\r\n <app-form [controls]=\"controlsGlobalFilter\" [(formGroup)]=\"searchFormGroupGlobalFilter\"\r\n (formSubmit)=\"submitGlobalSearch($event)\"></app-form>\r\n }\r\n @if (advancedIdentifierFiltersConfig?.isEnabled) {\r\n <app-button-ng class=\"animate__animated animate__fadeIn\"\r\n [buttonConfig]=\"advancedIdentifierFiltersButton()\"></app-button-ng>\r\n }\r\n @if (filteredValue || advancedFiltersPerformed.length > 0) {\r\n <app-button-ng class=\"animate__animated animate__fadeIn\" [buttonConfig]=\"clearFiltersButton()\"></app-button-ng>\r\n }\r\n </div>\r\n <div class=\"flex gap-2\" toolbarEnd>\r\n @if (toolbarButtons().length > 0) {\r\n @for (button of toolbarButtons(); track $index) {\r\n <app-button-ng [buttonConfig]=\"button\"></app-button-ng>\r\n }\r\n }\r\n @if ((editType === 'row' || editType === 'cell') && editEnabled) {\r\n <app-button-ng [buttonConfig]=\"addRowButton()\"></app-button-ng>\r\n }\r\n @if (enableExcelButton()) {\r\n <app-button-ng [buttonConfig]=\"excelButton\" (onClick)=\"exportData(dt,'excel')\"></app-button-ng>\r\n }\r\n @if (enablePdfButton()) {\r\n <app-button-ng [buttonConfig]=\"pdfButton\" (onClick)=\"exportData(dt,'pdf')\"></app-button-ng>\r\n }\r\n </div>\r\n </app-toolbar-ng>\r\n }\r\n <p-table #dt styleClass=\"p-datatable-sm\" [value]=\"data()\" [lazy]=\"lazyLoadingConfig?.isEnabled ?? false\"\r\n [editMode]=\"editType\" [totalRecords]=\"\r\n lazyLoadingConfig?.isEnabled\r\n ? (lazyLoadingConfig?.totalRecords ?? 0)\r\n : data().length\r\n \" [customSort]=\"true\" [paginator]=\"paginationConfig?.paginator ?? true\" [showCurrentPageReport]=\"true\"\r\n [rows]=\"paginationConfig?.rows ?? 5\" [rowsPerPageOptions]=\"paginationConfig?.rowsPerPageOptions ?? [5, 10, 20]\"\r\n [paginatorStyleClass]=\"paginatorStyleClass()\" [resizableColumns]=\"true\" [rowTrackBy]=\"trackById\"\r\n [columns]=\"selectedColumns\" [scrollable]=\"scrollConfig?.isEnabled ?? false\"\r\n [scrollHeight]=\"scrollConfig?.isEnabled ? scrollHeight() : undefined\" (onLazyLoad)=\"onLazyLoad($event)\"\r\n (sortFunction)=\"customSort($event)\" (onFilter)=\"onFilter($event)\" [(selection)]=\"selectedItems\"\r\n [currentPageReportTemplate]=\"'custom-page-report'\" selectionPageOnly=\"true\"\r\n dataKey=\"id\" class=\"w-full\">\r\n <ng-template #header let-columns>\r\n <tr>\r\n @if (rowExpansionConfig?.isEnabled) {\r\n <th alignFrozen=\"left\" pFrozenColumn style=\"width: 2rem\" class=\"p-datatable-header-cell p-frozen-column\">\r\n\r\n </th>\r\n }\r\n @if (selectionTableConfig?.isEnabled) {\r\n <th alignFrozen=\"left\" pFrozenColumn style=\"width: 2rem\" class=\"p-datatable-header-cell p-frozen-column\">\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n }\r\n\r\n @if (selectedColumns) {\r\n @for (column of columns; track $index) {\r\n <th pResizableColumn [id]=\"column.field\" alignFrozen=\"right\" pFrozenColumn\r\n [frozen]=\"frozenHandle(frozenColumnConfigByKey?.[column.field])\" [pSortableColumn]=\"column.field\"\r\n class=\"p-datatable-header-cell\" [style.width.%]=\"columnConfig?.sizeByKey?.[column.field] ?? null\" [ngClass]=\"{\r\n 'p-frozen-column': frozenHandle(\r\n frozenColumnConfigByKey?.[column.field]\r\n ),\r\n }\">\r\n <div class=\"flex gap-2 justify-center items-center py-0 px-0\">\r\n {{ column.field | keyToDisplayName: keysNames }}\r\n @if(!editEnabled){\r\n <p-sortIcon [field]=\"column.field\" />\r\n }\r\n @if (filterConfigByKey?.[column.field]?.isEnabled) {\r\n <p-columnFilter type=\"text\" [field]=\"`rowData.${column.field}`\" display=\"menu\" [ngClass]=\"{\r\n 'bg-green-200 rounded-full p-1 shadow-sm text-green-500 transition-all duration-300 ease-in-out':\r\n advancedFiltersPerformed.includes(column.field),\r\n }\" [type]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig?.type ??\r\n 'text'\r\n \" [matchMode]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.matchMode\r\n \" [showMatchModes]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.showMatchModes ?? false\r\n \" [showOperator]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.showOperator ?? false\r\n \" [showAddButton]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.showAddButton ?? false\r\n \" [showApplyButton]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.showApplyButton ?? false\r\n \" [showClearButton]=\"\r\n filterConfigByKey?.[column.field]?.primeNgColumnFilterConfig\r\n ?.showClearButton ?? false\r\n \">\r\n @if (\r\n filterConfigByKey?.[column.field]?.customColumnFilterConfig\r\n ?.isEnabled ?? false\r\n ) {\r\n <ng-template #filter let-value let-filter=\"filterCallback\">\r\n <div style=\"min-width: 20rem\" class=\"\">\r\n <app-inline-input \r\n (outputValue)=\"inlineFormChanges($event, filter, filterConfigByKey?.[column.field]?.customColumnFilterConfig?.inlineControlConfig?.typeInput, column.field)\" \r\n (outputDebounced)=\"onFilter($event)\"\r\n [(ngModel)]=\"advancedFiltersValues()[column.field]\" \r\n [config]=\"filterConfigByKey?.[column.field]?.customColumnFilterConfig?.inlineControlConfig ?? {typeInput: ETypeInput.TEXT}\"></app-inline-input>\r\n </div>\r\n </ng-template>\r\n }\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n }@else {\r\n @for (key of keys(); track $index) {\r\n <th [id]=\"key\" pResizableColumn alignFrozen=\"right\" pFrozenColumn\r\n [frozen]=\"frozenHandle(frozenColumnConfigByKey?.[key])\" [pSortableColumn]=\"key\"\r\n class=\"p-datatable-header-cell\" [style.width.%]=\"columnConfig?.sizeByKey?.[key] ?? null\" [ngClass]=\"{\r\n 'p-frozen-column': frozenHandle(frozenColumnConfigByKey?.[key]),\r\n }\">\r\n <div class=\"flex gap-2 justify-center items-center py-0 px-0\">\r\n {{ key | keyToDisplayName: keysNames }}\r\n @if(!editEnabled){\r\n <p-sortIcon [field]=\"key\" />\r\n }\r\n @if (filterConfigByKey?.[key]?.isEnabled) {\r\n <p-columnFilter type=\"text\" [field]=\"`rowData.${key}`\" display=\"menu\" [ngClass]=\"{\r\n 'bg-green-200 rounded-full p-1 shadow-sm text-green-500 transition-all duration-300 ease-in-out':\r\n advancedFiltersPerformed.includes(key),\r\n }\" [type]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.type ?? 'text'\"\r\n [matchMode]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.matchMode\"\r\n [showMatchModes]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.showMatchModes ?? false\"\r\n [showOperator]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.showOperator ?? false\"\r\n [showAddButton]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.showAddButton ?? false\"\r\n [showApplyButton]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.showApplyButton ?? false\"\r\n [showClearButton]=\"filterConfigByKey?.[key]?.primeNgColumnFilterConfig?.showClearButton ?? false\">\r\n @if (\r\n filterConfigByKey?.[key]?.customColumnFilterConfig\r\n ?.isEnabled ?? false\r\n ) {\r\n <ng-template #filter let-value let-filter=\"filterCallback\">\r\n <div style=\"min-width: 20rem\" class=\"\">\r\n <!-- <app-custom-advanced-filter filter\r\n [customColumnFilterConfig]=\"filterConfigByKey![key]!.customColumnFilterConfig!\"\r\n (formChanges)=\"formChanges($event, filter, key)\"\r\n [initialValue]=\"advancedFiltersValues[key]\"></app-custom-advanced-filter> -->\r\n <app-inline-input (outputValue)=\"inlineFormChanges($event, filter, filterConfigByKey?.[key]?.customColumnFilterConfig?.inlineControlConfig?.typeInput, key)\" [(ngModel)]=\"advancedFiltersValues()[key]\" [config]=\"filterConfigByKey?.[key]?.customColumnFilterConfig?.inlineControlConfig ?? {typeInput: ETypeInput.TEXT}\"></app-inline-input>\r\n </div>\r\n </ng-template>\r\n }\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n }\r\n\r\n @if (editType === 'cell' && editEnabled) {\r\n <th class=\"p-datatable-header-cell\" style=\"width: 100px\">\r\n </th>\r\n }\r\n @if (editType === 'row' && editEnabled) {\r\n <th class=\"p-datatable-header-cell\" style=\"width: 100px\">\r\n </th>\r\n }\r\n\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td [attr.colspan]=\"totalColumns()\">\r\n @if (isLoading()) {\r\n <!-- Estado de carga -->\r\n <div class=\"p-8 text-center\">\r\n <div class=\"flex flex-col items-center justify-center gap-4\">\r\n <i class=\"pi pi-spin pi-spinner text-4xl text-blue-500\"></i>\r\n <p class=\"text-gray-600 text-lg\">{{ '' }}</p>\r\n </div>\r\n </div>\r\n } @else if (timeoutExpired()) {\r\n <!-- Timeout expirado sin datos -->\r\n <div class=\"p-8 text-center text-gray-500\">\r\n <div class=\"flex flex-col items-center justify-center gap-3\">\r\n <i class=\"pi pi-info-circle text-4xl text-gray-400\"></i>\r\n <p class=\"text-lg\">{{ '' }}</p>\r\n </div>\r\n </div>\r\n }\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n @if (hasRecords()) {\r\n @if (editEnabled) {\r\n @switch (editType) {\r\n @case ('cell') {\r\n <ng-template #body let-item let-editing=\"editing\">\r\n <tr class=\"p-datatable-row p-selectable-row\">\r\n @if (selectedColumns) {\r\n @for (column of selectedColumns; track $index){\r\n <td [pEditableColumn]=\"column.field\" pEditableColumnField=\"rowData.{{column.field}}\">\r\n <p-cellEditor>\r\n <ng-template #input>\r\n <app-inline-input [(ngModel)]=\"item.rowData[column.field]\" (outputDebounced)=\"onEditData()\"\r\n [config]=\"inlineControls?.[column.field] ?? {typeInput: ETypeInput.TEXT}\">\r\n </app-inline-input>\r\n </ng-template>\r\n <ng-template #output>\r\n @if (inlineControls?.[column.field]?.typeInput === ETypeInput.NUMBER) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[column.field] | number: '1.2-2' }}\r\n\r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.CURRENCY) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[column.field] | currency: item?.currencyTypeCellConfig?.[column.field]?.currency ?? 'USD' }}\r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.DATE) {\r\n <div class=\"text-left\">\r\n {{ item.rowData[column.field] | date: \"dd/MM/yyyy\" }}\r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.DATETIME_LOCAL) {\r\n <div class=\"text-left\">\r\n {{ item.rowData[column.field] | date: \"dd/MM/yyyy HH:mm\" }}\r\n </div>\r\n } @else {\r\n @if (item.rowData[column.field]?.name) {\r\n {{ item.rowData[column.field]?.name }}\r\n } @else {\r\n {{ item.rowData[column.field] }}\r\n }\r\n }\r\n\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n } @else {\r\n @for (key of keys(); track $index){\r\n <td [pEditableColumn]=\"key\" pEditableColumnField=\"rowData.{{key}}\">\r\n <p-cellEditor>\r\n <ng-template #input>\r\n <app-inline-input [(ngModel)]=\"item.rowData[key]\" (outputDebounced)=\"onEditData()\"\r\n [config]=\"inlineControls?.[key] ?? {typeInput: ETypeInput.TEXT}\">\r\n </app-inline-input>\r\n </ng-template>\r\n <ng-template #output>\r\n {{ item.rowData[key] }}\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n }\r\n }\r\n @if (editType === 'cell' && editEnabled) {\r\n <td class=\"px-2 py-1 text-center\">\r\n <div class=\"flex justify-center items-center gap-2\">\r\n <app-button-ng [buttonConfig]=\"getDeleteRowButton()\" (onClick)=\"deleteRow(item)\"></app-button-ng>\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n @case ('row') {\r\n <ng-template #body let-item let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"item\" class=\"cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 border-b\">\r\n @if (selectedColumns) {\r\n @for (column of selectedColumns; track $index){\r\n <td>\r\n <div class=\"flex flex-col gap-2\">\r\n <p-cellEditor>\r\n <ng-template #input>\r\n <app-inline-input [(ngModel)]=\"item.rowData[column.field]\"\r\n (outputValue)=\"inlineChange($event, column.field)\" (outputDebounced)=\"onEditData()\"\r\n [config]=\"inlineControls?.[column.field] ?? {typeInput: ETypeInput.TEXT}\">\r\n </app-inline-input>\r\n \r\n </ng-template>\r\n <ng-template #output>\r\n\r\n @if (inlineControls?.[column.field]?.typeInput === ETypeInput.NUMBER) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[column.field] | number: '1.2-2' }}\r\n\r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.CURRENCY) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[column.field] | currency: item?.currencyTypeCellConfig?.[column.field]?.currency ?? 'USD' : item?.currencyTypeCellConfig?.[column.field]?.locale ?? 'es-CO' }} \r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.DATE) {\r\n <div class=\"text-left\">\r\n {{ item.rowData[column.field] | date: \"dd/MM/yyyy\" }}\r\n </div>\r\n } @else if(inlineControls?.[column.field]?.typeInput === ETypeInput.DATETIME_LOCAL) {\r\n <div class=\"text-left\">\r\n {{ item.rowData[column.field] | date: \"dd/MM/yyyy HH:mm\" }}\r\n </div>\r\n } @else {\r\n @if (item.rowData[column.field]?.name) {\r\n {{ item.rowData[column.field]?.name }}\r\n } @else {\r\n {{ item.rowData[column.field] }}\r\n }\r\n }\r\n\r\n\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n @if (rowErrorConfig?.isEnabled && enableErrors && !rowFieldsHasValue()[column.field]) {\r\n <span class=\"text-red-500 italic text-xs\">{{\r\n rowErrorConfig?.fieldErrors?.[item.id]?.[column.field]?.message ??\r\n '' }}</span>\r\n }\r\n </div>\r\n </td>\r\n }\r\n } @else {\r\n @for (key of keys(); track $index){\r\n <td>\r\n <div class=\"flex flex-col gap-2\">\r\n <p-cellEditor>\r\n <ng-template #input>\r\n <app-inline-input [(ngModel)]=\"item.rowData[key]\" (outputValue)=\"inlineChange($event, key)\"\r\n (outputDebounced)=\"onEditData()\" [config]=\"inlineControls?.[key] ?? {typeInput: ETypeInput.TEXT}\">\r\n </app-inline-input>\r\n </ng-template>\r\n <ng-template #output>\r\n\r\n @if (inlineControls?.[key]?.typeInput === ETypeInput.NUMBER) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[key] | number: '1.2-2' }}\r\n\r\n </div>\r\n }\r\n @else if(inlineControls?.[key]?.typeInput === ETypeInput.CURRENCY) {\r\n <div class=\"text-right\">\r\n {{ item.rowData[key] | currency: item?.currencyTypeCellConfig?.[key]?.currency ?? 'USD' }}\r\n </div>\r\n } @else {\r\n @if (item.rowData[key]?.name) {\r\n {{ item.rowData[key]?.name }}\r\n } @else {\r\n {{ item.rowData[key] }}\r\n }\r\n }\r\n\r\n\r\n </ng-template>\r\n </p-cellEditor>\r\n\r\n @if (rowErrorConfig?.isEnabled && enableErrors && !rowFieldsHasValue()[key]) {\r\n <span class=\"text-red-500 italic text-xs\">{{ rowErrorConfig?.fieldErrors?.[item.id]?.[key]?.message ??\r\n '' }}</span>\r\n }\r\n </div>\r\n </td>\r\n }\r\n }\r\n <td>\r\n <div class=\"flex justify-center items-center gap-2\">\r\n @if(!editing){\r\n <app-button-ng pButton pRipple pInitEditableRow [buttonConfig]=\"getEditInitButton(item.id)\"\r\n (onClick)=\"onRowEditInit(item)\"></app-button-ng>\r\n @if(!editConfig()?.rowEditConfig?.isDisabledDeleteButton){\r\n <app-button-ng [buttonConfig]=\"getDeleteRowButton()\" (onClick)=\"deleteRow(item)\"></app-button-ng>\r\n }\r\n }\r\n @if(editing){\r\n @if (hasErrorValues(rowErrorConfig?.fieldErrors?.[item.id] ?? {})) {\r\n <app-button-ng [buttonConfig]=\"editSaveButtonWithErrors()\"\r\n (onClick)=\"onEditSaveWithErrors()\"></app-button-ng>\r\n }\r\n @else {\r\n <app-button-ng pButton pRipple pSaveEditableRow [buttonConfig]=\"editSaveButton()\"\r\n (onClick)=\"onRowEditSave(item)\"></app-button-ng>\r\n }\r\n <app-button-ng pButton pRipple pCancelEditableRow [buttonConfig]=\"editCancelButton()\"\r\n (onClick)=\"onRowEditCancel(item, ri)\"></app-button-ng>\r\n }\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n }\r\n }\r\n } @else {\r\n\r\n <ng-template #body let-item let-expanded=\"expanded\">\r\n <tr class=\"p-datatable-row p-selectable-row\"\r\n [ngClass]=\"{\r\n 'bg-gray-50 dark:bg-gray-800 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700': item.onClick && !item.isSelected && !item.isLoading,\r\n 'bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600': !item.onClick && !item.isSelected && !item.isLoading,\r\n 'bg-blue-100 dark:bg-blue-900 border-l-4 border-blue-500 hover:bg-blue-200 dark:hover:bg-blue-800': item.isSelected && !item.isLoading,\r\n 'skeleton-row': item.isLoading\r\n }\"\r\n (click)=\"item?.isLoading ? null : onRowClick(item)\">\r\n\r\n @if (rowExpansionConfig?.isEnabled) {\r\n <td (click)=\"$event.stopPropagation()\" \r\n [class.skeleton-cell]=\"item.isLoading\"\r\n [style.height]=\"item.isLoading ? '3rem' : 'auto'\">\r\n @if (!item.isLoading) {\r\n <app-button-ng [buttonConfig]=\"rowExpansionButton(expanded)()\" type=\"button\" pRipple\r\n [pRowToggler]=\"item\"></app-button-ng>\r\n } @else {\r\n <div class=\"skeleton-content\"></div>\r\n }\r\n </td>\r\n }\r\n\r\n @if (selectionTableConfig?.isEnabled) {\r\n <td (click)=\"$event.stopPropagation()\" \r\n alignFrozen=\"left\" \r\n pFrozenColumn \r\n class=\"shadow-lg\" \r\n [class.skeleton-cell]=\"item.isLoading\"\r\n [style.height]=\"item.isLoading ? '3rem' : 'auto'\">\r\n @if (!item.isLoading) {\r\n <p-tableCheckbox [id]=\"item\" [value]=\"item\" />\r\n } @else {\r\n <div class=\"skeleton-content\"></div>\r\n }\r\n </td>\r\n }\r\n\r\n @for (key of keys(); track $index) {\r\n @if (isThatItemInTheProductSelection(key)) {\r\n <td [id]=\"key\" class=\"p-datatable-cell\" \r\n [style.height]=\"item.isLoading ? '3rem' : 'min-content'\"\r\n alignFrozen=\"right\" pFrozenColumn\r\n [ngClass]=\"{\r\n 'p-frozen-column': frozenHandle(frozenColumnConfigByKey?.[key]),\r\n 'text-center': item.rowDataButtons?.[key] || item.typeCell?.[key] === ETypeInput.BADGE,\r\n 'skeleton-cell': item.isLoading\r\n }\" [frozen]=\"frozenHandle(frozenColumnConfigByKey?.[key])\">\r\n @if (item.isLoading) {\r\n <div class=\"skeleton-content\"></div>\r\n } @else {\r\n @if (item.rowDataButtons?.[key]) {\r\n <div class=\"flex gap-4 w-full justify-center items-center\">\r\n @for (btn of item.rowDataButtons[key]; track $index) {\r\n @if (btn) {\r\n <app-button-ng class=\"w-full\" (click)=\"$event.stopPropagation()\" [buttonConfig]=\"btn\"></app-button-ng>\r\n }\r\n }\r\n </div>\r\n } @else {\r\n @switch (item.typeCell?.[key]) {\r\n @case (ETypeInput.IMAGE) {\r\n <img [src]=\"item.rowData[key]\" alt=\"Image\" class=\"w-10 h-10 mx-auto\">\r\n }\r\n @case (ETypeInput.DATE) {\r\n {{ item.rowData[key] | date: \"dd/MM/yyyy\" }}\r\n }\r\n @case (ETypeInput.DATETIME_LOCAL) {\r\n {{ item.rowData[key] | date: \"dd/MM/yyyy HH:mm\" }}\r\n }\r\n @case (ETypeInput.CURRENCY) {\r\n {{item?.currencyTypeCellConfig?.[key]?.currency}} {{ item.rowData[key] | currency: item?.currencyTypeCellConfig?.[key]?.currency ?? 'USD' }}\r\n }\r\n @case (ETypeInput.BADGE) {\r\n <app-badge-ng [config]=\"item.rowData[key]\"></app-badge-ng>\r\n }\r\n @case (ETypeInput.COMPONENT) {\r\n <ng-container *ngTemplateOutlet=\"item.rowDataComponents?.[key]; context: { $implicit: item.raw }\"></ng-container>\r\n }\r\n @default {\r\n @if (isDate(item.rowData[key])) {\r\n {{ item.rowData[key] | date: \"dd/MM/yyyy\" }}\r\n } @else if (typeof item.rowData[key] === \"string\") {\r\n {{ item.rowData[key] }}\r\n } @else if (isPrimeNgSelection(item.rowData[key])) {\r\n {{ item.rowData[key].name }}\r\n } @else if(typeof item.rowData[key] === \"number\") {\r\n <p class=\"text-right\">\r\n {{ item.rowData[key] | number: '1.2-2' }}\r\n </p>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </td>\r\n }\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n }\r\n\r\n <ng-template #footer>\r\n @if (footerEnabled) {\r\n @for (row of footerRows; track $index) {\r\n <tr class=\"p-datatable-row p-datatable-footer-row\">\r\n @for (cell of row; track $index) {\r\n <td colSpan=\"{{ cell.colSpan }}\" class=\"{{ cell.class }} text-right font-bold p-3 pb-0\">{{\r\n applyPipe(cell.value,\r\n cell.pipeConfig) }}</td>\r\n\r\n }\r\n </tr>\r\n }\r\n\r\n }\r\n </ng-template>\r\n <ng-template #expandedrow let-item>\r\n <tr>\r\n <td colspan=\"100%\">\r\n <div class=\"p-datatable-row-expansion\">\r\n <ng-container *ngTemplateOutlet=\"currentItemTemplate; context: { $implicit: item }\"></ng-container>\r\n\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n @if (showBottomToolbar()) {\r\n <div class=\"p-datatable-footer sticky bottom-2 z-9 animate__animated animate__fadeIn\">\r\n <app-toolbar-ng>\r\n @if (showManagementSelectionConfig()) {\r\n <div toolbarStart\r\n class=\"p-datatable-footer-content flex items-center gap-3 px-4 rounded-lg animate__animated animate__fadeIn\">\r\n <span class=\"font-medium text-gray-700\">Has seleccionado</span>\r\n <div class=\"p-datatable-footer-badge flex items-center justify-center min-w-[28px] h-7 px-2 rounded-md\">\r\n <span class=\"font-semibold text-gray-900\">{{\r\n totalItemsSelected().toLocaleString()\r\n }}</span>\r\n </div>\r\n <span class=\"text-sm text-gray-600\">registros</span>\r\n <app-button-ng [buttonConfig]=\"showSelectedItemsManagementButton()\"></app-button-ng>\r\n </div>\r\n }\r\n </app-toolbar-ng>\r\n </div>\r\n }\r\n </div>\r\n @if (httpMessage()) {\r\n <app-http-message [(httpMessage)]=\"httpMessage\"></app-http-message>\r\n }\r\n</app-aminated-container>","/*\r\n * Public API Surface of lib-components\r\n\r\nNPM TOKEN:\r\n4f5f941cb6703a2bea326507bd5098aa7dd8224ef4d9b434f6209c73855bf7ac\r\n8b61ac2dab0cf90c13878339c755b09f868b34906ad196a1138433f76f41feb4\r\n37b8f0500846352a33a9d1e2a8504e8a4332cd035a3819d9dc4b2dcdf557c3f0\r\n31f1ccdf0a47736bd3851647d485385323328542c49de9d95498d875e3977f5e\r\nde13d65e8a0357ce9f2e18c899c8e7f6f728181baa031761ecdd7ef5cb166eb2\r\n */\r\n\r\nexport * from './lib/lib-components.service';\r\nexport * from './lib/lib-components.component';\r\nexport * from './lib/components/index';\r\nexport * from './lib/interfaces/index';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i5","i7","i8","i9","i10","i12","i1"],"mappings":"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"}