sapenlinea-components 0.0.32 → 0.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/sapenlinea-components.mjs +164 -38
- package/fesm2022/sapenlinea-components.mjs.map +1 -1
- package/index.d.ts +52 -15
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sapenlinea-components.mjs","sources":["../../../projects/sapenlinea-components/src/lib/components/pagination/pagination.ts","../../../projects/sapenlinea-components/src/lib/components/pagination/pagination.html","../../../projects/sapenlinea-components/src/lib/components/table/table.ts","../../../projects/sapenlinea-components/src/lib/components/table/table.html","../../../projects/sapenlinea-components/src/lib/components/date-time-picker/date-time-picker.ts","../../../projects/sapenlinea-components/src/lib/components/date-time-picker/date-time-picker.html","../../../projects/sapenlinea-components/src/lib/components/date-time-filter/date-time-filter.ts","../../../projects/sapenlinea-components/src/lib/components/date-time-filter/date-time-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-number-filter/input-number-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-number-filter/input-number-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-select-filter/input-select-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-select-filter/input-select-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-text-filter/input-text-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-text-filter/input-text-filter.html","../../../projects/sapenlinea-components/src/lib/components/input/input.ts","../../../projects/sapenlinea-components/src/lib/components/input/input.html","../../../projects/sapenlinea-components/src/lib/components/select-custom-search/select-custom-search.ts","../../../projects/sapenlinea-components/src/lib/components/select-custom-search/select-custom-search.html","../../../projects/sapenlinea-components/src/lib/components/dynamic-form-fields/dynamic-form-fields.ts","../../../projects/sapenlinea-components/src/lib/components/dynamic-form-fields/dynamic-form-fields.html","../../../projects/sapenlinea-components/src/lib/components/wizard-form/wizard-form.ts","../../../projects/sapenlinea-components/src/lib/components/wizard-form/wizard-form.html","../../../projects/sapenlinea-components/src/lib/helpers/toast-helper.ts","../../../projects/sapenlinea-components/src/lib/components/modal-form/modal-form.ts","../../../projects/sapenlinea-components/src/lib/components/modal-form/modal-form.html","../../../projects/sapenlinea-components/src/lib/components/dialog-alert/dialog-alert.ts","../../../projects/sapenlinea-components/src/lib/components/dialog-alert/dialog-alert.html","../../../projects/sapenlinea-components/src/lib/components/dialog-confirmation/dialog-confirmation.ts","../../../projects/sapenlinea-components/src/lib/components/dialog-confirmation/dialog-confirmation.html","../../../projects/sapenlinea-components/src/lib/components/not-found-modal/not-found-modal.ts","../../../projects/sapenlinea-components/src/lib/components/not-found-modal/not-found-modal.html","../../../projects/sapenlinea-components/src/lib/components/loader/loader.ts","../../../projects/sapenlinea-components/src/lib/components/loader/loader.html","../../../projects/sapenlinea-components/src/lib/services/progress/progress-service.ts","../../../projects/sapenlinea-components/src/lib/components/progress-bar/progress-bar.ts","../../../projects/sapenlinea-components/src/lib/components/progress-bar/progress-bar.html","../../../projects/sapenlinea-components/src/lib/components/processing-overlay/processing-overlay.ts","../../../projects/sapenlinea-components/src/lib/components/processing-overlay/processing-overlay.html","../../../projects/sapenlinea-components/src/lib/components/info-group/info-group.ts","../../../projects/sapenlinea-components/src/lib/components/info-group/info-group.html","../../../projects/sapenlinea-components/src/lib/components/feature-card/feature-card.ts","../../../projects/sapenlinea-components/src/lib/components/feature-card/feature-card.html","../../../projects/sapenlinea-components/src/lib/components/side-card/side-card.ts","../../../projects/sapenlinea-components/src/lib/components/side-card/side-card.html","../../../projects/sapenlinea-components/src/lib/components/side-card-detail/side-card-detail.ts","../../../projects/sapenlinea-components/src/lib/components/side-card-detail/side-card-detail.html","../../../projects/sapenlinea-components/src/lib/components/devices-carousel/devices-carousel.ts","../../../projects/sapenlinea-components/src/lib/components/devices-carousel/devices-carousel.html","../../../projects/sapenlinea-components/src/public-api.ts","../../../projects/sapenlinea-components/src/sapenlinea-components.ts"],"sourcesContent":["import { Component, computed, input, model, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './pagination.html',\r\n styleUrls: ['./pagination.css']\r\n})\r\nexport class PaginationComponent {\r\n // Inputs as Models/Signals\r\n page = model(1);\r\n pageSize = model(10);\r\n totalItems = input(0);\r\n\r\n showPageSizeSelector = input(false);\r\n pageSizeOptions = input([10, 20, 30, 50]);\r\n\r\n // Internal state\r\n isOpen = signal(false);\r\n showPageSizeMenu = signal(false);\r\n\r\n totalPages = computed(() => {\r\n const size = this.pageSize();\r\n const total = this.totalItems();\r\n return size > 0 ? Math.ceil(total / size) : 1;\r\n });\r\n\r\n visiblePages = computed(() => {\r\n const total = this.totalPages();\r\n const current = this.page();\r\n\r\n // Configuración de cuantos números mostrar a los lados del actual\r\n const siblingCount = 1;\r\n const totalNumbers = siblingCount + 5; // siblingCount + first + last + current + 2*dots\r\n\r\n // Si el total de páginas es menor que los números que queremos mostrar, mostrar todo\r\n if (totalNumbers >= total) {\r\n return Array.from({ length: total }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(current - siblingCount, 1);\r\n const rightSiblingIndex = Math.min(current + siblingCount, total);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < total - 2;\r\n\r\n const firstPageIndex = 1;\r\n const lastPageIndex = total;\r\n\r\n // Caso 1: Solo puntos a la derecha\r\n // 1 2 3 4 5 ... 20\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n const leftRangeCount = 3 + 2 * siblingCount;\r\n const leftRange = Array.from({ length: leftRangeCount }, (_, i) => i + 1);\r\n return [...leftRange, '...', total];\r\n }\r\n\r\n // Caso 2: Solo puntos a la izquierda\r\n // 1 ... 16 17 18 19 20\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n const rightRangeCount = 3 + 2 * siblingCount;\r\n const rightRange = Array.from({ length: rightRangeCount }, (_, i) => total - rightRangeCount + i + 1);\r\n return [firstPageIndex, '...', ...rightRange];\r\n }\r\n\r\n // Caso 3: Puntos a ambos lados\r\n // 1 ... 9 10 11 ... 20\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n const middleRange = Array.from(\r\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\r\n (_, i) => leftSiblingIndex + i\r\n );\r\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\r\n }\r\n\r\n // Fallback (no debería ocurrir con la lógica actual si totalNumbers >= total cubre los casos pequeños)\r\n return Array.from({ length: total }, (_, i) => i + 1);\r\n });\r\n\r\n onPageClick(p: number | string) {\r\n if (typeof p === 'number') {\r\n this.goToPage(p);\r\n }\r\n }\r\n\r\n isPageActive(p: number | string) {\r\n return typeof p === 'number' && this.page() === p;\r\n }\r\n\r\n goToPage(p: number | string) {\r\n if (typeof p !== 'number') return;\r\n this.page.set(p);\r\n }\r\n\r\n togglePageSizeMenu() {\r\n this.isOpen.update(v => !v);\r\n this.showPageSizeMenu.update(v => !v);\r\n }\r\n\r\n selectPageSize(size: number) {\r\n this.pageSize.set(size);\r\n this.showPageSizeMenu.set(false);\r\n this.isOpen.set(false);\r\n }\r\n}\r\n","<div class=\"pagination-container\">\r\n <div class=\"pagination\" role=\"navigation\" aria-label=\"Pagination\">\r\n <!-- Botón doble atrás -->\r\n <button class=\"icon-button\" (click)=\"goToPage(1)\" [disabled]=\"page() === 1\" aria-label=\"Ir a la primera página\">\r\n ««\r\n </button>\r\n\r\n <!-- Botón atrás -->\r\n <button class=\"icon-button\" (click)=\"goToPage(page() - 1)\" [disabled]=\"page() === 1\"\r\n aria-label=\"Ir a la página anterior\">\r\n «\r\n </button>\r\n\r\n <!-- Números de página -->\r\n <div class=\"pages\">\r\n @for (p of visiblePages(); track $index) {\r\n <button class=\"page-btn\" [class.active]=\"p === page()\" [disabled]=\"p === '...'\" (click)=\"goToPage(p)\"\r\n [attr.aria-current]=\"p === page() ? 'page' : null\"\r\n [attr.aria-label]=\"p === '...' ? 'Más páginas' : 'Ir a la página ' + p\">\r\n {{ p }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Botón siguiente -->\r\n <button class=\"icon-button\" (click)=\"goToPage(page() + 1)\" [disabled]=\"page() === totalPages()\"\r\n aria-label=\"Ir a la página siguiente\">\r\n »\r\n </button>\r\n\r\n <!-- Botón doble adelante -->\r\n <button class=\"icon-button\" (click)=\"goToPage(totalPages())\" [disabled]=\"page() === totalPages()\"\r\n aria-label=\"Ir a la última página\">\r\n »»\r\n </button>\r\n </div>\r\n\r\n <!-- Selector Items por página -->\r\n @if (showPageSizeSelector() && totalPages() > 1) {\r\n <div class=\"pagination-v-4\">\r\n <div class=\"label-pagination\">Items por página</div>\r\n <div class=\"elements-pagination\">\r\n <div class=\"split-button\" (click)=\"togglePageSizeMenu()\">\r\n <div class=\"leading-button\">\r\n <div class=\"state-layer\">\r\n <div class=\"label\">{{ pageSize() }}</div>\r\n </div>\r\n </div>\r\n <div class=\"trailing-button\">\r\n <div class=\"arrow\" [class.open]=\"isOpen()\">\r\n <svg class=\"arrow\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Menú desplegable -->\r\n @if (showPageSizeMenu()) {\r\n <div class=\"page-size-menu\">\r\n @for (opt of pageSizeOptions(); track $index) {\r\n <div class=\"menu-option\" [class.active]=\"opt === pageSize()\" (click)=\"selectPageSize(opt)\">\r\n {{ opt }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>","import { AfterViewInit, Component, ElementRef, HostListener, input, output, QueryList, signal, ViewChildren } from '@angular/core';\r\n\r\nexport interface TableColumn {\r\n key: string;\r\n label: string;\r\n type?: 'text' | 'number' | 'money' | 'date' | 'percentage' | 'status' | 'icon-button' | 'email';\r\n align?: 'left' | 'right' | 'center' | 'auto';\r\n sortable?: boolean;\r\n showActions?: boolean;\r\n\r\n icon?: string;\r\n iconKey?: string;\r\n iconColor?: string;\r\n}\r\n\r\nexport interface TableRow {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface TableAction {\r\n key: string;\r\n icon: string;\r\n label: string;\r\n color?: string;\r\n}\r\n\r\nexport interface StatusToneMap {\r\n [statusKey: string]: StatusTone;\r\n}\r\n\r\nexport type StatusTone =\r\n | 'success'\r\n | 'error'\r\n | 'warning'\r\n | 'info'\r\n | 'neutral';\r\n\r\nexport const STATUS_TONE_STYLES: Record<StatusTone, { bg: string; color: string }> = {\r\n success: { bg: '#9ED89D', color: '#006D2F' },\r\n error: { bg: '#D89D9D', color: '#CF0707' },\r\n warning: { bg: '#D8BF9D', color: '#CF6507' },\r\n info: { bg: '#9DAFD8', color: '#0746CF' },\r\n neutral: { bg: '#BAC2BB', color: '#40484C' },\r\n};\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n imports: [],\r\n standalone: true,\r\n templateUrl: './table.html',\r\n styleUrl: './table.css',\r\n})\r\nexport class Table implements AfterViewInit {\r\n columns = input<TableColumn[]>([]);\r\n data = input<TableRow[]>([]);\r\n actions = input<TableAction[] | ((row: TableRow) => TableAction[])>([] as TableAction[]);\r\n showActions = input<boolean>(true);\r\n\r\n openedMenu = signal<number | null>(null);\r\n selectedRow = signal<TableRow | null>(null);\r\n sortColumn = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc'>('desc');\r\n\r\n optionSelected = output<{ action: string; row: TableRow }>();\r\n iconAction = output<{ action: string; row: TableRow }>();\r\n\r\n statusToneMap = input<StatusToneMap>({});\r\n statusEnumMap = input<Record<number | string, string>>({});\r\n\r\n\r\n @ViewChildren('statusChip') chips!: QueryList<ElementRef>;\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n const chipEls = this.chips.map(c => c.nativeElement);\r\n\r\n const widths = chipEls.map(el => el.scrollWidth);\r\n const maxContentWidth = Math.max(...widths);\r\n\r\n chipEls.forEach(el => {\r\n el.style.width = maxContentWidth + 'px';\r\n });\r\n });\r\n }\r\n\r\n toggleMenu(index: number) {\r\n this.openedMenu.set(this.openedMenu() === index ? null : index);\r\n }\r\n\r\n onOptionClick(option: TableAction, row: TableRow) {\r\n this.optionSelected.emit({ action: option.label, row });\r\n this.openedMenu.set(null);\r\n }\r\n\r\n openModal(row: TableRow, event?: MouseEvent) {\r\n event?.stopPropagation();\r\n\r\n if (this.selectedRow()?.['id'] === row['id']) {\r\n this.selectedRow.set(null);\r\n } else {\r\n this.selectedRow.set(row);\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.menu-acciones')) {\r\n this.selectedRow.set(null);\r\n }\r\n }\r\n\r\n getAlignment(col: TableColumn): string {\r\n if (col.align && col.align !== 'auto') return col.align;\r\n\r\n switch (col.type) {\r\n case 'number':\r\n case 'money':\r\n case 'percentage':\r\n return 'right';\r\n case 'status':\r\n return 'center';\r\n case 'email':\r\n default:\r\n return 'left';\r\n }\r\n }\r\n\r\n formatValue(col: TableColumn, value: any): string {\r\n if (value === null || value === undefined) return '';\r\n\r\n switch (col.type) {\r\n case 'money':\r\n return new Intl.NumberFormat('es-CO', {\r\n style: 'currency',\r\n currency: 'COP',\r\n minimumFractionDigits: 0\r\n }).format(value);\r\n\r\n case 'number':\r\n return new Intl.NumberFormat('es-CO').format(value);\r\n\r\n case 'percentage':\r\n return `${value}%`;\r\n\r\n case 'date':\r\n const d = new Date(value);\r\n return d.toLocaleDateString('es-CO'); // dd/mm/yyyy\r\n\r\n case 'email':\r\n return String(value).toLowerCase(); \r\n\r\n default:\r\n return String(value);\r\n }\r\n }\r\n\r\n getStatusStyle(value: any) {\r\n if (value === null || value === undefined) {\r\n return STATUS_TONE_STYLES.neutral;\r\n }\r\n\r\n const mapped = this.statusEnumMap()?.[value] ?? value;\r\n const key = this.normalizeStatus(mapped);\r\n const tone = this.statusToneMap()?.[key] ?? 'neutral';\r\n\r\n return STATUS_TONE_STYLES[tone];\r\n }\r\n\r\n private normalizeStatus(value: any): string {\r\n return String(value ?? '')\r\n .toLowerCase()\r\n .trim()\r\n .replace(/\\s+/g, '_');\r\n }\r\n\r\n /**\r\n * Devuelve las acciones para una fila.\r\n * Puede ser que `actions` sea un arreglo (se muestra tal cual) o una función\r\n * que recibe la fila y retorna las acciones correspondientes.\r\n */\r\n getActionsForRow(row: TableRow): TableAction[] {\r\n const acts = this.actions();\r\n if (!acts) return [];\r\n if (typeof acts === 'function') {\r\n try {\r\n return acts(row) ?? [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n return acts;\r\n }\r\n\r\n sortData() {\r\n const col = this.sortColumn();\r\n if (!col) return this.data();\r\n\r\n const dir = this.sortDirection();\r\n\r\n return [...this.data()].sort((a, b) => {\r\n const x = a[col] ?? '';\r\n const y = b[col] ?? '';\r\n\r\n // Caso: fechas\r\n if (this.isDate(x) && this.isDate(y)) {\r\n return dir === 'asc'\r\n ? new Date(x).getTime() - new Date(y).getTime()\r\n : new Date(y).getTime() - new Date(x).getTime();\r\n }\r\n\r\n // Caso: números\r\n if (!isNaN(Number(x)) && !isNaN(Number(y))) {\r\n return dir === 'asc' ? Number(x) - Number(y) : Number(y) - Number(x);\r\n }\r\n\r\n // Caso: strings\r\n return dir === 'asc'\r\n ? x.toString().localeCompare(y.toString())\r\n : y.toString().localeCompare(x.toString());\r\n });\r\n }\r\n\r\n isDate(value: any): boolean {\r\n return (\r\n typeof value === 'string' &&\r\n value.length > 5 &&\r\n !isNaN(Date.parse(value))\r\n );\r\n }\r\n\r\n onSort(col: TableColumn) {\r\n if (this.sortColumn() === col.key) {\r\n // cambiar asc <-> desc\r\n this.sortDirection.set(\r\n this.sortDirection() === 'asc' ? 'desc' : 'asc'\r\n );\r\n } else {\r\n // nueva columna → empieza en desc (más reciente primero)\r\n this.sortColumn.set(col.key);\r\n this.sortDirection.set('desc');\r\n }\r\n }\r\n\r\n onIconColumnClick(col: TableColumn, row: TableRow, event: MouseEvent) {\r\n event.stopPropagation();\r\n\r\n this.iconAction.emit({\r\n action: col.iconKey ?? col.key,\r\n row\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"table-wrapper\">\r\n <table class=\"inner-table\">\r\n <thead>\r\n <tr>\r\n @for (col of columns(); track col.key) {\r\n <th (click)=\"col.sortable !== false && onSort(col)\" [class.sortable]=\"col.sortable !== false\"\r\n [class]=\"getAlignment(col)\">\r\n {{ col.label }}\r\n\r\n <!-- iconos de orden opcionales -->\r\n @if (sortColumn() === col.key) {\r\n <span class=\"sort-icon\">\r\n {{ sortDirection() === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n }\r\n </th>\r\n }\r\n\r\n <!-- columna para acciones -->\r\n @if (showActions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (row of sortData(); track $index) {\r\n <tr>\r\n @for (col of columns(); track col.key) {\r\n <td [class]=\"getAlignment(col)\">\r\n @if (col.type === 'status') { @let style =\r\n getStatusStyle(row[col.key]);\r\n <span #statusChip class=\"status-chip\" [style.background-color]=\"style.bg\" [style.color]=\"style.color\">\r\n {{ row[col.key]?.toString().toUpperCase() }}\r\n </span>\r\n\r\n } @else if (col.type === 'icon-button') {\r\n\r\n <button (click)=\"onIconColumnClick(col, row, $event)\">\r\n <span class=\"icon\" [class]=\"col.icon\" [style.color]=\"col.iconColor\"></span>\r\n </button>\r\n\r\n } @else { @if(col.type === 'email'){\r\n {{ formatValue(col, row[col.key]).toLowerCase() }}\r\n } @else {\r\n {{ formatValue(col, row[col.key]).toUpperCase() }}\r\n }\r\n }\r\n </td>\r\n }\r\n\r\n <!-- Celda de acciones -->\r\n @if (showActions()) {\r\n <td class=\"acciones-cell\">\r\n <div class=\"menu-acciones\">\r\n <button class=\"icon-button\" (click)=\"openModal(row)\">\r\n <div class=\"content\">\r\n <div class=\"state-layer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"more-vert\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </button>\r\n @if(selectedRow()?.['id'] === row['id']){\r\n <div class=\"modal-options\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"modal-content\">\r\n <ul>\r\n @for (option of getActionsForRow(row); track $index) {\r\n <li class=\"option-item\" [style.color]=\"option.color\" (click)=\"onOptionClick(option, row)\">\r\n <span class=\"icon\" [class]=\"option.icon\"></span>\r\n <span class=\"label\">{{ option.label }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { DateTimeMode, Hour12 } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-date-time-picker',\r\n imports: [],\r\n templateUrl: './date-time-picker.html',\r\n styleUrl: './date-time-picker.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimePicker),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DateTimePicker implements ControlValueAccessor, OnDestroy {\r\n mode = input<DateTimeMode>('date');\r\n placeholder = input<string>('Seleccionar fecha');\r\n minDate = input<Date | null>(null);\r\n maxDate = input<Date | null>(null);\r\n\r\n dateChange = output<Date | null>();\r\n\r\n isOpen = signal<boolean>(false);\r\n selectedDate = signal<Date | null>(null);\r\n isDisabled = signal<boolean>(false);\r\n isTouched = signal<boolean>(false);\r\n readonly = input<boolean>(false);\r\n\r\n isBlocked = computed(() => this.isDisabled() || this.readonly());\r\n\r\n // Texto que escribe el usuario (DD/MM/YYYY)\r\n inputTextValue = signal<string>('');\r\n\r\n // Navegación del calendario\r\n currentMonth = signal(new Date().getMonth());\r\n currentYear = signal(new Date().getFullYear());\r\n\r\n // Hora en formato 24h (para el backend)\r\n selectedHour = signal(0);\r\n selectedMinute = signal(0);\r\n \r\n // Estado AM/PM\r\n selectedAmPm = signal<'AM' | 'PM'>('AM');\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n\r\n /**\r\n * Valor que se muestra en el campo de texto.\r\n * Siempre muestra la fecha en formato DD/MM/YYYY.\r\n */\r\n displayValue = computed(() => {\r\n const text = this.inputTextValue().trim();\r\n if (text) {\r\n return text;\r\n }\r\n\r\n const date = this.selectedDate();\r\n if (!date) return '';\r\n\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n });\r\n\r\n monthName = computed(() => {\r\n const months = [\r\n 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\r\n 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\r\n ];\r\n return months[this.currentMonth()];\r\n });\r\n\r\n calendarDays = computed(() => {\r\n const year = this.currentYear();\r\n const month = this.currentMonth();\r\n const firstDay = new Date(year, month, 1);\r\n const lastDay = new Date(year, month + 1, 0);\r\n const daysInMonth = lastDay.getDate();\r\n const startingDayOfWeek = firstDay.getDay();\r\n\r\n const days: (number | null)[] = [];\r\n\r\n // Días vacíos al inicio\r\n for (let i = 0; i < startingDayOfWeek; i++) {\r\n days.push(null);\r\n }\r\n\r\n // Días del mes\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n days.push(day);\r\n }\r\n\r\n return days;\r\n });\r\n\r\n // Horas en formato 12h\r\n hours12 = computed((): Hour12[] => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n const hour12 = i === 0 ? 12 : i;\r\n return {\r\n value: hour12,\r\n display: hour12.toString().padStart(2, '0')\r\n };\r\n });\r\n });\r\n\r\n // Hora seleccionada en formato 12h\r\n selectedHour12 = computed(() => {\r\n const hour24 = this.selectedHour();\r\n if (hour24 === 0) return 12;\r\n if (hour24 > 12) return hour24 - 12;\r\n return hour24;\r\n });\r\n\r\n minutes = computed(() => Array.from({ length: 60 }, (_, i) => i));\r\n\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {}\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n writeValue(value: any): void {\r\n let date: Date | null = null;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' && value) {\r\n // Manejar tanto fechas ISO como otros formatos de string\r\n const parsedDate = new Date(value);\r\n if (!isNaN(parsedDate.getTime())) {\r\n date = parsedDate;\r\n }\r\n }\r\n\r\n if (date) {\r\n this.updateInternalState(date);\r\n } else {\r\n this.resetInternalState();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled.set(isDisabled);\r\n }\r\n\r\n toggle() {\r\n if (this.isBlocked()) return;\r\n\r\n this.markAsTouched();\r\n\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isBlocked()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n\r\n // Si hay fecha seleccionada, navegar a ese mes/año\r\n const selected = this.selectedDate();\r\n if (selected) {\r\n this.currentMonth.set(selected.getMonth());\r\n this.currentYear.set(selected.getFullYear());\r\n }\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n }\r\n\r\n selectDay(day: number | null) {\r\n if (!day || this.isBlocked()) return;\r\n\r\n const newDate = new Date(\r\n this.currentYear(),\r\n this.currentMonth(),\r\n day,\r\n this.selectedHour(),\r\n this.selectedMinute()\r\n );\r\n\r\n if (this.isDateDisabled(newDate)) return;\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n\r\n // Solo cerrar automáticamente si es modo 'date'\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n setHour12(hour12: number) {\r\n if (this.isBlocked()) return;\r\n\r\n // Convertir de 12h a 24h\r\n let hour24: number;\r\n const amPm = this.selectedAmPm();\r\n \r\n if (hour12 === 12) {\r\n hour24 = amPm === 'AM' ? 0 : 12;\r\n } else {\r\n hour24 = amPm === 'AM' ? hour12 : hour12 + 12;\r\n }\r\n\r\n this.selectedHour.set(hour24);\r\n this.updateDateTime();\r\n }\r\n\r\n setMinute(minute: number) {\r\n if (this.isBlocked()) return;\r\n\r\n this.selectedMinute.set(minute);\r\n this.updateDateTime();\r\n }\r\n\r\n setAmPm(amPm: 'AM' | 'PM') {\r\n if (this.isBlocked()) return;\r\n\r\n const currentHour24 = this.selectedHour();\r\n const currentHour12 = this.selectedHour12();\r\n let newHour24: number;\r\n\r\n if (amPm === 'AM') {\r\n newHour24 = currentHour12 === 12 ? 0 : currentHour12;\r\n } else {\r\n newHour24 = currentHour12 === 12 ? 12 : currentHour12 + 12;\r\n }\r\n\r\n this.selectedAmPm.set(amPm);\r\n this.selectedHour.set(newHour24);\r\n this.updateDateTime();\r\n }\r\n\r\n previousMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n\r\n if (currentMonth === 0) {\r\n this.currentMonth.set(11);\r\n this.currentYear.set(currentYear - 1);\r\n } else {\r\n this.currentMonth.set(currentMonth - 1);\r\n }\r\n }\r\n\r\n nextMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n\r\n if (currentMonth === 11) {\r\n this.currentMonth.set(0);\r\n this.currentYear.set(currentYear + 1);\r\n } else {\r\n this.currentMonth.set(currentMonth + 1);\r\n }\r\n }\r\n\r\n previousYear() {\r\n this.currentYear.set(this.currentYear() - 1);\r\n }\r\n\r\n nextYear() {\r\n this.currentYear.set(this.currentYear() + 1);\r\n }\r\n\r\n today() {\r\n const today = new Date();\r\n this.updateInternalState(today);\r\n this.onChange(today.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(today);\r\n\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n clear() {\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.markAsTouched();\r\n this.dateChange.emit(null);\r\n this.close();\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.isBlocked()) return;\r\n\r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Tab') {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n }\r\n\r\n isDaySelected(day: number | null): boolean {\r\n if (!day) return false;\r\n const selected = this.selectedDate();\r\n if (!selected) return false;\r\n\r\n return (\r\n selected.getDate() === day &&\r\n selected.getMonth() === this.currentMonth() &&\r\n selected.getFullYear() === this.currentYear()\r\n );\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n return (\r\n today.getDate() === day &&\r\n today.getMonth() === this.currentMonth() &&\r\n today.getFullYear() === this.currentYear()\r\n );\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n if (!day) return true;\r\n \r\n const date = new Date(this.currentYear(), this.currentMonth(), day);\r\n return this.isDateDisabled(date);\r\n }\r\n\r\n isDateDisabled(date: Date): boolean {\r\n const minDate = this.minDate();\r\n const maxDate = this.maxDate();\r\n\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n\r\n return false;\r\n }\r\n\r\n private updateDateTime() {\r\n const selected = this.selectedDate();\r\n if (!selected) return;\r\n\r\n const newDate = new Date(selected);\r\n newDate.setHours(this.selectedHour());\r\n newDate.setMinutes(this.selectedMinute());\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n }\r\n\r\n // Manejo de input de texto (DD/MM/YYYY)\r\n onInputChange(event: Event) {\r\n if (this.isBlocked()) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Eliminar todo lo que no sea número\r\n const numbersOnly = value.replace(/\\D/g, '');\r\n\r\n // Limitar a 8 dígitos (DDMMYYYY)\r\n const limitedNumbers = numbersOnly.slice(0, 8);\r\n\r\n // Formatear con barras: DD/MM/YYYY\r\n let formatted = '';\r\n if (limitedNumbers.length > 0) {\r\n formatted = limitedNumbers.slice(0, 2);\r\n if (limitedNumbers.length > 2) {\r\n formatted += '/' + limitedNumbers.slice(2, 4);\r\n }\r\n if (limitedNumbers.length > 4) {\r\n formatted += '/' + limitedNumbers.slice(4, 8);\r\n }\r\n }\r\n\r\n this.inputTextValue.set(formatted);\r\n input.value = formatted;\r\n\r\n this.markAsTouched();\r\n\r\n // Solo intentamos parsear cuando tenemos DD/MM/YYYY completo (10 caracteres)\r\n if (formatted.length === 10) {\r\n const parsedDate = this.parseDateInput(formatted);\r\n\r\n if (parsedDate) {\r\n if (this.isDateDisabled(parsedDate)) {\r\n // Está fuera de rango, dejamos el texto pero no cambiamos el valor\r\n return;\r\n }\r\n\r\n this.updateInternalState(parsedDate);\r\n this.onChange(parsedDate.toISOString());\r\n this.dateChange.emit(parsedDate);\r\n }\r\n } else if (formatted.trim() === '') {\r\n // Si el campo queda vacío, limpiamos el valor\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.dateChange.emit(null);\r\n }\r\n }\r\n\r\n onInputFocus() {\r\n if (this.isBlocked()) return;\r\n this.open();\r\n }\r\n\r\n private parseDateInput(input: string): Date | null {\r\n if (!input || input.trim() === '') return null;\r\n\r\n const match = input.trim().match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\r\n if (match) {\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10) - 1;\r\n const year = parseInt(match[3], 10);\r\n\r\n if (day >= 1 && day <= 31 && month >= 0 && month <= 11 && year >= 1900 && year <= 2100) {\r\n const date = new Date(year, month, day);\r\n if (date.getDate() === day && date.getMonth() === month && date.getFullYear() === year) {\r\n return date;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private formatDateForInput(date: Date): string {\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private updateInternalState(date: Date) {\r\n this.selectedDate.set(date);\r\n this.currentMonth.set(date.getMonth());\r\n this.currentYear.set(date.getFullYear());\r\n this.selectedHour.set(date.getHours());\r\n this.selectedMinute.set(date.getMinutes());\r\n this.selectedAmPm.set(date.getHours() >= 12 ? 'PM' : 'AM');\r\n\r\n const formatted = this.formatDateForInput(date);\r\n this.inputTextValue.set(formatted);\r\n }\r\n\r\n private resetInternalState() {\r\n this.selectedDate.set(null);\r\n this.inputTextValue.set('');\r\n this.selectedHour.set(0);\r\n this.selectedMinute.set(0);\r\n this.selectedAmPm.set('AM');\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) {\r\n this.removeDocumentListener();\r\n }\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n\r\n setTimeout(() => {\r\n document.addEventListener('click', this.documentClickListener!, true);\r\n }, 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n\r\n public markTouched() {\r\n this.markAsTouched();\r\n }\r\n\r\n /**\r\n * Obtiene la fecha seleccionada en formato ISO string\r\n * @returns string ISO o null si no hay fecha seleccionada\r\n */\r\n public getISOString(): string | null {\r\n const date = this.selectedDate();\r\n return date ? date.toISOString() : null;\r\n }\r\n\r\n /**\r\n * Establece la fecha desde un string ISO\r\n * @param isoString - Fecha en formato ISO\r\n */\r\n public setFromISOString(isoString: string | null): void {\r\n if (isoString) {\r\n const date = new Date(isoString);\r\n if (!isNaN(date.getTime())) {\r\n this.writeValue(date);\r\n this.onChange(isoString);\r\n }\r\n } else {\r\n this.clear();\r\n }\r\n }\r\n}","<div class=\"datetime-container\">\r\n <div\r\n class=\"datetime-header\"\r\n [class.active]=\"isOpen()\"\r\n [class.disabled]=\"isBlocked()\"\r\n [class.readonly]=\"isBlocked()\"\r\n (click)=\"!isBlocked() && toggle()\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n tabindex=\"0\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"datetime-input\"\r\n [value]=\"displayValue()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"onInputChange($event)\"\r\n (focus)=\"!isBlocked() && onInputFocus()\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n\r\n <div class=\"header-icons\">\r\n @if (selectedDate()) {\r\n <span\r\n class=\"clear-icon\"\r\n (click)=\"!isBlocked() && clear(); $event.stopPropagation()\"\r\n title=\"Limpiar\"\r\n >\r\n ×\r\n </span>\r\n }\r\n <span class=\"arrow\" [class.open]=\"isOpen()\"></span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n@if (isOpen()) {\r\n<div class=\"dropdown\">\r\n <div class=\"datetime-content\">\r\n <!-- Sección del calendario -->\r\n <div class=\"calendar-section\">\r\n <!-- Navegación del calendario -->\r\n <div class=\"calendar-nav\">\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousYear()\"\r\n title=\"Año anterior\"\r\n >\r\n ‹‹\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousMonth()\"\r\n title=\"Mes anterior\"\r\n >\r\n ‹\r\n </button>\r\n </div>\r\n\r\n <div class=\"current-date\">{{ monthName() }} {{ currentYear() }}</div>\r\n\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextMonth()\"\r\n title=\"Siguiente mes\"\r\n >\r\n ›\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextYear()\"\r\n title=\"Siguiente año\"\r\n >\r\n ››\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Días de la semana -->\r\n <div class=\"weekdays\">\r\n <div class=\"weekday\">Dom</div>\r\n <div class=\"weekday\">Lun</div>\r\n <div class=\"weekday\">Mar</div>\r\n <div class=\"weekday\">Mié</div>\r\n <div class=\"weekday\">Jue</div>\r\n <div class=\"weekday\">Vie</div>\r\n <div class=\"weekday\">Sáb</div>\r\n </div>\r\n\r\n <!-- Días del mes -->\r\n <div class=\"calendar-grid\">\r\n @for (day of calendarDays(); track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [class.selected]=\"isDaySelected(day)\"\r\n [class.today]=\"isToday(day)\"\r\n [class.disabled]=\"isDayDisabled(day)\"\r\n [class.empty]=\"!day\"\r\n (click)=\"selectDay(day)\"\r\n >\r\n {{ day || '' }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Selector de tiempo (solo si mode === 'datetime') -->\r\n @if (mode() === 'datetime') {\r\n <div class=\"time-section\">\r\n <div class=\"time-header\">Horario</div>\r\n\r\n <div class=\"time-selectors\">\r\n <div class=\"time-group\">\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Hora</div>\r\n <div class=\"time-scroll\">\r\n @for (hour of hours12(); track hour.value) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"hour.value === selectedHour12()\"\r\n (click)=\"setHour12(hour.value)\"\r\n >\r\n {{ hour.display }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-separator-vertical\">:</div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Min</div>\r\n <div class=\"time-scroll\">\r\n @for (minute of minutes(); track minute) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"minute === selectedMinute()\"\r\n (click)=\"setMinute(minute)\"\r\n >\r\n {{ minute.toString().padStart(2, '0') }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">AM/PM</div>\r\n <div class=\"time-scroll ampm\">\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'AM'\"\r\n (click)=\"setAmPm('AM')\"\r\n >\r\n AM\r\n </div>\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'PM'\"\r\n (click)=\"setAmPm('PM')\"\r\n >\r\n PM\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Botones de acción -->\r\n <div class=\"action-buttons\">\r\n <button type=\"button\" class=\"action-btn secondary\" (click)=\"today()\">\r\n Hoy\r\n </button>\r\n @if (mode() === 'datetime') {\r\n <button type=\"button\" class=\"action-btn primary\" (click)=\"close()\">\r\n Aceptar\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { DateFilterSelection, DateTimeMode, FilterItem, Hour12 } from '../../interfaces/filters';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-date-time-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './date-time-filter.html',\r\n styleUrl: './date-time-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimeFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DateTimeFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n\r\n // Outputs\r\n dateSelected = output<DateFilterSelection>();\r\n dateChange = output<Date | null>();\r\n\r\n // Internal State\r\n activeFilterType = signal<string | null>(null);\r\n isOpen = signal(false);\r\n selectedDate = signal<Date | null>(null);\r\n inputTextValue = signal<string>('');\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n // Máscara visual dinámica para la guía de fecha __/__/____\r\n // Devuelve un arreglo de caracteres con flag \"filled\" para poder dar color distinto\r\n inputMask = computed(() => {\r\n const raw = this.inputTextValue() || '';\r\n const numbersOnly = raw.replace(/\\D/g, '');\r\n\r\n const template: { char: string; filled: boolean }[] = [\r\n { char: 'd', filled: false },\r\n { char: 'd', filled: false },\r\n { char: '/', filled: false },\r\n { char: 'm', filled: false },\r\n { char: 'm', filled: false },\r\n { char: '/', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n ];\r\n\r\n let index = 0;\r\n\r\n for (let i = 0; i < template.length && index < numbersOnly.length; i++) {\r\n if (template[i].char === '/') continue;\r\n template[i] = { char: numbersOnly[index++], filled: true };\r\n }\r\n\r\n // Cuando se completa el segmento, el slash correspondiente pasa a \"filled\"\r\n if (numbersOnly.length >= 2) {\r\n template[2] = { char: '/', filled: true }; // después de DD\r\n }\r\n if (numbersOnly.length >= 4) {\r\n template[5] = { char: '/', filled: true }; // después de MM\r\n }\r\n\r\n return template; // para usar en el template y colorear por carácter\r\n });\r\n\r\n clearTrigger = input<number>(0);\r\n\r\n // Computed Properties based on active filter\r\n activeFilter = computed(() => {\r\n const type = this.activeFilterType();\r\n return this.filters().find(f => f.value === type) || null;\r\n });\r\n\r\n mode = computed<DateTimeMode>(() => {\r\n const filter = this.activeFilter();\r\n return filter?.type === 'datetime' ? 'datetime' : 'date';\r\n });\r\n\r\n placeholder = computed(() => this.activeFilter()?.placeholder || 'Seleccionar fecha');\r\n minDate = computed(() => this.activeFilter()?.minDate || null);\r\n maxDate = computed(() => this.activeFilter()?.maxDate || null);\r\n filterValue = computed(() => this.activeFilter()?.value || '');\r\n\r\n // Calendar Navigation\r\n currentMonth = signal(new Date().getMonth());\r\n currentYear = signal(new Date().getFullYear());\r\n\r\n // Time State\r\n selectedHour = signal(0);\r\n selectedMinute = signal(0);\r\n selectedAmPm = signal<'AM' | 'PM'>('AM');\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.clear();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | Date | null): void {\r\n let date: Date | null = null;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' && value) {\r\n const parsedDate = new Date(value);\r\n if (!isNaN(parsedDate.getTime())) {\r\n date = parsedDate;\r\n }\r\n }\r\n\r\n if (date) {\r\n this.updateInternalState(date);\r\n } else {\r\n this.resetInternalState();\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n toggle(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.activeFilterType() === filterValue && this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n\r\n const selected = this.selectedDate();\r\n if (selected) {\r\n this.currentMonth.set(selected.getMonth());\r\n this.currentYear.set(selected.getFullYear());\r\n }\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n // Don't clear activeFilterType here to keep the chip active if needed, \r\n // or clear it if you want the chip to look inactive when closed.\r\n // For now, let's keep it active only if a date is selected? \r\n // Or maybe we want to close the dropdown but keep the filter \"selected\" in UI?\r\n // Let's just close the dropdown.\r\n }\r\n\r\n // Calendar Logic\r\n selectDay(day: number | null) {\r\n if (!day || this.isDisabled()) return;\r\n\r\n const newDate = new Date(\r\n this.currentYear(),\r\n this.currentMonth(),\r\n day,\r\n this.selectedHour(),\r\n this.selectedMinute()\r\n );\r\n\r\n if (this.isDateDisabled(newDate)) return;\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n\r\n this.dateSelected.emit({\r\n filter: this.filterValue(),\r\n value: newDate,\r\n });\r\n\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n // ... (Rest of the helper methods like previousMonth, nextMonth, etc. remain largely the same)\r\n\r\n displayValue = computed(() => {\r\n const date = this.selectedDate();\r\n if (!date) return '';\r\n\r\n const options: Intl.DateTimeFormatOptions = {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n };\r\n\r\n if (this.mode() === 'datetime') {\r\n options.hour = '2-digit';\r\n options.minute = '2-digit';\r\n options.hour12 = true;\r\n }\r\n\r\n return date.toLocaleDateString('es-ES', options);\r\n });\r\n\r\n // Input text handling\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n \r\n // Remove all non-numeric characters\r\n const numbersOnly = value.replace(/\\D/g, '');\r\n \r\n // Limit to 8 digits (DD/MM/YYYY)\r\n const limitedNumbers = numbersOnly.slice(0, 8);\r\n \r\n // Format with slashes: DD/MM/YYYY\r\n let formatted = '';\r\n if (limitedNumbers.length > 0) {\r\n formatted = limitedNumbers.slice(0, 2);\r\n if (limitedNumbers.length > 2) {\r\n formatted += '/' + limitedNumbers.slice(2, 4);\r\n }\r\n if (limitedNumbers.length > 4) {\r\n formatted += '/' + limitedNumbers.slice(4, 8);\r\n }\r\n }\r\n \r\n // Update the input value\r\n this.inputTextValue.set(formatted);\r\n input.value = formatted;\r\n \r\n this.markAsTouched();\r\n \r\n // Only parse when we have a complete date (DD/MM/YYYY = 10 characters)\r\n if (formatted.length === 10) {\r\n const parsedDate = this.parseDateInput(formatted);\r\n \r\n if (parsedDate) {\r\n if (this.isDateDisabled(parsedDate)) {\r\n // Invalid date (out of range), but keep the text\r\n return;\r\n }\r\n \r\n this.updateInternalState(parsedDate);\r\n this.onChange(parsedDate.toISOString());\r\n this.dateChange.emit(parsedDate);\r\n this.dateSelected.emit({\r\n filter: filterValue,\r\n value: parsedDate,\r\n });\r\n }\r\n } else if (formatted.trim() === '') {\r\n // Clear if input is empty\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.dateChange.emit(null);\r\n }\r\n }\r\n\r\n onInputFocus(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n\r\n private parseDateInput(input: string): Date | null {\r\n if (!input || input.trim() === '') return null;\r\n\r\n // Only accept DD/MM/YYYY format\r\n const match = input.trim().match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\r\n if (match) {\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10) - 1;\r\n const year = parseInt(match[3], 10);\r\n\r\n // Validate date\r\n if (day >= 1 && day <= 31 && month >= 0 && month <= 11 && year >= 1900 && year <= 2100) {\r\n const date = new Date(year, month, day);\r\n // Check if date is valid (handles invalid dates like 31/02/2024)\r\n if (date.getDate() === day && date.getMonth() === month && date.getFullYear() === year) {\r\n return date;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n monthName = computed(() => {\r\n const months = [\r\n 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\r\n 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\r\n ];\r\n return months[this.currentMonth()];\r\n });\r\n\r\n calendarDays = computed(() => {\r\n const year = this.currentYear();\r\n const month = this.currentMonth();\r\n const firstDay = new Date(year, month, 1);\r\n const lastDay = new Date(year, month + 1, 0);\r\n const daysInMonth = lastDay.getDate();\r\n const startingDayOfWeek = firstDay.getDay();\r\n\r\n const days: (number | null)[] = [];\r\n for (let i = 0; i < startingDayOfWeek; i++) days.push(null);\r\n for (let day = 1; day <= daysInMonth; day++) days.push(day);\r\n return days;\r\n });\r\n\r\n hours12 = computed((): Hour12[] => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n const hour12 = i === 0 ? 12 : i;\r\n return {\r\n value: hour12,\r\n display: hour12.toString().padStart(2, '0')\r\n };\r\n });\r\n });\r\n\r\n selectedHour12 = computed(() => {\r\n const hour24 = this.selectedHour();\r\n if (hour24 === 0) return 12;\r\n if (hour24 > 12) return hour24 - 12;\r\n return hour24;\r\n });\r\n\r\n minutes = computed(() => Array.from({ length: 60 }, (_, i) => i));\r\n\r\n // Helper methods\r\n private updateInternalState(date: Date) {\r\n this.selectedDate.set(date);\r\n this.currentMonth.set(date.getMonth());\r\n this.currentYear.set(date.getFullYear());\r\n this.selectedHour.set(date.getHours());\r\n this.selectedMinute.set(date.getMinutes());\r\n this.selectedAmPm.set(date.getHours() >= 12 ? 'PM' : 'AM');\r\n \r\n // Update input text value to match the formatted date\r\n const formatted = this.formatDateForInput(date);\r\n this.inputTextValue.set(formatted);\r\n }\r\n\r\n private resetInternalState() {\r\n this.selectedDate.set(null);\r\n this.inputTextValue.set('');\r\n this.selectedHour.set(0);\r\n this.selectedMinute.set(0);\r\n this.selectedAmPm.set('AM');\r\n }\r\n\r\n private formatDateForInput(date: Date): string {\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) this.removeDocumentListener();\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n setTimeout(() => document.addEventListener('click', this.documentClickListener!, true), 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n\r\n // Navigation methods\r\n previousMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n if (currentMonth === 0) {\r\n this.currentMonth.set(11);\r\n this.currentYear.set(currentYear - 1);\r\n } else {\r\n this.currentMonth.set(currentMonth - 1);\r\n }\r\n }\r\n\r\n nextMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n if (currentMonth === 11) {\r\n this.currentMonth.set(0);\r\n this.currentYear.set(currentYear + 1);\r\n } else {\r\n this.currentMonth.set(currentMonth + 1);\r\n }\r\n }\r\n\r\n previousYear() { this.currentYear.set(this.currentYear() - 1); }\r\n nextYear() { this.currentYear.set(this.currentYear() + 1); }\r\n\r\n today() {\r\n const today = new Date();\r\n this.updateInternalState(today);\r\n this.onChange(today.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(today);\r\n this.dateSelected.emit({ filter: this.filterValue(), value: today });\r\n if (this.mode() === 'date') this.close();\r\n }\r\n\r\n clear() {\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.markAsTouched();\r\n this.dateChange.emit(null);\r\n this.close();\r\n }\r\n\r\n // Time setters\r\n setHour12(hour12: number) {\r\n if (this.isDisabled()) return;\r\n const amPm = this.selectedAmPm();\r\n const hour24 = hour12 === 12 ? (amPm === 'AM' ? 0 : 12) : (amPm === 'AM' ? hour12 : hour12 + 12);\r\n this.selectedHour.set(hour24);\r\n this.updateDateTime();\r\n }\r\n\r\n setMinute(minute: number) {\r\n if (this.isDisabled()) return;\r\n this.selectedMinute.set(minute);\r\n this.updateDateTime();\r\n }\r\n\r\n setAmPm(amPm: 'AM' | 'PM') {\r\n if (this.isDisabled()) return;\r\n const currentHour12 = this.selectedHour12();\r\n const newHour24 = amPm === 'AM' ? (currentHour12 === 12 ? 0 : currentHour12) : (currentHour12 === 12 ? 12 : currentHour12 + 12);\r\n this.selectedAmPm.set(amPm);\r\n this.selectedHour.set(newHour24);\r\n this.updateDateTime();\r\n }\r\n\r\n private updateDateTime() {\r\n const selected = this.selectedDate();\r\n if (!selected) return;\r\n const newDate = new Date(selected);\r\n newDate.setHours(this.selectedHour());\r\n newDate.setMinutes(this.selectedMinute());\r\n this.selectedDate.set(newDate);\r\n \r\n // Update input text value\r\n const formatted = this.formatDateForInput(newDate);\r\n this.inputTextValue.set(formatted);\r\n \r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n this.dateSelected.emit({\r\n filter: this.filterValue(),\r\n value: newDate,\r\n });\r\n }\r\n\r\n // Validation helpers\r\n isDaySelected(day: number | null): boolean {\r\n if (!day) return false;\r\n const selected = this.selectedDate();\r\n return !!selected && selected.getDate() === day && selected.getMonth() === this.currentMonth() && selected.getFullYear() === this.currentYear();\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n return today.getDate() === day && today.getMonth() === this.currentMonth() && today.getFullYear() === this.currentYear();\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n if (!day) return true;\r\n return this.isDateDisabled(new Date(this.currentYear(), this.currentMonth(), day));\r\n }\r\n\r\n isDateDisabled(date: Date): boolean {\r\n const minDate = this.minDate();\r\n const maxDate = this.maxDate();\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n return false;\r\n }\r\n}","<div class=\"datetime-container\">\r\n <div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div\r\n class=\"chip-input-wrapper\"\r\n [class.has-value]=\"selectedDate() || inputTextValue()\"\r\n [class.active]=\"activeFilterType() === item.value\"\r\n >\r\n <!-- Etiqueta flotante -->\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'dd/mm/aaaa' }}</label>\r\n\r\n <!-- Máscara de guía de fecha dinámica (__/__/____) -->\r\n <div class=\"chip-input-mask\">\r\n @for (part of inputMask(); track $index) {\r\n <span\r\n class=\"mask-char\"\r\n [class.mask-char-filled]=\"part.filled\"\r\n [class.mask-char-placeholder]=\"!part.filled\"\r\n >\r\n {{ part.char }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n [value]=\"inputTextValue()\"\r\n (input)=\"onInputChange($event, item.value)\"\r\n (focus)=\"onInputFocus(item.value)\"\r\n [placeholder]=\"item.placeholder || 'Seleccionar Fecha'\"\r\n class=\"chip-input\"\r\n [disabled]=\"isDisabled()\"\r\n />\r\n\r\n <button\r\n type=\"button\"\r\n class=\"calendar-icon-button\"\r\n (click)=\"toggle(item.value)\"\r\n title=\"Abrir calendario\"\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-calendar-event\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M4 5m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z\"\r\n />\r\n <path d=\"M16 3l0 4\" />\r\n <path d=\"M8 3l0 4\" />\r\n <path d=\"M4 11l16 0\" />\r\n <path d=\"M8 15h2v2h-2z\" />\r\n </svg>\r\n </button>\r\n\r\n @if (isOpen() && activeFilterType() === item.value) {\r\n <div class=\"dropdown\">\r\n <div class=\"datetime-content\">\r\n <!-- Sección del calendario -->\r\n <div class=\"calendar-section\">\r\n <!-- Navegación -->\r\n <div class=\"calendar-nav\">\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousYear()\"\r\n title=\"Año anterior\"\r\n >\r\n ‹‹\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousMonth()\"\r\n title=\"Mes anterior\"\r\n >\r\n ‹\r\n </button>\r\n </div>\r\n\r\n <div class=\"current-date\">\r\n {{ monthName() }} {{ currentYear() }}\r\n </div>\r\n\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextMonth()\"\r\n title=\"Siguiente mes\"\r\n >\r\n ›\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextYear()\"\r\n title=\"Siguiente año\"\r\n >\r\n ››\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Días de la semana -->\r\n <div class=\"weekdays\">\r\n <div class=\"weekday\">Dom</div>\r\n <div class=\"weekday\">Lun</div>\r\n <div class=\"weekday\">Mar</div>\r\n <div class=\"weekday\">Mié</div>\r\n <div class=\"weekday\">Jue</div>\r\n <div class=\"weekday\">Vie</div>\r\n <div class=\"weekday\">Sáb</div>\r\n </div>\r\n\r\n <!-- Días -->\r\n <div class=\"calendar-grid\">\r\n @for (day of calendarDays(); track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [class.selected]=\"isDaySelected(day)\"\r\n [class.today]=\"isToday(day)\"\r\n [class.disabled]=\"isDayDisabled(day)\"\r\n [class.empty]=\"!day\"\r\n (click)=\"selectDay(day)\"\r\n >\r\n {{ day || \"\" }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- TIME PICKER -->\r\n @if (mode() === 'datetime') {\r\n <div class=\"time-section\">\r\n <div class=\"time-header\">Horario</div>\r\n\r\n <div class=\"time-selectors\">\r\n <div class=\"time-group\">\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Hora</div>\r\n <div class=\"time-scroll\">\r\n @for (hour of hours12(); track hour.value) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"hour.value === selectedHour12()\"\r\n (click)=\"setHour12(hour.value)\"\r\n >\r\n {{ hour.display }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-separator-vertical\">:</div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Min</div>\r\n <div class=\"time-scroll\">\r\n @for (minute of minutes(); track minute) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"minute === selectedMinute()\"\r\n (click)=\"setMinute(minute)\"\r\n >\r\n {{ minute.toString().padStart(2, \"0\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">AM/PM</div>\r\n <div class=\"time-scroll ampm\">\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'AM'\"\r\n (click)=\"setAmPm('AM')\"\r\n >\r\n AM\r\n </div>\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'PM'\"\r\n (click)=\"setAmPm('PM')\"\r\n >\r\n PM\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- botones -->\r\n <div class=\"action-buttons\">\r\n <button type=\"button\" class=\"action-btn secondary\" (click)=\"today()\">\r\n Hoy\r\n </button>\r\n\r\n @if (mode() === 'datetime') {\r\n <button type=\"button\" class=\"action-btn primary\" (click)=\"close()\">\r\n Aceptar\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-number-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-number-filter.html',\r\n styleUrl: './input-number-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputNumberFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputNumberFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor() {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // No cleanup needed\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // Not used for multiple inputs\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const value = (event.target as HTMLInputElement).value;\r\n \r\n this.markAsTouched();\r\n \r\n // Actualizar el valor del filtro específico\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterValue]: value\r\n }));\r\n\r\n // Emitir eventos\r\n this.onChange(value || null);\r\n this.valueChange.emit(value || null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: value,\r\n });\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n clearFilter(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n \r\n // Limpiar el valor del filtro específico\r\n this.filterValues.update(current => {\r\n const updated = { ...current };\r\n delete updated[filterValue];\r\n return updated;\r\n });\r\n\r\n // Emitir eventos\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: '',\r\n });\r\n }\r\n}\r\n","<div class=\"input-filter-container\">\r\n <div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip-input-wrapper\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Escribir Número' }}</label>\r\n <input\r\n type=\"number\"\r\n [value]=\"filterValues()[item.value] || ''\"\r\n (input)=\"onInputChange($event, item.value)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Escribir Número')\"\r\n class=\"chip-input\"\r\n [disabled]=\"isDisabled()\"\r\n />\r\n @if (filterValues()[item.value]) {\r\n <button\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"clearFilter(item.value)\"\r\n title=\"Limpiar\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-select-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-select-filter.html',\r\n styleUrl: './input-select-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputSelectFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputSelectFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n activeFilterType = signal<string | null>(null);\r\n isOpen = signal(false);\r\n selectedLabel = signal<string>('');\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n searchTerm = signal('');\r\n\r\n // Computed Properties based on active filter\r\n activeFilter = computed(() => {\r\n const type = this.activeFilterType();\r\n return this.filters().find(f => f.value === type) || null;\r\n });\r\n\r\n placeholder = computed(() => this.activeFilter()?.placeholder || 'Seleccionar...');\r\n filterValueKey = computed(() => this.activeFilter()?.value || '');\r\n options = computed(() => this.activeFilter()?.options || []);\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase().trim();\r\n const opts = this.options();\r\n\r\n if (!term) return opts;\r\n\r\n return opts.filter(option =>\r\n option.label.toLowerCase().includes(term) ||\r\n option.value.toString().toLowerCase().includes(term)\r\n );\r\n });\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.selectedLabel.set('');\r\n this.activeFilterType.set(null);\r\n this.isOpen.set(false);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // If we had a way to map value back to label without activeFilter, we would do it here.\r\n // For now, we might need to rely on the consumer or just show the value if label not found.\r\n // But since we only know options when activeFilter is set, this is tricky.\r\n // However, usually writeValue is for the form control value.\r\n // Let's just store it.\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n toggle(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.activeFilterType() === filterValue && this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n }\r\n\r\n selectOption(option: { label: string; value: string }) {\r\n this.selectedLabel.set(option.label);\r\n\r\n const type = this.activeFilterType();\r\n if (type) {\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [type]: option.label // Show label in chip\r\n }));\r\n }\r\n\r\n this.onChange(option.value);\r\n this.valueChange.emit(option.value);\r\n this.filterSelected.emit({\r\n filter: this.filterValueKey(),\r\n value: option.value,\r\n });\r\n this.close();\r\n }\r\n\r\n clear() {\r\n this.selectedLabel.set('');\r\n const type = this.activeFilterType();\r\n if (type) {\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [type]: ''\r\n }));\r\n }\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.searchTerm.set('');\r\n this.close();\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n onInputChange(event: Event, filterType: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const target = event.target as HTMLInputElement;\r\n const value = target.value;\r\n\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterType]: value,\r\n }));\r\n\r\n this.searchTerm.set(value);\r\n this.activeFilterType.set(filterType);\r\n\r\n if (!this.isOpen()) {\r\n this.open();\r\n }\r\n }\r\n\r\n onFocusFilter(filterType: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.activeFilterType.set(filterType);\r\n const currentValue = this.filterValues()[filterType] || '';\r\n this.searchTerm.set(currentValue);\r\n\r\n if (!this.isOpen()) {\r\n this.open();\r\n }\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Enter') {\r\n const filtered = this.filteredOptions();\r\n if (filtered.length > 0) {\r\n this.selectOption(filtered[0]);\r\n }\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) this.removeDocumentListener();\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n setTimeout(() => document.addEventListener('click', this.documentClickListener!, true), 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n}\r\n","<div class=\"input-filter-container\">\r\n <div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip\" [class.active]=\"activeFilterType() === item.value\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Seleccionar' }}</label>\r\n <div class=\"content-chip\">\r\n <input\r\n type=\"text\"\r\n class=\"chip-input\"\r\n [value]=\"filterValues()[item.value] || ''\"\r\n (input)=\"onInputChange($event, item.value)\"\r\n (focus)=\"onFocusFilter(item.value)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Seleccionar')\"\r\n [disabled]=\"isDisabled()\"\r\n />\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-list\" (click)=\"onFocusFilter(item.value)\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M9 6l11 0\" />\r\n <path d=\"M9 12l11 0\" />\r\n <path d=\"M9 18l11 0\" />\r\n <path d=\"M5 6l0 .01\" />\r\n <path d=\"M5 12l0 .01\" />\r\n <path d=\"M5 18l0 .01\" />\r\n </svg>\r\n </div>\r\n\r\n @if (isOpen() && activeFilterType() === item.value) {\r\n <div class=\"dropdown\">\r\n <div class=\"options-list\">\r\n @for (option of filteredOptions(); track option.value) {\r\n <div class=\"option-item\" (click)=\"selectOption(option)\">\r\n {{ option.label }}\r\n </div>\r\n }\r\n @if (filteredOptions().length === 0) {\r\n <div class=\"no-options\">No hay opciones</div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-text-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-text-filter.html',\r\n styleUrl: './input-text-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputTextFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputTextFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor() {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // No cleanup needed\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // Not used for multiple inputs\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const value = (event.target as HTMLInputElement).value;\r\n \r\n this.markAsTouched();\r\n \r\n // Actualizar el valor del filtro específico\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterValue]: value\r\n }));\r\n\r\n // Emitir eventos\r\n this.onChange(value || null);\r\n this.valueChange.emit(value || null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: value,\r\n });\r\n }\r\n\r\n clearFilter(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n \r\n // Limpiar el valor del filtro específico\r\n this.filterValues.update(current => {\r\n const updated = { ...current };\r\n delete updated[filterValue];\r\n return updated;\r\n });\r\n\r\n // Emitir eventos\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: '',\r\n });\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n}\r\n","<div class=\"input-filter-container\">\r\n <div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip-input-wrapper\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Escribir' }}</label>\r\n <input\r\n type=\"text\"\r\n [value]=\"filterValues()[item.value] || ''\"\r\n (input)=\"onInputChange($event, item.value)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Escribir')\"\r\n class=\"chip-input\"\r\n [disabled]=\"isDisabled()\"\r\n />\r\n @if (filterValues()[item.value]) {\r\n <button\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"clearFilter(item.value)\"\r\n title=\"Limpiar\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, input, model, output, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-input',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './input.html',\r\n styleUrl: './input.css',\r\n})\r\nexport class Input {\r\n mode = input<'search' | 'select'>('search');\r\n placeholder = input<string>();\r\n type = input<string>('text');\r\n value = model<string>('');\r\n valueChange = output<string>();\r\n onSearch = output<string>();\r\n onSelect = output<string>();\r\n onClear = output<void>();\r\n\r\n options = input<{ code: string; name: string }[]>([]);\r\n showDropdown = signal(false);\r\n\r\n clear() {\r\n this.value.set('');\r\n this.valueChange.emit('');\r\n this.onClear.emit();\r\n }\r\n\r\n search() {\r\n this.onSearch.emit(this.value());\r\n }\r\n\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n let inputValue = target.value;\r\n\r\n if (this.type() === 'number') {\r\n inputValue = inputValue.replace(/[^0-9]/g, '');\r\n target.value = inputValue;\r\n }\r\n \r\n this.value.set(inputValue);\r\n this.valueChange.emit(inputValue);\r\n }\r\n\r\n selectOption(option: any) {\r\n this.value.set(`${option.code} - ${option.name}`);\r\n this.valueChange.emit(this.value());\r\n this.showDropdown.set(false);\r\n }\r\n \r\n openSelect() {\r\n this.showDropdown.set(!this.showDropdown());\r\n }\r\n}\r\n","<div class=\"input-wrapper\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"custom-input\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n\r\n @if (value() && mode() === 'search') {\r\n <button class=\"clear-btn\" (click)=\"clear()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n } @if (mode() === 'search') {\r\n <button class=\"search-btn\" (click)=\"search()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"56\"\r\n height=\"56\"\r\n fill=\"none\"\r\n viewBox=\"0 0 56 56\"\r\n >\r\n <g clip-path=\"url(#clip0_190_2403)\">\r\n <path\r\n fill=\"#454733\"\r\n d=\"M31.755 30.255h-.79l-.28-.27a6.47 6.47 0 0 0 1.57-4.23 6.5 6.5 0 1 0-6.5 6.5c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99 1.49-1.49zm-6 0c-2.49 0-4.5-2.01-4.5-4.5s2.01-4.5 4.5-4.5 4.5 2.01 4.5 4.5-2.01 4.5-4.5 4.5\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_190_2403\">\r\n <rect width=\"56\" height=\"56\" fill=\"#fff\" rx=\"28\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n } @else {\r\n <button class=\"select-btn\" (click)=\"openSelect()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-down\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M6 9l6 6l6 -6\" />\r\n </svg>\r\n </button>\r\n }\r\n</div>\r\n\r\n@if (showDropdown()) {\r\n <div class=\"dropdown-menu\">\r\n @for (option of options(); track option.code) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n (click)=\"selectOption(option)\"\r\n >\r\n <span class=\"code\">{{ option.code }}</span>\r\n <span class=\"dash\">-</span>\r\n <span class=\"name\">{{ option.name }}</span>\r\n </button>\r\n }\r\n </div>\r\n}","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n HostListener,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\ninterface Option {\r\n value: any;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-select-custom-search',\r\n imports: [],\r\n templateUrl: './select-custom-search.html',\r\n styleUrl: './select-custom-search.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectCustomSearch),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SelectCustomSearch implements ControlValueAccessor {\r\n options = input<Option[]>([]);\r\n placeholder = input<string>('Seleccionar opción');\r\n\r\n selectionChange = output<Option | null>();\r\n\r\n isOpen = signal(false);\r\n searchTerm = signal('');\r\n selectedValue = signal<any>(null);\r\n isDisabled = signal(false); \r\n\r\n readonly = input<boolean>(false);\r\n\r\n isBlocked = computed(() => this.isDisabled() || this.readonly());\r\n\r\n selectedOption = computed(() => {\r\n const value = this.selectedValue();\r\n return this.options().find((option) => option.value === value) || null;\r\n });\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase().trim();\r\n const opts = this.options();\r\n\r\n if (!term) return opts;\r\n\r\n return opts.filter(\r\n (option) =>\r\n option.label.toLowerCase().includes(term) ||\r\n option.value.toString().toLowerCase().includes(term)\r\n );\r\n });\r\n\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n writeValue(value: any): void {\r\n this.selectedValue.set(value);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled.set(isDisabled); \r\n }\r\n\r\n toggle() {\r\n \r\n if (this.isBlocked()) return;\r\n \r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n this.isOpen.set(true);\r\n this.searchTerm.set('');\r\n\r\n setTimeout(() => {\r\n const input =\r\n this.elementRef.nativeElement.querySelector('.search-input');\r\n if (input) input.focus();\r\n });\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n }\r\n\r\n selectOption(option: Option) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n this.selectedValue.set(option.value);\r\n this.onChange(option.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n this.close();\r\n }\r\n\r\n onSearch(event: Event) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n const target = event.target as HTMLInputElement;\r\n this.searchTerm.set(target.value);\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Enter') {\r\n const filtered = this.filteredOptions();\r\n if (filtered.length > 0) {\r\n this.selectOption(filtered[0]);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event) {\r\n \r\n if (!this.isBlocked() && !this.elementRef.nativeElement.contains(event.target as Node)) {\r\n this.close();\r\n }\r\n }\r\n}","<div class=\"select-container\">\r\n <div\r\n class=\"select-header\"\r\n [class.active]=\"isOpen()\"\r\n [class.disabled]=\"isBlocked()\"\r\n [class.readonly]=\"isBlocked()\"\r\n (click)=\"!isBlocked() && toggle()\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n tabindex=\"0\"\r\n >\r\n <span class=\"selected-text\" [class.placeholder]=\"!selectedOption()\">\r\n {{ selectedOption()?.label || placeholder() }}\r\n </span>\r\n\r\n <span class=\"arrow\" [class.open]=\"isOpen()\"></span>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div class=\"dropdown\">\r\n <input\r\n type=\"text\"\r\n class=\"search-input\"\r\n [value]=\"searchTerm()\"\r\n placeholder=\"Buscar...\"\r\n (input)=\"!isBlocked() &&onSearch($event)\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n />\r\n\r\n @if (filteredOptions().length > 0) {\r\n <div class=\"options\">\r\n @for (option of filteredOptions(); track option.value) {\r\n <div\r\n class=\"option\"\r\n [class.selected]=\"option.value === selectedValue()\"\r\n (click)=\"!isBlocked() && selectOption(option)\"\r\n [attr.disabled]=\"isBlocked()\"\r\n >\r\n {{ option.label }}\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"no-results\">No se encontraron resultados</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectCustomSearch } from '../select-custom-search/select-custom-search';\r\nimport { DateTimePicker } from '../date-time-picker/date-time-picker';\r\n\r\ntype FieldType =\r\n | 'text'\r\n | 'email'\r\n | 'number'\r\n | 'date'\r\n | 'datetime-local'\r\n | 'select'\r\n | 'radio'\r\n | 'checkbox'\r\n | 'textarea'\r\n | 'disabled'\r\n | 'password'\r\n | 'time'\r\n | 'file';\r\n\r\nexport interface Option {\r\n value: string | number | boolean;\r\n label: string;\r\n}\r\n\r\nexport interface FieldConfig {\r\n key: string;\r\n label?: string;\r\n type: FieldType;\r\n placeholder?: string;\r\n required?: boolean;\r\n options?: Option[];\r\n col?: number;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n matchWith?: string;\r\n copyFrom?: string;\r\n pattern?: string;\r\n patternType?:\r\n | 'numbers'\r\n | 'phone'\r\n | 'custom'\r\n | 'text'\r\n | 'username'\r\n | 'alphanumeric';\r\n\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nexport interface SectionConfig {\r\n title?: string;\r\n description?: string;\r\n fields: FieldConfig[];\r\n}\r\n\r\ninterface RealTimeCopyItem {\r\n fieldKey: string;\r\n subscription: Subscription;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-dynamic-form-fields',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, SelectCustomSearch, DateTimePicker],\r\n templateUrl: './dynamic-form-fields.html',\r\n styleUrl: './dynamic-form-fields.css',\r\n})\r\nexport class DynamicFormFields implements OnInit, OnDestroy {\r\n form = input.required<FormGroup>();\r\n sections = input<SectionConfig[]>([]);\r\n compact = input<boolean>(false);\r\n\r\n private copyFromSubscriptions: Subscription[] = [];\r\n private realTimeCopySubscriptions: RealTimeCopyItem[] = [];\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n this.setupCopyFromLogic();\r\n }, 100);\r\n }\r\n\r\n getDatePickerMode(fieldType: FieldType): 'date' | 'datetime' {\r\n return fieldType === 'datetime-local' ? 'datetime' : 'date';\r\n }\r\n\r\n private setupCopyFromLogic(): void {\r\n this.sections().forEach((section) => {\r\n section.fields.forEach((field) => {\r\n if (field.copyFrom) {\r\n this.setupFieldCopy(field);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private setupFieldCopy(field: FieldConfig): void {\r\n const targetControl = this.form().get(field.key);\r\n if (!targetControl) return;\r\n\r\n const sourceControl = this.form().get(field.copyFrom!);\r\n if (!sourceControl) return;\r\n\r\n const triggerFieldKey = this.findTriggerField();\r\n\r\n if (!triggerFieldKey) {\r\n this.setupSimpleCopy(sourceControl, targetControl);\r\n return;\r\n }\r\n\r\n const triggerControl = this.form().get(triggerFieldKey);\r\n if (!triggerControl) {\r\n this.setupSimpleCopy(sourceControl, targetControl);\r\n return;\r\n }\r\n\r\n const subscription = triggerControl.valueChanges.subscribe(\r\n (shouldCopy: boolean) => {\r\n if (shouldCopy) {\r\n targetControl.setValue(sourceControl.value);\r\n targetControl.disable();\r\n this.setupRealTimeCopy(sourceControl, targetControl, field.key);\r\n } else {\r\n targetControl.enable();\r\n\r\n targetControl.setValue('');\r\n this.removeRealTimeCopy(field.key);\r\n }\r\n }\r\n );\r\n\r\n this.copyFromSubscriptions.push(subscription);\r\n\r\n if (triggerControl.value === true) {\r\n targetControl.setValue(sourceControl.value);\r\n targetControl.disable();\r\n this.setupRealTimeCopy(sourceControl, targetControl, field.key);\r\n }\r\n }\r\n\r\n private findTriggerField(): string {\r\n for (const section of this.sections()) {\r\n const triggerField = section.fields.find(\r\n (f) =>\r\n f.type === 'radio' &&\r\n (f.key.includes('is_owner') || f.key.includes('infractor-owner'))\r\n );\r\n if (triggerField) return triggerField.key;\r\n }\r\n return '';\r\n }\r\n\r\n private setupSimpleCopy(\r\n sourceControl: AbstractControl,\r\n targetControl: AbstractControl\r\n ): void {\r\n const subscription = sourceControl.valueChanges.subscribe((value) => {\r\n targetControl.setValue(value);\r\n });\r\n this.copyFromSubscriptions.push(subscription);\r\n }\r\n\r\n private setupRealTimeCopy(\r\n sourceControl: AbstractControl,\r\n targetControl: AbstractControl,\r\n fieldKey: string\r\n ): void {\r\n this.removeRealTimeCopy(fieldKey);\r\n\r\n const subscription = sourceControl.valueChanges.subscribe((value) => {\r\n targetControl.setValue(value);\r\n });\r\n\r\n this.realTimeCopySubscriptions.push({\r\n fieldKey,\r\n subscription,\r\n });\r\n }\r\n\r\n private removeRealTimeCopy(fieldKey: string): void {\r\n const index = this.realTimeCopySubscriptions.findIndex(\r\n (item) => item.fieldKey === fieldKey\r\n );\r\n if (index >= 0) {\r\n this.realTimeCopySubscriptions[index].subscription.unsubscribe();\r\n this.realTimeCopySubscriptions.splice(index, 1);\r\n }\r\n }\r\n\r\n ctrl = (key: string): AbstractControl | null => this.form().get(key);\r\n\r\n getCheckboxArray(key: string): FormArray {\r\n return this.form().get(key) as FormArray;\r\n }\r\n\r\n onCheckboxChange(event: Event, fieldKey: string, optionIndex: number) {\r\n const checkbox = event.target as HTMLInputElement;\r\n const checkboxArray = this.getCheckboxArray(fieldKey);\r\n checkboxArray.at(optionIndex).setValue(checkbox.checked);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.copyFromSubscriptions.forEach((sub) => sub.unsubscribe());\r\n this.realTimeCopySubscriptions.forEach((item) =>\r\n item.subscription.unsubscribe()\r\n );\r\n }\r\n\r\n onCancel(): void {\r\n }\r\n\r\n onUppercaseInput(event: Event, fieldType: string, key: string) {\r\n if (['email','password'].includes(fieldType)) return;\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.toUpperCase();\r\n \r\n input.value = value;\r\n this.form().get(key)?.setValue(value, { emitEvent: false });\r\n }\r\n \r\n}\r\n","@if (form()) {\r\n<form class=\"form\" [formGroup]=\"form()\" [class.form--compact]=\"compact()\">\r\n @for (sec of sections(); track $index) {\r\n <section class=\"section\">\r\n @if (sec.title) {\r\n <h3 class=\"section-title\">{{ sec.title }}</h3>\r\n } @if (sec.description) {\r\n <p class=\"section-desc\">{{ sec.description }}</p>\r\n }\r\n\r\n <div class=\"grid\">\r\n @for (f of sec.fields; track f.key) {\r\n <div class=\"col\" [style.--col-span]=\"f.col || 6\">\r\n @if(f.label) {\r\n <label\r\n [class.label-radio]=\"f.type === 'radio'\"\r\n [class.label-checkbox]=\"f.type === 'checkbox'\"\r\n [class.label-disabled]=\"f.readonly || f.disabled\"\r\n class=\"label\"\r\n >\r\n {{ f.label }} </label\r\n >} @if (['text','number','email', 'password', 'time'].includes(f.type))\r\n {\r\n <input\r\n class=\"input\"\r\n [type]=\"f.type\"\r\n [placeholder]=\"f.placeholder\"\r\n [formControlName]=\"f.key\"\r\n [disabled]=\"f.disabled || false\"\r\n [readonly]=\"f.readonly || false\"\r\n (input)=\"onUppercaseInput($event, f.type, f.key)\"\r\n />\r\n } @if (['date', 'datetime-local'].includes(f.type)) {\r\n <lib-date-time-picker\r\n [mode]=\"getDatePickerMode(f.type)\"\r\n [placeholder]=\"\r\n f.placeholder ||\r\n (f.type === 'date'\r\n ? 'Seleccionar fecha'\r\n : 'Seleccionar fecha y hora')\r\n \"\r\n [formControlName]=\"f.key\"\r\n [minDate]=\"f.minDate || null\"\r\n [maxDate]=\"f.maxDate || null\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n />\r\n } @if (f.type === 'textarea') {\r\n <textarea\r\n class=\"input textarea\"\r\n [placeholder]=\"f.placeholder\"\r\n [formControlName]=\"f.key\"\r\n rows=\"6\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n (input)=\"onUppercaseInput($event, f.type, f.key)\"\r\n ></textarea>\r\n }@if (f.type === 'select') {\r\n\r\n <lib-select-custom-search\r\n [options]=\"f.options ?? []\"\r\n [placeholder]=\"f.placeholder || 'Seleccionar...'\"\r\n [formControlName]=\"f.key\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n />\r\n } @if (f.type === 'radio') {\r\n <div class=\"radio-group\">\r\n @for (o of f.options ?? []; track o.value) {\r\n <label class=\"radio\">\r\n {{ o.label }}\r\n <input type=\"radio\" [value]=\"o.value\" [formControlName]=\"f.key\" [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\" />\r\n </label>\r\n }\r\n </div>\r\n } @if (f.type === 'checkbox') {\r\n <div class=\"checkbox-group\">\r\n @for (o of f.options ?? []; track o.value; let i = $index) {\r\n <label class=\"checkbox\">\r\n {{ o.label }}\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"getCheckboxArray(f.key).at(i).value\"\r\n (change)=\"onCheckboxChange($event, f.key, i)\"\r\n />\r\n </label>\r\n }\r\n </div>\r\n } @if (f.type === 'disabled') {\r\n <label class=\"label\">{{ f.label }}</label>\r\n <input\r\n class=\"input input--disabled\"\r\n [placeholder]=\"f.placeholder || 'Automático'\"\r\n disabled\r\n />\r\n } @if (ctrl(f.key)?.touched && ctrl(f.key)?.invalid) {\r\n <div class=\"error\">\r\n @if (ctrl(f.key)?.errors?.['required']) {\r\n <span>Campo requerido</span>\r\n } @if (ctrl(f.key)?.errors?.['email']) {\r\n <span>Correo inválido</span>\r\n } @if (ctrl(f.key)?.errors?.['pattern']) {\r\n <span>\r\n @switch (f.patternType) { @case ('numbers') { Solo se permiten\r\n números } @case ('phone') { Formato de teléfono inválido } @case\r\n ('text') { Solo se permiten letras y espacios } @case ('username') {\r\n Solo se permiten letras, números, puntos y guiones bajos (no al\r\n inicio ni al final) } @case ('alphanumeric') { Solo se permiten\r\n letras y números } @default { Formato inválido } }\r\n </span>\r\n } @if (ctrl(f.key)?.errors?.['notMatching']) {\r\n <span>Las contraseñas no coinciden</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n }\r\n</form>\r\n}\r\n","import {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalFormStep } from '../modal-form/modal-form';\r\n\r\n@Component({\r\n selector: 'lib-wizard-form',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './wizard-form.html',\r\n styleUrl: './wizard-form.css',\r\n})\r\nexport class WizardForm {\r\n form = input<FormGroup>();\r\n currentStep = input<number>(1);\r\n steps = input<ModalFormStep[]>([]);\r\n\r\n canContinue = output<boolean>();\r\n\r\n // Devuelve la key del paso\r\n currentStepKey = computed(() => {\r\n const index = this.currentStep() - 1;\r\n return this.steps()[index]?.key ?? null;\r\n });\r\n\r\n // Devuelve el subform correspondiente\r\n currentGroup = computed(() => {\r\n const key = this.currentStepKey();\r\n return key ? (this.form()?.get(key) as FormGroup) : null;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.currentGroup();\r\n\r\n if (!group) {\r\n this.canContinue.emit(false);\r\n return;\r\n }\r\n\r\n this.canContinue.emit(group.valid);\r\n\r\n group.statusChanges.subscribe(() => {\r\n this.canContinue.emit(group.valid);\r\n });\r\n\r\n group.valueChanges.subscribe(() => {\r\n this.canContinue.emit(group.valid);\r\n });\r\n });\r\n }\r\n\r\n currentGroupComponent = computed(() => {\r\n const index = this.currentStep() - 1;\r\n return this.steps()[index].component;\r\n });\r\n}\r\n","<ng-container>\r\n\r\n @if (currentGroup()) {\r\n <ng-container\r\n *ngComponentOutlet=\"currentGroupComponent(); inputs: { group: currentGroup() }\"\r\n ></ng-container>\r\n }\r\n\r\n</ng-container>\r\n","import PubSub from 'pubsub-js';\r\n\r\nexport const TOAST_EVENTS = {\r\n SHOW_TOAST: 'SHOW_TOAST',\r\n SHOW_TOAST_WITH_ACTION: 'SHOW_TOAST_WITH_ACTION',\r\n HIDE_TOAST: 'HIDE_TOAST',\r\n} as const;\r\n\r\nexport interface ToastData {\r\n description: string;\r\n duration?: number;\r\n buttonText?: string;\r\n action?: () => void;\r\n}\r\n\r\n\r\nexport class ToastHelper {\r\n \r\n static show(description: string, duration?: number) {\r\n PubSub.publish(TOAST_EVENTS.SHOW_TOAST, {\r\n description,\r\n duration,\r\n });\r\n }\r\n\r\n static showWithAction(\r\n description: string,\r\n buttonText: string,\r\n action: () => void,\r\n duration?: number\r\n ) {\r\n PubSub.publish(TOAST_EVENTS.SHOW_TOAST_WITH_ACTION, {\r\n description,\r\n buttonText,\r\n action,\r\n duration,\r\n });\r\n }\r\n\r\n \r\n static success(message: string, duration?: number) {\r\n this.show(`${message}`, duration);\r\n }\r\n\r\n\r\n static error(message: string, duration?: number) {\r\n this.show(`${message}`, duration || 6000); \r\n }\r\n\r\n\r\n static warning(message: string, duration?: number) {\r\n this.show(`${message}`, duration);\r\n }\r\n\r\n \r\n static info(message: string, duration?: number) {\r\n this.show(`ℹ${message}`, duration);\r\n }\r\n\r\n\r\n static hide() {\r\n PubSub.publish(TOAST_EVENTS.HIDE_TOAST);\r\n }\r\n\r\n \r\n static showUndo(\r\n message: string,\r\n undoAction: () => void,\r\n duration: number = 8000\r\n ) {\r\n this.showWithAction(message, 'Deshacer', undoAction, duration);\r\n }\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n input,\r\n output,\r\n signal,\r\n Type,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { WizardForm } from '../wizard-form/wizard-form';\r\nimport { ToastHelper } from '../../helpers/toast-helper';\r\n\r\nexport interface ModalFormStep {\r\n key: string;\r\n label: string;\r\n component: Type<any>;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-modal-form',\r\n standalone: true,\r\n imports: [CommonModule, WizardForm],\r\n templateUrl: './modal-form.html',\r\n styleUrl: './modal-form.css',\r\n})\r\nexport class ModalForm {\r\n isFull = input<boolean>(false);\r\n title = input<string>('Formulario');\r\n subtitle = input<string | null>('');\r\n submitLabel = input<string>('Guardar');\r\n\r\n form = input<FormGroup>();\r\n steps = input<ModalFormStep[]>([]);\r\n\r\n currentStep = signal<number>(1);\r\n canContinue = signal<boolean>(false);\r\n\r\n onSubmit = output<{form: any; evidence?: File}>();\r\n onCancel = output<void>();\r\n evidenceChange = output<File>();\r\n\r\n evidenceFile = signal<File | null>(null);\r\n evidenceFileName = signal<string | null>(null);\r\n showActionsLeft = input<boolean>(false);\r\n\r\n evidenceLabel = input<string>('Cargar archivo');\r\n evidenceHelperText = input<string>('Formato admitido');\r\n evidenceAccept = input<string>('application/pdf');\r\n maxSizeMB = input<number>(25);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.steps().length) {\r\n this.canContinue.set(true);\r\n } else {\r\n this.currentStep.set(1);\r\n }\r\n });\r\n }\r\n\r\n nextStep() {\r\n if (this.currentStep() < this.steps().length) {\r\n this.currentStep.update(v => v + 1);\r\n }\r\n }\r\n\r\n prevStep() {\r\n if (this.currentStep() > 1) {\r\n this.currentStep.update(v => v - 1);\r\n }\r\n }\r\n\r\n submitForm() {\r\n this.onSubmit.emit({\r\n form: this.form()?.value,\r\n evidence: this.evidenceFileName() ? (this.evidenceFile() as File) : undefined\r\n });\r\n }\r\n\r\n onFileSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files?.length) return;\r\n\r\n const file = input.files[0];\r\n\r\n if (!this.evidenceAccept().includes(file.type)) {\r\n ToastHelper.warning('Tipo de archivo no permitido');\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Tamaño máximo 25MB\r\n if (file.size > this.maxSizeMB() * 1024 * 1024) {\r\n ToastHelper.warning(`El archivo no puede superar los ${this.maxSizeMB}MB`);\r\n input.value = '';\r\n return;\r\n }\r\n\r\n this.evidenceFile.set(file);\r\n this.evidenceFileName.set(file.name);\r\n this.evidenceChange.emit(file);\r\n }\r\n}","<div class=\"modal-form-container\" [class.expanded]=\"isFull()\">\r\n <div class=\"header-content\">\r\n <h1>{{ title() }}</h1>\r\n <p>{{ subtitle() }}</p>\r\n </div>\r\n\r\n @if (steps() && steps().length > 1) {\r\n <div class=\"steps\">\r\n @for (step of steps(); track $index) {\r\n <div\r\n class=\"step\"\r\n [class.step-active]=\"currentStep() === $index + 1\"\r\n [class.step-completed]=\"currentStep() > $index + 1\"\r\n >\r\n @if (currentStep() > $index + 1) {\r\n <span class=\"check-icon\">✔</span>\r\n }\r\n <span>Paso {{ $index + 1 }}: {{ step.label }}</span>\r\n </div>\r\n\r\n @if ($index < steps().length - 1) {\r\n <span class=\"separator\">›</span>\r\n } }\r\n </div>\r\n }\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"body-content\">\r\n @if (!steps() || !steps().length) {\r\n <ng-content></ng-content>\r\n } @else {\r\n <!-- Render dinámico del paso actual -->\r\n <lib-wizard-form\r\n [form]=\"form()\"\r\n [currentStep]=\"currentStep()\"\r\n [steps]=\"steps()\"\r\n (canContinue)=\"canContinue.set($event)\"\r\n ></lib-wizard-form>\r\n }\r\n </div>\r\n\r\n <div class=\"actions\">\r\n @if (showActionsLeft()){\r\n <div class=\"actions-left\">\r\n <p class=\"file-type\">{{ evidenceHelperText() }}</p>\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"fileInput.click()\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"upload-icon icon icon-tabler icons-tabler-outline icon-tabler-cloud-upload\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1\"\r\n />\r\n <path d=\"M9 15l3 -3l3 3\" />\r\n <path d=\"M12 12l0 9\" />\r\n </svg>\r\n <span class=\"label-button\">\r\n {{ evidenceFileName() || evidenceLabel() }}\r\n </span>\r\n </button>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n [accept]=\"evidenceAccept()\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <div class=\"actions-right\">\r\n @if (!steps() || steps().length <= 1) {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"onCancel.emit()\">\r\n Cancelar\r\n </button>\r\n } @else if (currentStep() === 1) {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"onCancel.emit()\">\r\n Cancelar\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"prevStep()\">\r\n Volver\r\n </button>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n (click)=\"!steps() || !steps().length ? submitForm() :\r\n currentStep() === steps().length ? submitForm() : nextStep()\"\r\n [disabled]=\"!canContinue()\"\r\n >\r\n {{ !steps() || !steps().length ? submitLabel() : currentStep() ===\r\n steps().length ? submitLabel() : 'Continuar' }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { DynamicFormFields, FieldConfig, SectionConfig } from '../dynamic-form-fields/dynamic-form-fields';\r\n\r\n@Component({\r\n selector: 'lib-dialog-alert-component',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, DynamicFormFields],\r\n templateUrl: './dialog-alert.html',\r\n styleUrl: './dialog-alert.css',\r\n})\r\nexport class DialogAlertComponent implements OnInit, OnChanges {\r\n @Input() title: string = 'Mensaje';\r\n @Input() message!: string;\r\n @Input() type: 'warning' | 'error' | 'info' | 'success' = 'info';\r\n /** Acción asociada al alert (ej: 'desactivar', 'eliminar', 'anular', 'sancionar') */\r\n @Input() action?: string;\r\n /** Forzar mostrar el campo razón si se necesita */\r\n @Input() showReason: boolean = false;\r\n @Input() confirm: boolean = false;\r\n @Input() confirmLabel: string = 'Aceptar';\r\n @Output() close = new EventEmitter<boolean>();\r\n /** Emite la razón escrita cuando aplica */\r\n @Input() reasonOptions: { label: string; value: any }[] = [];\r\n @Output() confirmReason = new EventEmitter<{\r\n reason?: string;\r\n observations?: string;\r\n }>();\r\n\r\n icon = ':fuente_de_información:';\r\n\r\n // Formulario interno que pasaremos a dynamic-form-fields\r\n form: FormGroup = new FormGroup({ reason: new FormControl('') });\r\n\r\n // Secciones para dynamic-form-fields\r\n sections: SectionConfig[] = [];\r\n\r\n // Calcula si se debe mostrar el campo razón\r\n get isReasonNeeded(): boolean {\r\n const action = (this.action || '').toLowerCase();\r\n const actionsRequiringReason = ['deactivate', 'delete', 'anulate', 'sancionar', 'active'];\r\n return this.showReason || actionsRequiringReason.includes(action);\r\n }\r\n\r\n ngOnInit() {\r\n this.updateFormAndSections();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['action'] || changes['showReason'] || changes['type']) {\r\n this.updateFormAndSections();\r\n }\r\n }\r\n\r\n private updateFormAndSections() {\r\n // Preparar form y sections según si la razón es necesaria\r\n if (this.isReasonNeeded) {\r\n this.form = new FormGroup({ reason: new FormControl('', [Validators.required]), observations: new FormControl('') });\r\n const reasonSection: SectionConfig[] = [\r\n {\r\n fields: [\r\n {\r\n key: \"reason\",\r\n label: \"Razón\",\r\n type: \"select\",\r\n placeholder: \"Seleccionar\",\r\n required: true,\r\n col: 12,\r\n options: this.reasonOptions ?? [],\r\n },\r\n {\r\n key: \"observations\",\r\n label: \"Observaciones\",\r\n type: \"textarea\",\r\n placeholder: \"Escriba las observaciones...\",\r\n col: 12,\r\n }\r\n ],\r\n },\r\n ];\r\n this.sections = reasonSection;\r\n } else {\r\n this.form = new FormGroup({ reason: new FormControl('') });\r\n this.sections = [];\r\n }\r\n }\r\n\r\n onConfirm() {\r\n if (this.isReasonNeeded && !this.form.get('reason')?.value?.trim().length) {\r\n return;\r\n }\r\n \r\n const reason = this.form.get('reason')?.value;\r\n const observations = this.form.get('observations')?.value;\r\n \r\n this.confirmReason.emit({\r\n reason: reason || undefined,\r\n observations: observations || undefined,\r\n });\r\n \r\n this.close.emit(true);\r\n }\r\n\r\n onCancel() {\r\n this.close.emit(false);\r\n }\r\n}","<div class=\"modal-backdrop\">\r\n <div class=\"modal-card\" [class.modal-card-compact]=\"!isReasonNeeded\">\r\n <div class=\"modal-header\">\r\n <h2>{{ title }}</h2>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>{{ message }}</p>\r\n <lib-dynamic-form-fields [form]=\"form\" [sections]=\"sections\"></lib-dynamic-form-fields>\r\n </div>\r\n <div class=\"modal-footer\">\r\n @if (confirm) {\r\n <button class=\"btn cancel\" (click)=\"onCancel()\">Cancelar</button>\r\n <button class=\"btn confirm\" [ngClass]=\"type\" (click)=\"onConfirm()\">{{ confirmLabel }}</button>\r\n } @else {\r\n <button class=\"btn confirm\" [ngClass]=\"type\" (click)=\"onConfirm()\">{{ confirmLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nexport interface DialogItem {\r\n key: string;\r\n label: string;\r\n value: string | number | Date;\r\n expandible?: boolean;\r\n children?: DialogItem[];\r\n}\r\n\r\n@Component({\r\n selector: 'lib-dialog-confirmation',\r\n imports: [CommonModule],\r\n templateUrl: './dialog-confirmation.html',\r\n styleUrl: './dialog-confirmation.css',\r\n})\r\nexport class DialogConfirmation {\r\n @Input() title: string = 'TITULO';\r\n @Input() confirm: boolean = false;\r\n @Input() confirmLabel: string = 'Aceptar';\r\n @Input() items: DialogItem[] = [];\r\n \r\n @Output() close = new EventEmitter<boolean>();\r\n\r\n expandedIndex: number | null = null;\r\n\r\n toggle(index: number) {\r\n this.expandedIndex = this.expandedIndex === index ? null : index;\r\n }\r\n\r\n onConfirm() {\r\n console.log('confirmado');\r\n this.close.emit(true);\r\n }\r\n\r\n onCancel() {\r\n this.close.emit(false);\r\n }\r\n}\r\n","<div class=\"modal-backdrop\">\r\n <div class=\"modal-card\">\r\n <div class=\"modal-header\">\r\n <h2>{{ title }}</h2>\r\n <button class=\"close-btn\" (click)=\"onCancel()\" aria-label=\"Cerrar\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"info-container\" [class.expanded]=\"expandedIndex !== null\">\r\n @for (item of items; track item.key; let i = $index) {\r\n\r\n <div class=\"info-item\">\r\n <div\r\n class=\"info-main\"\r\n [class.info-main-expanded]=\"item.expandible\"\r\n (click)=\"item.expandible && toggle(i)\"\r\n >\r\n <span class=\"label\"\r\n >{{ item.label }} @if (item.expandible) {\r\n <span class=\"arrow\"> {{ expandedIndex === i ? '▲' : '▼' }} </span>\r\n }\r\n </span>\r\n <span class=\"value\"> {{ item.value }} </span>\r\n </div>\r\n\r\n @if (expandedIndex === i && item.children?.length) {\r\n <div class=\"info-children\">\r\n @for (child of item.children; track child.key) {\r\n <div class=\"info-item child-item\">\r\n <div class=\"info-main\">\r\n <span class=\"label\">{{ child.label }}</span>\r\n <span class=\"value\">{{ child.value }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n }\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n @if (confirm) {\r\n <button class=\"btn cancel\" (click)=\"onCancel()\">Cancelar</button>\r\n <button class=\"btn confirm\" (click)=\"onConfirm()\">\r\n {{ confirmLabel }}\r\n </button>\r\n } @else {\r\n <button class=\"btn confirm\" (click)=\"onConfirm()\">\r\n {{ confirmLabel }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-not-found-modal',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './not-found-modal.html',\r\n styleUrl: './not-found-modal.css',\r\n})\r\nexport class NotFoundModal {\r\n isVisible = input<boolean>(false);\r\n title = input<string>('Documento no encontrado');\r\n message = input<string>('No encontrado');\r\n\r\n onClose = output<void>();\r\n\r\n onOverlayClick(event: Event) {\r\n if (event.target === event.currentTarget) {\r\n this.onClose.emit();\r\n }\r\n }\r\n\r\n onAccept() {\r\n this.onClose.emit();\r\n }\r\n}\r\n","<div\r\n class=\"modal-overlay\"\r\n (click)=\"onOverlayClick($event)\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n>\r\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"modal-header\">\r\n <div class=\"icon-container\">\r\n <svg\r\n width=\"48\"\r\n height=\"48\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"error-icon\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ef4444\" stroke-width=\"2\" />\r\n <path\r\n d=\"M15 9l-6 6\"\r\n stroke=\"#ef4444\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M9 9l6 6\"\r\n stroke=\"#ef4444\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h2 class=\"modal-title\">{{ title() }}</h2>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <p class=\"modal-message\">{{ message() }}</p>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <button\r\n class=\"btn-primary\"\r\n (click)=\"onAccept()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"'Cerrar modal de documento no encontrado'\"\r\n >\r\n Aceptar\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-loader',\r\n imports: [],\r\n templateUrl: './loader.html',\r\n styleUrl: './loader.css'\r\n})\r\nexport class Loader {\r\n\r\n}\r\n","<div class=\"loader-overlay\">\r\n <div class=\"loader\"></div>\r\n</div>\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\ninterface StepConfig {\r\n title: string;\r\n key: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProgressFormService {\r\n currentPage = signal(1);\r\n totalPages = signal(6);\r\n\r\n private stepsConfig: { [key: number]: StepConfig } = {\r\n 1: { title: 'Paso 1', key: 'step1' },\r\n 2: { title: 'Paso 2', key: 'step2' },\r\n };\r\n\r\n resetData() {\r\n this.currentPage.set(1);\r\n }\r\n\r\n getProgressText() {\r\n return `${this.currentPage()}/${this.totalPages()}`;\r\n }\r\n\r\n getCurrentPageTitle(): string {\r\n const currentPage = this.currentPage();\r\n return this.stepsConfig[currentPage]?.title || `Página ${currentPage}`;\r\n }\r\n\r\n nextPage(): boolean {\r\n const current = this.currentPage();\r\n\r\n if (current < this.totalPages()) {\r\n this.currentPage.set(current + 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n prevPage(): boolean {\r\n const current = this.currentPage();\r\n\r\n if (current > 1) {\r\n this.currentPage.set(current - 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getProgressPercentage(): number {\r\n const current = this.currentPage();\r\n const total = this.totalPages();\r\n return Math.round((current / total) * 100);\r\n }\r\n}\r\n","import { Component, Input, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ProgressFormService } from '../../services/progress/progress-service';\r\n\r\n@Component({\r\n selector: 'lib-progress-bar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './progress-bar.html',\r\n styleUrl: './progress-bar.css',\r\n})\r\nexport class ProgressBar {\r\n constructor(public progress: ProgressFormService) {}\r\n title = input<string>('');\r\n current = input<number>(1);\r\n total = input<number>(1);\r\n\r\n get percentage() {\r\n return Math.round((this.current() / this.total()) * 100);\r\n }\r\n\r\n get text() {\r\n return `Paso ${this.current()} de ${this.total()}`;\r\n }\r\n}\r\n","<div class=\"progress-container\">\r\n <div class=\"progress-header\">\r\n <span class=\"progress-title\">{{ title() }}</span>\r\n <span class=\"progress-fraction\">{{ text }}</span>\r\n </div>\r\n\r\n <div class=\"progress-bar\">\r\n <div\r\n class=\"progress-fill\"\r\n [style.width.%]=\"percentage\"\r\n ></div>\r\n </div>\r\n</div>\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-processing-overlay',\r\n imports: [],\r\n templateUrl: './processing-overlay.html',\r\n styleUrl: './processing-overlay.css',\r\n})\r\nexport class ProcessingOverlay {\r\n loadingText = input<string>('');\r\n}\r\n","<div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <figure>\r\n <svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M58.8943 10.1325C61.244 6.40017 66.7559 6.40017 69.1056 10.1325L74.7379 19.079C76.2827 21.5328 79.399 22.5304 82.1127 21.4398L92.0068 17.4636C96.1345 15.8048 100.594 18.9967 100.268 23.3769L99.487 33.8765C99.2728 36.7562 101.199 39.368 104.045 40.0572L114.422 42.57C118.751 43.6183 120.454 48.783 117.577 52.138L110.681 60.18C108.79 62.3857 108.79 65.6141 110.681 67.8198L117.577 75.8619C120.454 79.2169 118.751 84.3816 114.422 85.4298L104.045 87.9427C101.199 88.6319 99.2728 91.2436 99.487 94.1234L100.268 104.623C100.594 109.003 96.1345 112.195 92.0069 110.536L82.1127 106.56C79.399 105.469 76.2827 106.467 74.7379 108.921L69.1056 117.867C66.756 121.6 61.244 121.6 58.8943 117.867L53.2621 108.921C51.7173 106.467 48.6009 105.469 45.8872 106.56L35.9931 110.536C31.8655 112.195 27.4062 109.003 27.732 104.623L28.5129 94.1234C28.7271 91.2436 26.8011 88.6319 23.955 87.9427L13.5783 85.4299C9.24928 84.3816 7.546 79.2169 10.4228 75.8619L17.3186 67.8198C19.21 65.6141 19.21 62.3857 17.3186 60.18L10.4228 52.138C7.546 48.783 9.24928 43.6183 13.5783 42.57L23.955 40.0572C26.8011 39.368 28.7271 36.7562 28.5129 33.8765L27.732 23.3769C27.4062 18.9967 31.8655 15.8048 35.9931 17.4636L45.8872 21.4398C48.6009 22.5304 51.7173 21.5328 53.2621 19.079L58.8943 10.1325Z\" fill=\"#BFD100\"/>\r\n </svg> \r\n </figure>\r\n <p class=\"loading-text\">{{ loadingText() }}</p>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input, signal } from '@angular/core';\r\n\r\nexport interface InfoItem {\r\n label: string;\r\n value: string | boolean | null | undefined;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-info-group',\r\n imports: [CommonModule],\r\n templateUrl: './info-group.html',\r\n styleUrl: './info-group.css',\r\n})\r\nexport class InfoGroup {\r\n type = input<'success' | 'error' | 'info'>('info');\r\n showBox = input<boolean>(false)\r\n // modo info\r\n items = input<InfoItem[]>([]);\r\n title = input<string | null>(null);\r\n\r\n // modo box\r\n fullName = input<string | null>(null);\r\n typeDocument = input<string | null>(null);\r\n document = input<string | null>(null);\r\n}","@if (!showBox()) {\r\n<div class=\"info-card\">\r\n @if (title()) {\r\n <h3 class=\"info-title\">{{ title() }}</h3>\r\n }\r\n\r\n <div class=\"info-grid\">\r\n @for (item of items(); track item.label) {\r\n <div class=\"info-row\">\r\n <span class=\"info-label\">{{ item.label }}</span>\r\n <span class=\"info-value\">\r\n {{ item.value === true ? \"SI\" : item.value === false ? \"NO\" : item.value\r\n || \"-\" }}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n} \r\n\r\n@if (showBox()) {\r\n<div class=\"person-box\" [ngClass]=\"type()\" >\r\n <span class=\"person-name\">{{ fullName() || '-' }}</span>\r\n <span class=\"divider\"></span>\r\n <span class=\"person-doc\">{{ typeDocument() }} {{ document() || '-' }}</span>\r\n</div>\r\n}\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\nexport interface Feature {\r\n icon?: string;\r\n title: string;\r\n description: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-feature-card',\r\n standalone: true,\r\n templateUrl: './feature-card.html',\r\n styleUrls: ['./feature-card.css'],\r\n})\r\nexport class FeatureCard {\r\n feature = input<Feature>();\r\n showLeading = input<boolean>(false);\r\n showTrailling = input<boolean>(false);\r\n}\r\n","<div class=\"feature-card\">\r\n @if(showLeading()){\r\n <div class=\"feature-icon-leading\">\r\n <img [src]=\"feature()?.icon\" alt=\"{{ feature()?.title }}\" />\r\n </div>\r\n }\r\n \r\n <div class=\"feature-content\">\r\n <p>{{ feature()!.title }}</p>\r\n <h3>{{ feature()!.description }}</h3>\r\n </div>\r\n\r\n @if(showTrailling()){\r\n <div class=\"feature-icon-trailling\">\r\n <img [src]=\"feature()?.icon\" alt=\"{{ feature()?.title }}\" />\r\n </div>\r\n }\r\n</div>\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, input, Input, OnChanges, Output } from '@angular/core';\r\n\r\nexport interface SideCardItem {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface SideCardSection {\r\n title?: string;\r\n items?: SideCardItem[];\r\n showSlider?: boolean;\r\n sliderLabel?: string;\r\n sliderValue?: number; \r\n sliderUnit?: string;\r\n\r\n buttonSectionLabel?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-side-card',\r\n imports: [CommonModule],\r\n templateUrl: './side-card.html',\r\n styleUrl: './side-card.css',\r\n})\r\nexport class SideCard implements OnChanges {\r\n @Input() isFloating = true;\r\n @Input() isCompact = false;\r\n // Header\r\n @Input() modeSideCard: 'create' | 'edit' | 'info' = 'create';\r\n @Input() showTypeSelector = true;\r\n selectedType: 'radial' | 'poligonal' = 'radial';\r\n @Output() btnClickIcon = new EventEmitter<void>();\r\n\r\n // Input\r\n @Input() placeholder = 'NOMBRE';\r\n @Input() value = '';\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() typeChange = new EventEmitter<'radial' | 'poligonal'>();\r\n\r\n @Input() statusValue: 1 | 2 = 1; // backend value\r\n @Output() statusChange = new EventEmitter<1 | 2>();\r\n\r\n // Sections\r\n @Input() sections: SideCardSection[] = [];\r\n\r\n @Output() sectionButtonClick = new EventEmitter<SideCardSection>();\r\n\r\n // Slider\r\n @Input() min = 0;\r\n @Input() max = 1000;\r\n sliderLabel = 'Radio';\r\n sliderUnit = 'km';\r\n\r\n sliderValue = 0;\r\n @Output() sliderChange = new EventEmitter<number>();\r\n\r\n //actions\r\n @Input() showBtnPrimary = false;\r\n @Input() primaryButtonLabel = 'Aceptar';\r\n \r\n @Input() showBtnSecondary = false;\r\n @Input() secondaryButtonLabel = 'Cancelar';\r\n\r\n @Output() buttonClick = new EventEmitter<'primary' | 'secondary'>();\r\n\r\n get statusLabel(): string {\r\n return this.statusValue === 1 ? 'Activo' : 'Inactivo';\r\n }\r\n\r\n get statusClass(): string {\r\n return this.statusValue === 1\r\n ? 'status-chip-active'\r\n : 'status-chip-inactive';\r\n }\r\n\r\n get sliderPercentage(): string {\r\n const max = this.max || 1000;\r\n return ((this.sliderValue / max) * 100) + '%';\r\n }\r\n\r\n // Inicializa slider cuando llegan secciones\r\n ngOnChanges() {\r\n const section = this.sections.find(s => s.showSlider);\r\n\r\n if (section) {\r\n this.sliderLabel = section.sliderLabel || 'Radio';\r\n this.sliderUnit = section.sliderUnit || 'km';\r\n this.sliderValue = section.sliderValue ?? 0;\r\n } \r\n }\r\n\r\n selectType(type: 'radial' | 'poligonal') {\r\n this.selectedType = type;\r\n this.typeChange.emit(type);\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.value = input.value;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n focusInput(input: HTMLInputElement) {\r\n input.focus();\r\n }\r\n\r\n onSliderChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.sliderValue = Number(input.value);\r\n this.sliderChange.emit(this.sliderValue);\r\n }\r\n\r\n onButtonSectionClick(section: SideCardSection) {\r\n this.sectionButtonClick.emit(section);\r\n }\r\n\r\n onButtonClick(type: 'primary' | 'secondary') {\r\n this.buttonClick.emit(type);\r\n }\r\n\r\n changeStatusLabel() {\r\n if (this.modeSideCard !== 'edit') return;\r\n\r\n this.statusValue = this.statusValue === 1 ? 2 : 1;\r\n this.statusChange.emit(this.statusValue);\r\n }\r\n\r\n buttonClickIcon() {\r\n this.btnClickIcon.emit();\r\n }\r\n}\r\n","<div class=\"side-container\">\r\n \r\n <div class=\"side-card\" [class.floating]=\"isFloating\" [class.compact]=\"isCompact\">\r\n <div class=\"element-header\">\r\n @if (modeSideCard === 'create' && showTypeSelector) {\r\n <div class=\"button-group\">\r\n <button class=\"btn-type\" [class.active]=\"selectedType === 'radial'\" (click)=\"selectType('radial')\">\r\n Radial\r\n </button>\r\n <button class=\"btn-type\" [class.active]=\"selectedType === 'poligonal'\" (click)=\"selectType('poligonal')\">\r\n Poligonal\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"text-container\">\r\n <input #inputRef type=\"text\" class=\"input-field\" [placeholder]=\"placeholder\" [value]=\"value\"\r\n (input)=\"onInput($event)\" />\r\n @if(modeSideCard === 'create' || modeSideCard === 'edit'){\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\" (click)=\"focusInput(inputRef)\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\r\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415\" />\r\n <path d=\"M16 5l3 3\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-settings\" (click)=\"buttonClickIcon()\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065\" />\r\n <path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\" />\r\n </svg>\r\n }\r\n </div>\r\n\r\n @if(modeSideCard === 'edit' || modeSideCard === 'info'){\r\n <span #statusChip class=\"status-chip\" [ngClass]=\"statusClass\" (click)=\"changeStatusLabel()\">\r\n {{ statusLabel }}\r\n </span>\r\n }\r\n </div>\r\n @for (section of sections; track section.title) {\r\n <div class=\"element-section\">\r\n <h3>{{ section.title }}</h3>\r\n\r\n <div class=\"element-content\">\r\n @if (section.items?.length) { @for (item of section.items; track\r\n item.label) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ item.label }}</span>\r\n <span class=\"value\">{{ item.value }}</span>\r\n </div>\r\n } } @if (section.showSlider) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ sliderLabel }}</span>\r\n <span class=\"value\">{{ sliderValue }} {{ sliderUnit }}</span>\r\n </div>\r\n @if (modeSideCard !== 'info') {\r\n <input type=\"range\" class=\"slider\" [min]=\"min\" [max]=\"max\" [value]=\"sliderValue\"\r\n [style.--slider-value]=\"sliderPercentage\" (input)=\"onSliderChange($event)\" />\r\n }} @if (section.buttonSectionLabel && modeSideCard !== 'info') {\r\n <button class=\"btn-assign\" (click)=\"onButtonSectionClick(section)\">{{ section.buttonSectionLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"side-card-actions\">\r\n @if (showBtnPrimary) {\r\n <button class=\"btn-primary\" (click)=\"onButtonClick('primary')\">{{ primaryButtonLabel }}</button>\r\n }\r\n @if (showBtnSecondary) {\r\n <button class=\"btn-secondary\" (click)=\"onButtonClick('secondary')\">{{ secondaryButtonLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n\r\n \r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\r\nimport { SideCardSection } from '../side-card/side-card';\r\n\r\n@Component({\r\n selector: 'lib-side-card-detail',\r\n imports: [CommonModule],\r\n templateUrl: './side-card-detail.html',\r\n styleUrl: './side-card-detail.css',\r\n})\r\nexport class SideCardDetail {\r\n @Input() isFloating = true;\r\n @Input() isCompact = false;\r\n\r\n nowLabel = 'Ahora mismo';\r\n agoLabel = 'Hace';\r\n \r\n // Header\r\n @Input() title = 'Titulo';\r\n @Input() subtitle = 'Subtitulo'\r\n @Output() btnClickIcon = new EventEmitter<'back' | 'location' | 'message'>();\r\n\r\n @Input() statusValue: 1 | 2 = 1; // backend value\r\n @Output() statusChange = new EventEmitter<1 | 2>();\r\n\r\n // Sections\r\n @Input() sections: SideCardSection[] = [];\r\n\r\n activeTab: 'principal' | 'historial' = 'principal';\r\n @Output() tabChange = new EventEmitter<'principal' | 'historial'>();\r\n\r\n get statusLabel(): string {\r\n return this.statusValue === 1 ? 'Dentro de geocerca' : 'Fuera de geocerca';\r\n }\r\n\r\n get statusClass(): string {\r\n return this.statusValue === 1\r\n ? 'status-chip-active'\r\n : 'status-chip-inactive';\r\n }\r\n\r\n buttonClickIcon(type: 'back' | 'location' | 'message') {\r\n this.btnClickIcon.emit(type);\r\n }\r\n \r\n setTab(tab: 'principal' | 'historial') {\r\n this.activeTab = tab;\r\n this.tabChange.emit(tab);\r\n }\r\n\r\n getIndicatorLeft(): string {\r\n return this.activeTab === 'principal' ? '0%' : '50%';\r\n }\r\n\r\n isDateValue(value: any): boolean {\r\n if (!value) return false;\r\n return (\r\n typeof value === 'string' &&\r\n !isNaN(Date.parse(value))\r\n );\r\n }\r\n\r\n getRelativeTime(date: string | Date | number): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n \r\n if (isNaN(d.getTime())) return '';\r\n \r\n const diff = Math.floor((now.getTime() - d.getTime()) / 1000);\r\n \r\n if (diff < 10) return this.nowLabel;\r\n \r\n const units = [\r\n { singular: 'Segundo', plural: 'Segundos', value: 60 },\r\n { singular: 'Minuto', plural: 'Minutos', value: 60 },\r\n { singular: 'Hora', plural: 'Horas', value: 24 },\r\n { singular: 'Día', plural: 'Días', value: 7 },\r\n { singular: 'Semana', plural: 'Semanas', value: 4 },\r\n { singular: 'Mes', plural: 'Meses', value: 12 },\r\n { singular: 'Año', plural: 'Años', value: Infinity }\r\n ];\r\n \r\n let value = diff;\r\n let unit = units[0];\r\n \r\n for (let i = 0; i < units.length; i++) {\r\n if (value < units[i].value) {\r\n unit = units[i];\r\n break;\r\n }\r\n value = Math.floor(value / units[i].value);\r\n }\r\n \r\n const label = value === 1 ? unit.singular : unit.plural;\r\n \r\n return `${this.agoLabel} ${value} ${label}`;\r\n }\r\n \r\n}\r\n","<div class=\"side-card\" [class.floating]=\"isFloating\" [class.compact]=\"isCompact\">\r\n <div class=\"element-header\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-arrow-left\"\r\n (click)=\"buttonClickIcon('back')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M5 12l12 0\" />\r\n <path d=\"M5 12l4 5\" />\r\n <path d=\"M5 12l4 -5\" />\r\n </svg>\r\n\r\n <div class=\"text-container\">\r\n <span class=\"title\"> {{ title }} </span>\r\n <span class=\"subtitle\"> {{ subtitle }} </span>\r\n <div class=\"container-chip\">\r\n <span #statusChip class=\"status-chip\" [ngClass]=\"statusClass\">\r\n {{ statusLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-icons\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\r\n class=\"icon icon-tabler icons-tabler-filled icon-tabler-current-location\" (click)=\"buttonClickIcon('location')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M12 1a1 1 0 0 1 1 1v1.055a9.004 9.004 0 0 1 7.946 7.945h1.054a1 1 0 0 1 0 2h-1.055a9.004 9.004 0 0 1 -7.944 7.945l-.001 1.055a1 1 0 0 1 -2 0v-1.055a9.004 9.004 0 0 1 -7.945 -7.944l-1.055 -.001a1 1 0 0 1 0 -2h1.055a9.004 9.004 0 0 1 7.945 -7.945v-1.055a1 1 0 0 1 1 -1m0 4a7 7 0 1 0 0 14a7 7 0 0 0 0 -14m0 3a4 4 0 1 1 -4 4l.005 -.2a4 4 0 0 1 3.995 -3.8\" />\r\n </svg>\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-message-circle\" (click)=\"buttonClickIcon('message')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"side-tabs\">\r\n <div\r\n class=\"tab\"\r\n [class.active]=\"activeTab === 'principal'\"\r\n (click)=\"setTab('principal')\"\r\n >\r\n Principal\r\n </div>\r\n \r\n <div\r\n class=\"tab\"\r\n [class.active]=\"activeTab === 'historial'\"\r\n (click)=\"setTab('historial')\"\r\n >\r\n Historial\r\n </div>\r\n \r\n <div\r\n class=\"tab-indicator\"\r\n [style.left]=\"getIndicatorLeft()\"\r\n ></div>\r\n </div>\r\n\r\n @for (section of sections; track section.title) {\r\n <div class=\"element-section\">\r\n <h3>{{ section.title }}</h3>\r\n\r\n <div class=\"element-content\">\r\n @if (section.items?.length) { @for (item of section.items; track\r\n item.label) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ item.label }}</span>\r\n <span class=\"value\">{{ isDateValue(item.value) ? getRelativeTime(item.value) : item.value }}</span>\r\n </div>\r\n } }\r\n </div>\r\n </div>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, HostListener, Input, ViewChild } from '@angular/core';\r\n\r\nexport interface DeviceStatus {\r\n geofence: 'inside' | 'outside';\r\n wifi?: boolean;\r\n bluetooth?: boolean;\r\n gps?: boolean;\r\n signalStatus?: 1 | 2 | 3 | 4;\r\n batteryPercentage?: string;\r\n}\r\n\r\nexport interface DeviceCard {\r\n code: string;\r\n name: string;\r\n geofenceName: string;\r\n deviceInfo: string;\r\n status: DeviceStatus;\r\n lastUpdate: string | Date | number;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-devices-carousel',\r\n imports: [CommonModule],\r\n templateUrl: './devices-carousel.html',\r\n styleUrl: './devices-carousel.css',\r\n})\r\nexport class DevicesCarousel implements AfterViewInit {\r\n @Input() devices: DeviceCard[] = [];\r\n nowLabel = 'AHORA MISMO';\r\n agoLabel = 'HACE';\r\n\r\n canScrollLeft = false;\r\n canScrollRight = false;\r\n\r\n @ViewChild('list', { static: false }) listRef!: ElementRef<HTMLElement>;\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.updateScrollButtons();\r\n }\r\n\r\n onScroll(el: HTMLElement) {\r\n this.updateScrollButtons(el);\r\n }\r\n\r\n updateScrollButtons(el?: HTMLElement) {\r\n const element = el ?? this.listRef?.nativeElement;\r\n if (!element) return;\r\n\r\n this.canScrollLeft = element.scrollLeft > 0;\r\n\r\n this.canScrollRight =\r\n element.scrollLeft + element.clientWidth < element.scrollWidth - 1;\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.updateScrollButtons();\r\n });\r\n }\r\n\r\n scroll(el: HTMLElement, dir: 'left' | 'right') {\r\n const amount = 300;\r\n\r\n el.scrollBy({\r\n left: dir === 'right' ? amount : -amount,\r\n behavior: 'smooth'\r\n });\r\n\r\n setTimeout(() => this.updateScrollButtons(el), 300);\r\n }\r\n\r\n getGeofenceClass(state: string) {\r\n return state === 'inside' ? 'badge-inside' : 'badge-outside';\r\n }\r\n\r\n getSignalClass(level: 1 | 2 | 3 | 4) {\r\n return 'signal-' + level;\r\n }\r\n\r\n getRelativeTime(date: string | Date | number): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n\r\n if (isNaN(d.getTime())) return 'Fecha inválida';\r\n\r\n const diff = Math.floor((now.getTime() - d.getTime()) / 1000);\r\n\r\n if (diff < 10) return this.nowLabel;\r\n\r\n const units = [\r\n { singular: 'SEGUNDO', plural: 'SEGUNDOS', value: 60 },\r\n { singular: 'MINUTO', plural: 'MINUTOS', value: 60 },\r\n { singular: 'HORA', plural: 'HORAS', value: 24 },\r\n { singular: 'DÍA', plural: 'DÍAS', value: 7 },\r\n { singular: 'SEMANA', plural: 'SEMANAS', value: 4 },\r\n { singular: 'MES', plural: 'MESES', value: 12 },\r\n { singular: 'AÑO', plural: 'AÑOS', value: Infinity }\r\n ];\r\n\r\n let value = diff;\r\n let unit = units[0];\r\n\r\n for (let i = 0; i < units.length; i++) {\r\n if (value < units[i].value) {\r\n unit = units[i];\r\n break;\r\n }\r\n value = Math.floor(value / units[i].value);\r\n }\r\n\r\n const label = value === 1 ? unit.singular : unit.plural;\r\n\r\n return `${this.agoLabel} ${value} ${label}`;\r\n }\r\n}\r\n","<div class=\"carousel-container\">\r\n <div class=\"carousel-wrapper\">\r\n\r\n @if (canScrollLeft) {\r\n <button class=\"nav left\" (click)=\"scroll(list,'left')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-left\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" stroke=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path d=\"m15 6-6 6 6 6\" />\r\n </svg>\r\n </button>\r\n }\r\n\r\n <div class=\"carousel-mask\">\r\n <div class=\"carousel-list\" #list (scroll)=\"onScroll(list)\">\r\n @for (d of devices; track d.code) {\r\n <div class=\"device-card\">\r\n <div class=\"card-header\">\r\n <span class=\"code\">{{ d.code }} - {{ d.name }}</span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\"\r\n class=\"target icon icon-tabler icons-tabler-filled icon-tabler-current-location\"\r\n viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path\r\n d=\"M12 1a1 1 0 0 1 1 1v1.055A9.004 9.004 0 0 1 20.946 11H22a1 1 0 0 1 0 2h-1.055a9.004 9.004 0 0 1-7.944 7.945L13 22a1 1 0 0 1-2 0v-1.055a9.004 9.004 0 0 1-7.945-7.944L2 13a1 1 0 0 1 0-2h1.055A9.004 9.004 0 0 1 11 3.055V2a1 1 0 0 1 1-1m0 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14m0 3a4 4 0 1 1-4 4l.005-.2A4 4 0 0 1 12 8\" />\r\n </svg>\r\n </div>\r\n\r\n <span class=\"geofence\">{{ d.geofenceName }}</span>\r\n\r\n <div class=\"device-info\">\r\n <span>{{ d.deviceInfo }}</span>\r\n <div class=\"icons\">\r\n @if (d.status.wifi) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\"\r\n d=\"M.833 7.314 2.5 8.98c4.142-4.141 10.858-4.141 15 0l1.667-1.666C14.108 2.255 5.9 2.255.833 7.314M7.5 13.98l2.5 2.5 2.5-2.5a3.53 3.53 0 0 0-5 0m-3.333-3.333 1.666 1.667c2.3-2.3 6.034-2.3 8.334 0l1.666-1.667c-3.216-3.217-8.441-3.217-11.666 0\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\"\r\n d=\"m17.5 10.142 1.667-1.667C16.058 5.367 11.775 4.183 7.75 4.883l2.15 2.15a10.62 10.62 0 0 1 7.6 3.109m-1.667 1.666a8.25 8.25 0 0 0-3.1-1.941l2.517 2.516zM7.5 15.142l2.5 2.5 2.5-2.5a3.53 3.53 0 0 0-5 0m-4.658-12.8L1.667 3.517l2.541 2.541A13.1 13.1 0 0 0 .833 8.475L2.5 10.142a10.5 10.5 0 0 1 3.475-2.317l1.867 1.867a8.2 8.2 0 0 0-3.675 2.116l1.666 1.667a5.83 5.83 0 0 1 4.075-1.717l5.9 5.9 1.175-1.175z\" />\r\n </svg>\r\n }\r\n @if (d.status.signalStatus! >= 3) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\" d=\"M1.667 18.333h16.666V1.667z\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\" d=\"M1.667 18.333h16.666V1.667zm15-1.666H5.692L16.667 5.692z\" />\r\n </svg>\r\n }\r\n @if (d.status.bluetooth) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\"\r\n d=\"m15.296 6.425-4.758-4.758h-.834v6.325L5.88 4.167 4.704 5.342 9.363 10l-4.659 4.658 1.175 1.175 3.825-3.825v6.325h.834l4.758-4.758L11.713 10zM11.37 4.858l1.567 1.567-1.567 1.567zm1.567 8.717-1.567 1.567v-3.134z\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <path fill=\"#454733\"\r\n d=\"M10.833 4.858 12.4 6.425l-1.333 1.333 1.175 1.175 2.516-2.516L10 1.667h-.833v4.191l1.666 1.667zM4.508 3.333 3.333 4.508 8.825 10l-4.658 4.658 1.175 1.175 3.825-3.825v6.325H10l3.575-3.575 1.917 1.909 1.175-1.175zm6.325 11.809v-3.134l1.567 1.567z\" />\r\n </svg>\r\n }\r\n @if (d.status.gps) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <g clip-path=\"url(#clip0_3_9268)\">\r\n <path fill=\"#454733\"\r\n d=\"M10 6.667a3.332 3.332 0 1 0 0 6.666 3.332 3.332 0 1 0 0-6.666m7.45 2.5a7.495 7.495 0 0 0-6.617-6.617V.833H9.167V2.55A7.495 7.495 0 0 0 2.55 9.167H.833v1.666H2.55a7.495 7.495 0 0 0 6.617 6.617v1.717h1.666V17.45a7.495 7.495 0 0 0 6.617-6.617h1.717V9.167zM10 15.833A5.83 5.83 0 0 1 4.167 10 5.83 5.83 0 0 1 10 4.167 5.83 5.83 0 0 1 15.833 10 5.83 5.83 0 0 1 10 15.833\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3_9268\">\r\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <g clip-path=\"url(#clip0_3_9268)\">\r\n <path fill=\"#454733\"\r\n d=\"M17.45 9.167a7.495 7.495 0 0 0-6.617-6.617V.833H9.167V2.55a7.4 7.4 0 0 0-2.309.65l1.275 1.275a5.83 5.83 0 0 1 7.392 7.392l1.275 1.275a7.4 7.4 0 0 0 .65-2.309h1.717V9.167zM2.5 3.558l1.7 1.7a7.5 7.5 0 0 0-1.65 3.909H.833v1.666H2.55a7.495 7.495 0 0 0 6.617 6.617v1.717h1.666V17.45a7.5 7.5 0 0 0 3.909-1.65l1.7 1.7 1.175-1.175L3.675 2.383zm11.058 11.059a5.829 5.829 0 0 1-8.175-8.175z\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3_9268\">\r\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <span class=\"badge\" [ngClass]=\"getGeofenceClass(d.status.geofence)\">\r\n {{ d.status.geofence === 'inside' ? 'DENTRO DE GEOCERCA' : 'FUERA DE GEOCERCA' }}\r\n </span>\r\n\r\n <span class=\"badge update\">{{ getRelativeTime(d.lastUpdate) }}</span>\r\n </div>\r\n\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (canScrollRight) {\r\n <button class=\"nav right\" (click)=\"scroll(list,'right')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-right\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" stroke=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path d=\"m9 6 6 6-6 6\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n\r\n</div>","// src/app/components/public-api.ts\r\n\r\n// Exportar el componente\r\n\r\nexport * from './lib/components/pagination/pagination';\r\nexport * from './lib/components/table/table';\r\nexport * from './lib/interfaces/filters';\r\n\r\nexport * from './lib/components/date-time-picker/date-time-picker';\r\nexport * from './lib/components/date-time-filter/date-time-filter';\r\nexport * from './lib/components/input-number-filter/input-number-filter';\r\nexport * from './lib/components/input-select-filter/input-select-filter';\r\nexport * from './lib/components/input-text-filter/input-text-filter';\r\n\r\nexport * from './lib/components/input/input';\r\nexport * from './lib/components/select-custom-search/select-custom-search';\r\nexport * from './lib/components/dynamic-form-fields/dynamic-form-fields';\r\nexport * from './lib/components/wizard-form/wizard-form';\r\nexport * from './lib/components/modal-form/modal-form';\r\n\r\nexport * from './lib/components/dialog-alert/dialog-alert';\r\nexport * from './lib/components/dialog-confirmation/dialog-confirmation';\r\n\r\nexport * from './lib/helpers/toast-helper';\r\n\r\nexport * from './lib/components/not-found-modal/not-found-modal';\r\n\r\nexport * from './lib/components/loader/loader';\r\nexport * from './lib/components/progress-bar/progress-bar';\r\nexport * from './lib/services/progress/progress-service';\r\nexport * from './lib/components/processing-overlay/processing-overlay';\r\n\r\nexport * from './lib/components/info-group/info-group'\r\nexport * from './lib/components/feature-card/feature-card'\r\n\r\nexport * from './lib/components/side-card/side-card'\r\nexport * from './lib/components/side-card-detail/side-card-detail'\r\nexport * from './lib/components/devices-carousel/devices-carousel'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","Input","i1.ProgressFormService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sapenlinea-components.mjs","sources":["../../../projects/sapenlinea-components/src/lib/components/pagination/pagination.ts","../../../projects/sapenlinea-components/src/lib/components/pagination/pagination.html","../../../projects/sapenlinea-components/src/lib/components/table/table.ts","../../../projects/sapenlinea-components/src/lib/components/table/table.html","../../../projects/sapenlinea-components/src/lib/components/date-time-picker/date-time-picker.ts","../../../projects/sapenlinea-components/src/lib/components/date-time-picker/date-time-picker.html","../../../projects/sapenlinea-components/src/lib/components/date-time-filter/date-time-filter.ts","../../../projects/sapenlinea-components/src/lib/components/date-time-filter/date-time-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-number-filter/input-number-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-number-filter/input-number-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-select-filter/input-select-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-select-filter/input-select-filter.html","../../../projects/sapenlinea-components/src/lib/components/input-text-filter/input-text-filter.ts","../../../projects/sapenlinea-components/src/lib/components/input-text-filter/input-text-filter.html","../../../projects/sapenlinea-components/src/lib/components/input/input.ts","../../../projects/sapenlinea-components/src/lib/components/input/input.html","../../../projects/sapenlinea-components/src/lib/components/select-custom-search/select-custom-search.ts","../../../projects/sapenlinea-components/src/lib/components/select-custom-search/select-custom-search.html","../../../projects/sapenlinea-components/src/lib/components/dynamic-form-fields/dynamic-form-fields.ts","../../../projects/sapenlinea-components/src/lib/components/dynamic-form-fields/dynamic-form-fields.html","../../../projects/sapenlinea-components/src/lib/components/wizard-form/wizard-form.ts","../../../projects/sapenlinea-components/src/lib/components/wizard-form/wizard-form.html","../../../projects/sapenlinea-components/src/lib/helpers/toast-helper.ts","../../../projects/sapenlinea-components/src/lib/components/modal-form/modal-form.ts","../../../projects/sapenlinea-components/src/lib/components/modal-form/modal-form.html","../../../projects/sapenlinea-components/src/lib/components/dialog-alert/dialog-alert.ts","../../../projects/sapenlinea-components/src/lib/components/dialog-alert/dialog-alert.html","../../../projects/sapenlinea-components/src/lib/components/dialog-confirmation/dialog-confirmation.ts","../../../projects/sapenlinea-components/src/lib/components/dialog-confirmation/dialog-confirmation.html","../../../projects/sapenlinea-components/src/lib/components/not-found-modal/not-found-modal.ts","../../../projects/sapenlinea-components/src/lib/components/not-found-modal/not-found-modal.html","../../../projects/sapenlinea-components/src/lib/components/loader/loader.ts","../../../projects/sapenlinea-components/src/lib/components/loader/loader.html","../../../projects/sapenlinea-components/src/lib/services/progress/progress-service.ts","../../../projects/sapenlinea-components/src/lib/components/progress-bar/progress-bar.ts","../../../projects/sapenlinea-components/src/lib/components/progress-bar/progress-bar.html","../../../projects/sapenlinea-components/src/lib/components/processing-overlay/processing-overlay.ts","../../../projects/sapenlinea-components/src/lib/components/processing-overlay/processing-overlay.html","../../../projects/sapenlinea-components/src/lib/components/info-group/info-group.ts","../../../projects/sapenlinea-components/src/lib/components/info-group/info-group.html","../../../projects/sapenlinea-components/src/lib/components/feature-card/feature-card.ts","../../../projects/sapenlinea-components/src/lib/components/feature-card/feature-card.html","../../../projects/sapenlinea-components/src/lib/components/side-card/side-card.ts","../../../projects/sapenlinea-components/src/lib/components/side-card/side-card.html","../../../projects/sapenlinea-components/src/lib/components/side-card-detail/side-card-detail.ts","../../../projects/sapenlinea-components/src/lib/components/side-card-detail/side-card-detail.html","../../../projects/sapenlinea-components/src/lib/components/devices-carousel/devices-carousel.ts","../../../projects/sapenlinea-components/src/lib/components/devices-carousel/devices-carousel.html","../../../projects/sapenlinea-components/src/lib/components/title-filters/title-filters.ts","../../../projects/sapenlinea-components/src/lib/components/title-filters/title-filters.html","../../../projects/sapenlinea-components/src/public-api.ts","../../../projects/sapenlinea-components/src/sapenlinea-components.ts"],"sourcesContent":["import { Component, computed, input, model, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './pagination.html',\r\n styleUrls: ['./pagination.css']\r\n})\r\nexport class PaginationComponent {\r\n // Inputs as Models/Signals\r\n page = model(1);\r\n pageSize = model(10);\r\n totalItems = input(0);\r\n\r\n showPageSizeSelector = input(false);\r\n pageSizeOptions = input([10, 20, 30, 50]);\r\n\r\n // Internal state\r\n isOpen = signal(false);\r\n showPageSizeMenu = signal(false);\r\n\r\n totalPages = computed(() => {\r\n const size = this.pageSize();\r\n const total = this.totalItems();\r\n return size > 0 ? Math.ceil(total / size) : 1;\r\n });\r\n\r\n visiblePages = computed(() => {\r\n const total = this.totalPages();\r\n const current = this.page();\r\n\r\n // Configuración de cuantos números mostrar a los lados del actual\r\n const siblingCount = 1;\r\n const totalNumbers = siblingCount + 5; // siblingCount + first + last + current + 2*dots\r\n\r\n // Si el total de páginas es menor que los números que queremos mostrar, mostrar todo\r\n if (totalNumbers >= total) {\r\n return Array.from({ length: total }, (_, i) => i + 1);\r\n }\r\n\r\n const leftSiblingIndex = Math.max(current - siblingCount, 1);\r\n const rightSiblingIndex = Math.min(current + siblingCount, total);\r\n\r\n const shouldShowLeftDots = leftSiblingIndex > 2;\r\n const shouldShowRightDots = rightSiblingIndex < total - 2;\r\n\r\n const firstPageIndex = 1;\r\n const lastPageIndex = total;\r\n\r\n // Caso 1: Solo puntos a la derecha\r\n // 1 2 3 4 5 ... 20\r\n if (!shouldShowLeftDots && shouldShowRightDots) {\r\n const leftRangeCount = 3 + 2 * siblingCount;\r\n const leftRange = Array.from({ length: leftRangeCount }, (_, i) => i + 1);\r\n return [...leftRange, '...', total];\r\n }\r\n\r\n // Caso 2: Solo puntos a la izquierda\r\n // 1 ... 16 17 18 19 20\r\n if (shouldShowLeftDots && !shouldShowRightDots) {\r\n const rightRangeCount = 3 + 2 * siblingCount;\r\n const rightRange = Array.from({ length: rightRangeCount }, (_, i) => total - rightRangeCount + i + 1);\r\n return [firstPageIndex, '...', ...rightRange];\r\n }\r\n\r\n // Caso 3: Puntos a ambos lados\r\n // 1 ... 9 10 11 ... 20\r\n if (shouldShowLeftDots && shouldShowRightDots) {\r\n const middleRange = Array.from(\r\n { length: rightSiblingIndex - leftSiblingIndex + 1 },\r\n (_, i) => leftSiblingIndex + i\r\n );\r\n return [firstPageIndex, '...', ...middleRange, '...', lastPageIndex];\r\n }\r\n\r\n // Fallback (no debería ocurrir con la lógica actual si totalNumbers >= total cubre los casos pequeños)\r\n return Array.from({ length: total }, (_, i) => i + 1);\r\n });\r\n\r\n onPageClick(p: number | string) {\r\n if (typeof p === 'number') {\r\n this.goToPage(p);\r\n }\r\n }\r\n\r\n isPageActive(p: number | string) {\r\n return typeof p === 'number' && this.page() === p;\r\n }\r\n\r\n goToPage(p: number | string) {\r\n if (typeof p !== 'number') return;\r\n this.page.set(p);\r\n }\r\n\r\n togglePageSizeMenu() {\r\n this.isOpen.update(v => !v);\r\n this.showPageSizeMenu.update(v => !v);\r\n }\r\n\r\n selectPageSize(size: number) {\r\n this.pageSize.set(size);\r\n this.showPageSizeMenu.set(false);\r\n this.isOpen.set(false);\r\n }\r\n}\r\n","<div class=\"pagination-container\">\r\n <div class=\"pagination\" role=\"navigation\" aria-label=\"Pagination\">\r\n <!-- Botón doble atrás -->\r\n <button class=\"icon-button\" (click)=\"goToPage(1)\" [disabled]=\"page() === 1\" aria-label=\"Ir a la primera página\">\r\n ««\r\n </button>\r\n\r\n <!-- Botón atrás -->\r\n <button class=\"icon-button\" (click)=\"goToPage(page() - 1)\" [disabled]=\"page() === 1\"\r\n aria-label=\"Ir a la página anterior\">\r\n «\r\n </button>\r\n\r\n <!-- Números de página -->\r\n <div class=\"pages\">\r\n @for (p of visiblePages(); track $index) {\r\n <button class=\"page-btn\" [class.active]=\"p === page()\" [disabled]=\"p === '...'\" (click)=\"goToPage(p)\"\r\n [attr.aria-current]=\"p === page() ? 'page' : null\"\r\n [attr.aria-label]=\"p === '...' ? 'Más páginas' : 'Ir a la página ' + p\">\r\n {{ p }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Botón siguiente -->\r\n <button class=\"icon-button\" (click)=\"goToPage(page() + 1)\" [disabled]=\"page() === totalPages()\"\r\n aria-label=\"Ir a la página siguiente\">\r\n »\r\n </button>\r\n\r\n <!-- Botón doble adelante -->\r\n <button class=\"icon-button\" (click)=\"goToPage(totalPages())\" [disabled]=\"page() === totalPages()\"\r\n aria-label=\"Ir a la última página\">\r\n »»\r\n </button>\r\n </div>\r\n\r\n <!-- Selector Items por página -->\r\n @if (showPageSizeSelector() && totalPages() > 1) {\r\n <div class=\"pagination-v-4\">\r\n <div class=\"label-pagination\">Items por página</div>\r\n <div class=\"elements-pagination\">\r\n <div class=\"split-button\" (click)=\"togglePageSizeMenu()\">\r\n <div class=\"leading-button\">\r\n <div class=\"state-layer\">\r\n <div class=\"label\">{{ pageSize() }}</div>\r\n </div>\r\n </div>\r\n <div class=\"trailing-button\">\r\n <div class=\"arrow\" [class.open]=\"isOpen()\">\r\n <svg class=\"arrow\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\">\r\n <polyline points=\"6 9 12 15 18 9\"></polyline>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Menú desplegable -->\r\n @if (showPageSizeMenu()) {\r\n <div class=\"page-size-menu\">\r\n @for (opt of pageSizeOptions(); track $index) {\r\n <div class=\"menu-option\" [class.active]=\"opt === pageSize()\" (click)=\"selectPageSize(opt)\">\r\n {{ opt }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>","import { AfterViewInit, Component, ElementRef, HostListener, input, output, QueryList, signal, ViewChildren } from '@angular/core';\r\n\r\nexport interface TableColumn {\r\n key: string;\r\n label: string;\r\n type?: 'text' | 'number' | 'money' | 'date' | 'percentage' | 'status' | 'icon-button' | 'email';\r\n align?: 'left' | 'right' | 'center' | 'auto';\r\n sortable?: boolean;\r\n showActions?: boolean;\r\n\r\n icon?: string;\r\n iconKey?: string;\r\n}\r\n\r\nexport interface TableRow {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface TableAction {\r\n key: string;\r\n icon: string;\r\n label: string;\r\n}\r\n\r\nexport interface StatusToneMap {\r\n [statusKey: string]: StatusTone;\r\n}\r\n\r\nexport type StatusTone =\r\n | 'success'\r\n | 'error'\r\n | 'warning'\r\n | 'info'\r\n | 'neutral';\r\n\r\nconst STATUS_TONE_STYLES: Record<StatusTone, { bg: string; color: string }> = {\r\n success: { bg: '#9ED89D', color: '#006D2F' },\r\n error: { bg: '#D89D9D', color: '#CF0707' },\r\n warning: { bg: '#D8BF9D', color: '#CF6507' },\r\n info: { bg: '#9DAFD8', color: '#0746CF' },\r\n neutral: { bg: '#BAC2BB', color: '#40484C' },\r\n};\r\n\r\nconst ICON_COLOR_MAP: Record<string, string> = {\r\n 'icon-delete': '#CF0707',\r\n 'icon-deactivate': '#CF0707',\r\n\r\n 'icon-edit': '#596300',\r\n 'icon-refresh': '#596300',\r\n\r\n 'icon-activate': '#006D2F',\r\n\r\n 'icon-view': '#063546',\r\n 'icon-file': '#40484C',\r\n\r\n 'icon-sanction': '#CF6507',\r\n};\r\n\r\n@Component({\r\n selector: 'lib-table',\r\n imports: [],\r\n standalone: true,\r\n templateUrl: './table.html',\r\n styleUrl: './table.css',\r\n})\r\nexport class Table implements AfterViewInit {\r\n columns = input<TableColumn[]>([]);\r\n data = input<TableRow[]>([]);\r\n actions = input<TableAction[] | ((row: TableRow) => TableAction[])>([] as TableAction[]);\r\n showActions = input<boolean>(true);\r\n\r\n openedMenu = signal<number | null>(null);\r\n selectedRow = signal<TableRow | null>(null);\r\n sortColumn = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc'>('desc');\r\n\r\n optionSelected = output<{ action: string; row: TableRow }>();\r\n iconAction = output<{ action: string; row: TableRow }>();\r\n\r\n statusToneMap = input<StatusToneMap>({});\r\n statusEnumMap = input<Record<number | string, string>>({});\r\n\r\n\r\n @ViewChildren('statusChip') chips!: QueryList<ElementRef>;\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n const chipEls = this.chips.map(c => c.nativeElement);\r\n\r\n const widths = chipEls.map(el => el.scrollWidth);\r\n const maxContentWidth = Math.max(...widths);\r\n\r\n chipEls.forEach(el => {\r\n el.style.width = maxContentWidth + 'px';\r\n });\r\n });\r\n }\r\n\r\n toggleMenu(index: number) {\r\n this.openedMenu.set(this.openedMenu() === index ? null : index);\r\n }\r\n\r\n onOptionClick(option: TableAction, row: TableRow) {\r\n this.optionSelected.emit({ action: option.label, row });\r\n this.openedMenu.set(null);\r\n }\r\n\r\n openModal(row: TableRow, event?: MouseEvent) {\r\n event?.stopPropagation();\r\n\r\n if (this.selectedRow()?.['id'] === row['id']) {\r\n this.selectedRow.set(null);\r\n } else {\r\n this.selectedRow.set(row);\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClickOutside(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n if (!target.closest('.menu-acciones')) {\r\n this.selectedRow.set(null);\r\n }\r\n }\r\n\r\n getAlignment(col: TableColumn): string {\r\n if (col.align && col.align !== 'auto') return col.align;\r\n\r\n switch (col.type) {\r\n case 'number':\r\n case 'money':\r\n case 'percentage':\r\n return 'right';\r\n case 'status':\r\n return 'center';\r\n case 'email':\r\n default:\r\n return 'left';\r\n }\r\n }\r\n\r\n formatValue(col: TableColumn, value: any): string {\r\n if (value === null || value === undefined) return '';\r\n\r\n switch (col.type) {\r\n case 'money':\r\n return new Intl.NumberFormat('es-CO', {\r\n style: 'currency',\r\n currency: 'COP',\r\n minimumFractionDigits: 0\r\n }).format(value);\r\n\r\n case 'number':\r\n return String(value);\r\n\r\n case 'percentage':\r\n return `${value}%`;\r\n\r\n case 'date':\r\n const d = new Date(value);\r\n return d.toLocaleDateString('es-CO'); // dd/mm/yyyy\r\n\r\n case 'email':\r\n return String(value).toLowerCase(); \r\n\r\n default:\r\n return String(value);\r\n }\r\n }\r\n\r\n getActionColor(action: TableAction): string {\r\n return ICON_COLOR_MAP[action.icon] ?? '#40484C'; // fallback neutral\r\n }\r\n\r\n getStatusStyle(value: any) {\r\n if (value === null || value === undefined) {\r\n return STATUS_TONE_STYLES.neutral;\r\n }\r\n\r\n const mapped = this.statusEnumMap()?.[value] ?? value;\r\n const key = this.normalizeStatus(mapped);\r\n const tone = this.statusToneMap()?.[key] ?? 'neutral';\r\n\r\n return STATUS_TONE_STYLES[tone];\r\n }\r\n\r\n private normalizeStatus(value: any): string {\r\n return String(value ?? '')\r\n .toLowerCase()\r\n .trim()\r\n .replace(/\\s+/g, '_');\r\n }\r\n\r\n /**\r\n * Devuelve las acciones para una fila.\r\n * Puede ser que `actions` sea un arreglo (se muestra tal cual) o una función\r\n * que recibe la fila y retorna las acciones correspondientes.\r\n */\r\n getActionsForRow(row: TableRow): TableAction[] {\r\n const acts = this.actions();\r\n if (!acts) return [];\r\n if (typeof acts === 'function') {\r\n try {\r\n return acts(row) ?? [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n console.log('action for row: ', row);\r\n return acts;\r\n \r\n }\r\n\r\n sortData() {\r\n const col = this.sortColumn();\r\n if (!col) return this.data();\r\n\r\n const dir = this.sortDirection();\r\n\r\n return [...this.data()].sort((a, b) => {\r\n const x = a[col] ?? '';\r\n const y = b[col] ?? '';\r\n\r\n // Caso: fechas\r\n if (this.isDate(x) && this.isDate(y)) {\r\n return dir === 'asc'\r\n ? new Date(x).getTime() - new Date(y).getTime()\r\n : new Date(y).getTime() - new Date(x).getTime();\r\n }\r\n\r\n // Caso: números\r\n if (!isNaN(Number(x)) && !isNaN(Number(y))) {\r\n return dir === 'asc' ? Number(x) - Number(y) : Number(y) - Number(x);\r\n }\r\n\r\n // Caso: strings\r\n return dir === 'asc'\r\n ? x.toString().localeCompare(y.toString())\r\n : y.toString().localeCompare(x.toString());\r\n });\r\n }\r\n\r\n isDate(value: any): boolean {\r\n return (\r\n typeof value === 'string' &&\r\n value.length > 5 &&\r\n !isNaN(Date.parse(value))\r\n );\r\n }\r\n\r\n onSort(col: TableColumn) {\r\n if (this.sortColumn() === col.key) {\r\n // cambiar asc <-> desc\r\n this.sortDirection.set(\r\n this.sortDirection() === 'asc' ? 'desc' : 'asc'\r\n );\r\n } else {\r\n // nueva columna → empieza en desc (más reciente primero)\r\n this.sortColumn.set(col.key);\r\n this.sortDirection.set('desc');\r\n }\r\n }\r\n\r\n onIconColumnClick(col: TableColumn, row: TableRow, event: MouseEvent) {\r\n event.stopPropagation();\r\n\r\n this.iconAction.emit({\r\n action: col.iconKey ?? col.key,\r\n row\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"table-wrapper\">\r\n <table class=\"inner-table\">\r\n <thead>\r\n <tr>\r\n @for (col of columns(); track col.key) {\r\n <th (click)=\"col.sortable !== false && onSort(col)\" [class.sortable]=\"col.sortable !== false\"\r\n [class]=\"getAlignment(col)\">\r\n {{ col.label }}\r\n\r\n <!-- iconos de orden opcionales -->\r\n @if (sortColumn() === col.key) {\r\n <span class=\"sort-icon\">\r\n {{ sortDirection() === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n }\r\n </th>\r\n }\r\n\r\n <!-- columna para acciones -->\r\n @if (showActions()) {\r\n <th></th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @for (row of sortData(); track $index) {\r\n <tr>\r\n @for (col of columns(); track col.key) {\r\n <td [class]=\"getAlignment(col)\">\r\n @if (col.type === 'status') { @let style =\r\n getStatusStyle(row[col.key]);\r\n <span #statusChip class=\"status-chip\" [style.background-color]=\"style.bg\" [style.color]=\"style.color\">\r\n {{ row[col.key]?.toString().toUpperCase() }}\r\n </span>\r\n\r\n } @else if (col.type === 'icon-button') {\r\n\r\n <button (click)=\"onIconColumnClick(col, row, $event)\">\r\n <span class=\"icon\" [class]=\"col.icon\"></span>\r\n </button>\r\n } @else {\r\n {{ formatValue(col, row[col.key]) }}\r\n \r\n }\r\n </td>\r\n }\r\n\r\n <!-- Celda de acciones -->\r\n @if (showActions()) {\r\n <td class=\"acciones-cell\">\r\n <div class=\"menu-acciones\">\r\n <button class=\"icon-button\" (click)=\"openModal(row)\">\r\n <div class=\"content\">\r\n <div class=\"state-layer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"more-vert\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\"\r\n fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\r\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </button>\r\n @if(selectedRow()?.['id'] === row['id']){\r\n <div class=\"modal-options-table\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"modal-content-table\">\r\n <ul>\r\n @for (option of getActionsForRow(row); track $index) {\r\n <li class=\"option-item-table\" [style.color]=\"getActionColor(option)\" (click)=\"onOptionClick(option, row)\">\r\n <span class=\"icon\" [class]=\"option.icon\"></span>\r\n <span class=\"label\">{{ option.label }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n</div>","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { DateTimeMode, Hour12 } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-date-time-picker',\r\n imports: [],\r\n templateUrl: './date-time-picker.html',\r\n styleUrl: './date-time-picker.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimePicker),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DateTimePicker implements ControlValueAccessor, OnDestroy {\r\n mode = input<DateTimeMode>('date');\r\n placeholder = input<string>('Seleccionar fecha');\r\n minDate = input<Date | null>(null);\r\n maxDate = input<Date | null>(null);\r\n\r\n dateChange = output<Date | null>();\r\n\r\n isOpen = signal<boolean>(false);\r\n selectedDate = signal<Date | null>(null);\r\n isDisabled = signal<boolean>(false);\r\n isTouched = signal<boolean>(false);\r\n readonly = input<boolean>(false);\r\n\r\n isBlocked = computed(() => this.isDisabled() || this.readonly());\r\n\r\n // Texto que escribe el usuario (DD/MM/YYYY)\r\n inputTextValue = signal<string>('');\r\n\r\n // Navegación del calendario\r\n currentMonth = signal(new Date().getMonth());\r\n currentYear = signal(new Date().getFullYear());\r\n\r\n // Hora en formato 24h (para el backend)\r\n selectedHour = signal(0);\r\n selectedMinute = signal(0);\r\n \r\n // Estado AM/PM\r\n selectedAmPm = signal<'AM' | 'PM'>('AM');\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n\r\n /**\r\n * Valor que se muestra en el campo de texto.\r\n * Siempre muestra la fecha en formato DD/MM/YYYY.\r\n */\r\n displayValue = computed(() => {\r\n const text = this.inputTextValue().trim();\r\n if (text) {\r\n return text;\r\n }\r\n\r\n const date = this.selectedDate();\r\n if (!date) return '';\r\n\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n });\r\n\r\n monthName = computed(() => {\r\n const months = [\r\n 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\r\n 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\r\n ];\r\n return months[this.currentMonth()];\r\n });\r\n\r\n calendarDays = computed(() => {\r\n const year = this.currentYear();\r\n const month = this.currentMonth();\r\n const firstDay = new Date(year, month, 1);\r\n const lastDay = new Date(year, month + 1, 0);\r\n const daysInMonth = lastDay.getDate();\r\n const startingDayOfWeek = firstDay.getDay();\r\n\r\n const days: (number | null)[] = [];\r\n\r\n // Días vacíos al inicio\r\n for (let i = 0; i < startingDayOfWeek; i++) {\r\n days.push(null);\r\n }\r\n\r\n // Días del mes\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n days.push(day);\r\n }\r\n\r\n return days;\r\n });\r\n\r\n // Horas en formato 12h\r\n hours12 = computed((): Hour12[] => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n const hour12 = i === 0 ? 12 : i;\r\n return {\r\n value: hour12,\r\n display: hour12.toString().padStart(2, '0')\r\n };\r\n });\r\n });\r\n\r\n // Hora seleccionada en formato 12h\r\n selectedHour12 = computed(() => {\r\n const hour24 = this.selectedHour();\r\n if (hour24 === 0) return 12;\r\n if (hour24 > 12) return hour24 - 12;\r\n return hour24;\r\n });\r\n\r\n minutes = computed(() => Array.from({ length: 60 }, (_, i) => i));\r\n\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {}\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n writeValue(value: any): void {\r\n let date: Date | null = null;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' && value) {\r\n // Manejar tanto fechas ISO como otros formatos de string\r\n const parsedDate = new Date(value);\r\n if (!isNaN(parsedDate.getTime())) {\r\n date = parsedDate;\r\n }\r\n }\r\n\r\n if (date) {\r\n this.updateInternalState(date);\r\n } else {\r\n this.resetInternalState();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled.set(isDisabled);\r\n }\r\n\r\n toggle() {\r\n if (this.isBlocked()) return;\r\n\r\n this.markAsTouched();\r\n\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isBlocked()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n\r\n // Si hay fecha seleccionada, navegar a ese mes/año\r\n const selected = this.selectedDate();\r\n if (selected) {\r\n this.currentMonth.set(selected.getMonth());\r\n this.currentYear.set(selected.getFullYear());\r\n }\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n }\r\n\r\n selectDay(day: number | null) {\r\n if (!day || this.isBlocked()) return;\r\n\r\n const newDate = new Date(\r\n this.currentYear(),\r\n this.currentMonth(),\r\n day,\r\n this.selectedHour(),\r\n this.selectedMinute()\r\n );\r\n\r\n if (this.isDateDisabled(newDate)) return;\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n\r\n // Solo cerrar automáticamente si es modo 'date'\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n setHour12(hour12: number) {\r\n if (this.isBlocked()) return;\r\n\r\n // Convertir de 12h a 24h\r\n let hour24: number;\r\n const amPm = this.selectedAmPm();\r\n \r\n if (hour12 === 12) {\r\n hour24 = amPm === 'AM' ? 0 : 12;\r\n } else {\r\n hour24 = amPm === 'AM' ? hour12 : hour12 + 12;\r\n }\r\n\r\n this.selectedHour.set(hour24);\r\n this.updateDateTime();\r\n }\r\n\r\n setMinute(minute: number) {\r\n if (this.isBlocked()) return;\r\n\r\n this.selectedMinute.set(minute);\r\n this.updateDateTime();\r\n }\r\n\r\n setAmPm(amPm: 'AM' | 'PM') {\r\n if (this.isBlocked()) return;\r\n\r\n const currentHour24 = this.selectedHour();\r\n const currentHour12 = this.selectedHour12();\r\n let newHour24: number;\r\n\r\n if (amPm === 'AM') {\r\n newHour24 = currentHour12 === 12 ? 0 : currentHour12;\r\n } else {\r\n newHour24 = currentHour12 === 12 ? 12 : currentHour12 + 12;\r\n }\r\n\r\n this.selectedAmPm.set(amPm);\r\n this.selectedHour.set(newHour24);\r\n this.updateDateTime();\r\n }\r\n\r\n previousMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n\r\n if (currentMonth === 0) {\r\n this.currentMonth.set(11);\r\n this.currentYear.set(currentYear - 1);\r\n } else {\r\n this.currentMonth.set(currentMonth - 1);\r\n }\r\n }\r\n\r\n nextMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n\r\n if (currentMonth === 11) {\r\n this.currentMonth.set(0);\r\n this.currentYear.set(currentYear + 1);\r\n } else {\r\n this.currentMonth.set(currentMonth + 1);\r\n }\r\n }\r\n\r\n previousYear() {\r\n this.currentYear.set(this.currentYear() - 1);\r\n }\r\n\r\n nextYear() {\r\n this.currentYear.set(this.currentYear() + 1);\r\n }\r\n\r\n today() {\r\n const today = new Date();\r\n this.updateInternalState(today);\r\n this.onChange(today.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(today);\r\n\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n clear() {\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.markAsTouched();\r\n this.dateChange.emit(null);\r\n this.close();\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.isBlocked()) return;\r\n\r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Tab') {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n }\r\n\r\n isDaySelected(day: number | null): boolean {\r\n if (!day) return false;\r\n const selected = this.selectedDate();\r\n if (!selected) return false;\r\n\r\n return (\r\n selected.getDate() === day &&\r\n selected.getMonth() === this.currentMonth() &&\r\n selected.getFullYear() === this.currentYear()\r\n );\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n return (\r\n today.getDate() === day &&\r\n today.getMonth() === this.currentMonth() &&\r\n today.getFullYear() === this.currentYear()\r\n );\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n if (!day) return true;\r\n \r\n const date = new Date(this.currentYear(), this.currentMonth(), day);\r\n return this.isDateDisabled(date);\r\n }\r\n\r\n isDateDisabled(date: Date): boolean {\r\n const minDate = this.minDate();\r\n const maxDate = this.maxDate();\r\n\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n\r\n return false;\r\n }\r\n\r\n private updateDateTime() {\r\n const selected = this.selectedDate();\r\n if (!selected) return;\r\n\r\n const newDate = new Date(selected);\r\n newDate.setHours(this.selectedHour());\r\n newDate.setMinutes(this.selectedMinute());\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n }\r\n\r\n // Manejo de input de texto (DD/MM/YYYY)\r\n onInputChange(event: Event) {\r\n if (this.isBlocked()) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n\r\n // Eliminar todo lo que no sea número\r\n const numbersOnly = value.replace(/\\D/g, '');\r\n\r\n // Limitar a 8 dígitos (DDMMYYYY)\r\n const limitedNumbers = numbersOnly.slice(0, 8);\r\n\r\n // Formatear con barras: DD/MM/YYYY\r\n let formatted = '';\r\n if (limitedNumbers.length > 0) {\r\n formatted = limitedNumbers.slice(0, 2);\r\n if (limitedNumbers.length > 2) {\r\n formatted += '/' + limitedNumbers.slice(2, 4);\r\n }\r\n if (limitedNumbers.length > 4) {\r\n formatted += '/' + limitedNumbers.slice(4, 8);\r\n }\r\n }\r\n\r\n this.inputTextValue.set(formatted);\r\n input.value = formatted;\r\n\r\n this.markAsTouched();\r\n\r\n // Solo intentamos parsear cuando tenemos DD/MM/YYYY completo (10 caracteres)\r\n if (formatted.length === 10) {\r\n const parsedDate = this.parseDateInput(formatted);\r\n\r\n if (parsedDate) {\r\n if (this.isDateDisabled(parsedDate)) {\r\n // Está fuera de rango, dejamos el texto pero no cambiamos el valor\r\n return;\r\n }\r\n\r\n this.updateInternalState(parsedDate);\r\n this.onChange(parsedDate.toISOString());\r\n this.dateChange.emit(parsedDate);\r\n }\r\n } else if (formatted.trim() === '') {\r\n // Si el campo queda vacío, limpiamos el valor\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.dateChange.emit(null);\r\n }\r\n }\r\n\r\n onInputFocus() {\r\n if (this.isBlocked()) return;\r\n this.open();\r\n }\r\n\r\n private parseDateInput(input: string): Date | null {\r\n if (!input || input.trim() === '') return null;\r\n\r\n const match = input.trim().match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\r\n if (match) {\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10) - 1;\r\n const year = parseInt(match[3], 10);\r\n\r\n if (day >= 1 && day <= 31 && month >= 0 && month <= 11 && year >= 1900 && year <= 2100) {\r\n const date = new Date(year, month, day);\r\n if (date.getDate() === day && date.getMonth() === month && date.getFullYear() === year) {\r\n return date;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private formatDateForInput(date: Date): string {\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private updateInternalState(date: Date) {\r\n this.selectedDate.set(date);\r\n this.currentMonth.set(date.getMonth());\r\n this.currentYear.set(date.getFullYear());\r\n this.selectedHour.set(date.getHours());\r\n this.selectedMinute.set(date.getMinutes());\r\n this.selectedAmPm.set(date.getHours() >= 12 ? 'PM' : 'AM');\r\n\r\n const formatted = this.formatDateForInput(date);\r\n this.inputTextValue.set(formatted);\r\n }\r\n\r\n private resetInternalState() {\r\n this.selectedDate.set(null);\r\n this.inputTextValue.set('');\r\n this.selectedHour.set(0);\r\n this.selectedMinute.set(0);\r\n this.selectedAmPm.set('AM');\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) {\r\n this.removeDocumentListener();\r\n }\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n\r\n setTimeout(() => {\r\n document.addEventListener('click', this.documentClickListener!, true);\r\n }, 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n\r\n public markTouched() {\r\n this.markAsTouched();\r\n }\r\n\r\n /**\r\n * Obtiene la fecha seleccionada en formato ISO string\r\n * @returns string ISO o null si no hay fecha seleccionada\r\n */\r\n public getISOString(): string | null {\r\n const date = this.selectedDate();\r\n return date ? date.toISOString() : null;\r\n }\r\n\r\n /**\r\n * Establece la fecha desde un string ISO\r\n * @param isoString - Fecha en formato ISO\r\n */\r\n public setFromISOString(isoString: string | null): void {\r\n if (isoString) {\r\n const date = new Date(isoString);\r\n if (!isNaN(date.getTime())) {\r\n this.writeValue(date);\r\n this.onChange(isoString);\r\n }\r\n } else {\r\n this.clear();\r\n }\r\n }\r\n}","<div class=\"datetime-container\">\r\n <div\r\n class=\"datetime-header\"\r\n [class.active]=\"isOpen()\"\r\n [class.disabled]=\"isBlocked()\"\r\n [class.readonly]=\"isBlocked()\"\r\n (click)=\"!isBlocked() && toggle()\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n tabindex=\"0\"\r\n >\r\n <input\r\n type=\"text\"\r\n class=\"datetime-input\"\r\n [value]=\"displayValue()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"onInputChange($event)\"\r\n (focus)=\"!isBlocked() && onInputFocus()\"\r\n (click)=\"$event.stopPropagation()\"\r\n [disabled]=\"isDisabled()\"\r\n [readOnly]=\"readonly()\"\r\n />\r\n\r\n <div class=\"header-icons\">\r\n @if (selectedDate()) {\r\n <span\r\n class=\"clear-icon\"\r\n (click)=\"!isBlocked() && clear(); $event.stopPropagation()\"\r\n title=\"Limpiar\"\r\n >\r\n ×\r\n </span>\r\n }\r\n <span class=\"arrow\" [class.open]=\"isOpen()\"></span>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n@if (isOpen()) {\r\n<div class=\"dropdown\">\r\n <div class=\"datetime-content\">\r\n <!-- Sección del calendario -->\r\n <div class=\"calendar-section\">\r\n <!-- Navegación del calendario -->\r\n <div class=\"calendar-nav\">\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousYear()\"\r\n title=\"Año anterior\"\r\n >\r\n ‹‹\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"previousMonth()\"\r\n title=\"Mes anterior\"\r\n >\r\n ‹\r\n </button>\r\n </div>\r\n\r\n <div class=\"current-date\">{{ monthName() }} {{ currentYear() }}</div>\r\n\r\n <div class=\"nav-section\">\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextMonth()\"\r\n title=\"Siguiente mes\"\r\n >\r\n ›\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"nav-btn\"\r\n (click)=\"nextYear()\"\r\n title=\"Siguiente año\"\r\n >\r\n ››\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Días de la semana -->\r\n <div class=\"weekdays\">\r\n <div class=\"weekday\">Dom</div>\r\n <div class=\"weekday\">Lun</div>\r\n <div class=\"weekday\">Mar</div>\r\n <div class=\"weekday\">Mié</div>\r\n <div class=\"weekday\">Jue</div>\r\n <div class=\"weekday\">Vie</div>\r\n <div class=\"weekday\">Sáb</div>\r\n </div>\r\n\r\n <!-- Días del mes -->\r\n <div class=\"calendar-grid\">\r\n @for (day of calendarDays(); track $index) {\r\n <div\r\n class=\"calendar-day\"\r\n [class.selected]=\"isDaySelected(day)\"\r\n [class.today]=\"isToday(day)\"\r\n [class.disabled]=\"isDayDisabled(day)\"\r\n [class.empty]=\"!day\"\r\n (click)=\"selectDay(day)\"\r\n >\r\n {{ day || '' }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Selector de tiempo (solo si mode === 'datetime') -->\r\n @if (mode() === 'datetime') {\r\n <div class=\"time-section\">\r\n <div class=\"time-header\">Horario</div>\r\n\r\n <div class=\"time-selectors\">\r\n <div class=\"time-group\">\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Hora</div>\r\n <div class=\"time-scroll\">\r\n @for (hour of hours12(); track hour.value) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"hour.value === selectedHour12()\"\r\n (click)=\"setHour12(hour.value)\"\r\n >\r\n {{ hour.display }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-separator-vertical\">:</div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Min</div>\r\n <div class=\"time-scroll\">\r\n @for (minute of minutes(); track minute) {\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"minute === selectedMinute()\"\r\n (click)=\"setMinute(minute)\"\r\n >\r\n {{ minute.toString().padStart(2, '0') }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">AM/PM</div>\r\n <div class=\"time-scroll ampm\">\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'AM'\"\r\n (click)=\"setAmPm('AM')\"\r\n >\r\n AM\r\n </div>\r\n <div\r\n class=\"time-option\"\r\n [class.selected]=\"selectedAmPm() === 'PM'\"\r\n (click)=\"setAmPm('PM')\"\r\n >\r\n PM\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Botones de acción -->\r\n <div class=\"action-buttons\">\r\n <button type=\"button\" class=\"action-btn secondary\" (click)=\"today()\">\r\n Hoy\r\n </button>\r\n @if (mode() === 'datetime') {\r\n <button type=\"button\" class=\"action-btn primary\" (click)=\"close()\">\r\n Aceptar\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { DateFilterSelection, DateTimeMode, FilterItem, Hour12 } from '../../interfaces/filters';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-date-time-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n templateUrl: './date-time-filter.html',\r\n styleUrl: './date-time-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimeFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DateTimeFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n\r\n // Outputs\r\n dateSelected = output<DateFilterSelection>();\r\n dateChange = output<Date | null>();\r\n\r\n // Internal State\r\n activeFilterType = signal<string | null>(null);\r\n isOpen = signal(false);\r\n selectedDate = signal<Date | null>(null);\r\n inputTextValue = signal<string>('');\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n // Máscara visual dinámica para la guía de fecha __/__/____\r\n // Devuelve un arreglo de caracteres con flag \"filled\" para poder dar color distinto\r\n inputMask = computed(() => {\r\n const raw = this.inputTextValue() || '';\r\n const numbersOnly = raw.replace(/\\D/g, '');\r\n\r\n const template: { char: string; filled: boolean }[] = [\r\n { char: 'd', filled: false },\r\n { char: 'd', filled: false },\r\n { char: '/', filled: false },\r\n { char: 'm', filled: false },\r\n { char: 'm', filled: false },\r\n { char: '/', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n { char: 'y', filled: false },\r\n ];\r\n\r\n let index = 0;\r\n\r\n for (let i = 0; i < template.length && index < numbersOnly.length; i++) {\r\n if (template[i].char === '/') continue;\r\n template[i] = { char: numbersOnly[index++], filled: true };\r\n }\r\n\r\n // Cuando se completa el segmento, el slash correspondiente pasa a \"filled\"\r\n if (numbersOnly.length >= 2) {\r\n template[2] = { char: '/', filled: true }; // después de DD\r\n }\r\n if (numbersOnly.length >= 4) {\r\n template[5] = { char: '/', filled: true }; // después de MM\r\n }\r\n\r\n return template; // para usar en el template y colorear por carácter\r\n });\r\n\r\n clearTrigger = input<number>(0);\r\n\r\n // Computed Properties based on active filter\r\n activeFilter = computed(() => {\r\n const type = this.activeFilterType();\r\n return this.filters().find(f => f.value === type) || null;\r\n });\r\n\r\n mode = computed<DateTimeMode>(() => {\r\n const filter = this.activeFilter();\r\n return filter?.type === 'datetime' ? 'datetime' : 'date';\r\n });\r\n\r\n placeholder = computed(() => this.activeFilter()?.placeholder || 'Seleccionar fecha');\r\n minDate = computed(() => this.activeFilter()?.minDate || null);\r\n maxDate = computed(() => this.activeFilter()?.maxDate || null);\r\n filterValue = computed(() => this.activeFilter()?.value || '');\r\n\r\n // Calendar Navigation\r\n currentMonth = signal(new Date().getMonth());\r\n currentYear = signal(new Date().getFullYear());\r\n\r\n // Time State\r\n selectedHour = signal(0);\r\n selectedMinute = signal(0);\r\n selectedAmPm = signal<'AM' | 'PM'>('AM');\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.clear();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | Date | null): void {\r\n let date: Date | null = null;\r\n\r\n if (value instanceof Date) {\r\n date = value;\r\n } else if (typeof value === 'string' && value) {\r\n const parsedDate = new Date(value);\r\n if (!isNaN(parsedDate.getTime())) {\r\n date = parsedDate;\r\n }\r\n }\r\n\r\n if (date) {\r\n this.updateInternalState(date);\r\n } else {\r\n this.resetInternalState();\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n toggle(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.activeFilterType() === filterValue && this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n\r\n const selected = this.selectedDate();\r\n if (selected) {\r\n this.currentMonth.set(selected.getMonth());\r\n this.currentYear.set(selected.getFullYear());\r\n }\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n // Don't clear activeFilterType here to keep the chip active if needed, \r\n // or clear it if you want the chip to look inactive when closed.\r\n // For now, let's keep it active only if a date is selected? \r\n // Or maybe we want to close the dropdown but keep the filter \"selected\" in UI?\r\n // Let's just close the dropdown.\r\n }\r\n\r\n // Calendar Logic\r\n selectDay(day: number | null) {\r\n if (!day || this.isDisabled()) return;\r\n\r\n const newDate = new Date(\r\n this.currentYear(),\r\n this.currentMonth(),\r\n day,\r\n this.selectedHour(),\r\n this.selectedMinute()\r\n );\r\n\r\n if (this.isDateDisabled(newDate)) return;\r\n\r\n this.updateInternalState(newDate);\r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n\r\n this.dateSelected.emit({\r\n filter: this.filterValue(),\r\n value: newDate,\r\n });\r\n\r\n if (this.mode() === 'date') {\r\n this.close();\r\n }\r\n }\r\n\r\n // ... (Rest of the helper methods like previousMonth, nextMonth, etc. remain largely the same)\r\n\r\n displayValue = computed(() => {\r\n const date = this.selectedDate();\r\n if (!date) return '';\r\n\r\n const options: Intl.DateTimeFormatOptions = {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n };\r\n\r\n if (this.mode() === 'datetime') {\r\n options.hour = '2-digit';\r\n options.minute = '2-digit';\r\n options.hour12 = true;\r\n }\r\n\r\n return date.toLocaleDateString('es-ES', options);\r\n });\r\n\r\n // Input text handling\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n let value = input.value;\r\n \r\n // Remove all non-numeric characters\r\n const numbersOnly = value.replace(/\\D/g, '');\r\n \r\n // Limit to 8 digits (DD/MM/YYYY)\r\n const limitedNumbers = numbersOnly.slice(0, 8);\r\n \r\n // Format with slashes: DD/MM/YYYY\r\n let formatted = '';\r\n if (limitedNumbers.length > 0) {\r\n formatted = limitedNumbers.slice(0, 2);\r\n if (limitedNumbers.length > 2) {\r\n formatted += '/' + limitedNumbers.slice(2, 4);\r\n }\r\n if (limitedNumbers.length > 4) {\r\n formatted += '/' + limitedNumbers.slice(4, 8);\r\n }\r\n }\r\n \r\n // Update the input value\r\n this.inputTextValue.set(formatted);\r\n input.value = formatted;\r\n \r\n this.markAsTouched();\r\n \r\n // Only parse when we have a complete date (DD/MM/YYYY = 10 characters)\r\n if (formatted.length === 10) {\r\n const parsedDate = this.parseDateInput(formatted);\r\n \r\n if (parsedDate) {\r\n if (this.isDateDisabled(parsedDate)) {\r\n // Invalid date (out of range), but keep the text\r\n return;\r\n }\r\n \r\n this.updateInternalState(parsedDate);\r\n this.onChange(parsedDate.toISOString());\r\n this.dateChange.emit(parsedDate);\r\n this.dateSelected.emit({\r\n filter: filterValue,\r\n value: parsedDate,\r\n });\r\n }\r\n } else if (formatted.trim() === '') {\r\n // Clear if input is empty\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.dateChange.emit(null);\r\n }\r\n }\r\n\r\n onInputFocus(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n\r\n private parseDateInput(input: string): Date | null {\r\n if (!input || input.trim() === '') return null;\r\n\r\n // Only accept DD/MM/YYYY format\r\n const match = input.trim().match(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/);\r\n if (match) {\r\n const day = parseInt(match[1], 10);\r\n const month = parseInt(match[2], 10) - 1;\r\n const year = parseInt(match[3], 10);\r\n\r\n // Validate date\r\n if (day >= 1 && day <= 31 && month >= 0 && month <= 11 && year >= 1900 && year <= 2100) {\r\n const date = new Date(year, month, day);\r\n // Check if date is valid (handles invalid dates like 31/02/2024)\r\n if (date.getDate() === day && date.getMonth() === month && date.getFullYear() === year) {\r\n return date;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n monthName = computed(() => {\r\n const months = [\r\n 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',\r\n 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'\r\n ];\r\n return months[this.currentMonth()];\r\n });\r\n\r\n calendarDays = computed(() => {\r\n const year = this.currentYear();\r\n const month = this.currentMonth();\r\n const firstDay = new Date(year, month, 1);\r\n const lastDay = new Date(year, month + 1, 0);\r\n const daysInMonth = lastDay.getDate();\r\n const startingDayOfWeek = firstDay.getDay();\r\n\r\n const days: (number | null)[] = [];\r\n for (let i = 0; i < startingDayOfWeek; i++) days.push(null);\r\n for (let day = 1; day <= daysInMonth; day++) days.push(day);\r\n return days;\r\n });\r\n\r\n hours12 = computed((): Hour12[] => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n const hour12 = i === 0 ? 12 : i;\r\n return {\r\n value: hour12,\r\n display: hour12.toString().padStart(2, '0')\r\n };\r\n });\r\n });\r\n\r\n selectedHour12 = computed(() => {\r\n const hour24 = this.selectedHour();\r\n if (hour24 === 0) return 12;\r\n if (hour24 > 12) return hour24 - 12;\r\n return hour24;\r\n });\r\n\r\n minutes = computed(() => Array.from({ length: 60 }, (_, i) => i));\r\n\r\n // Helper methods\r\n private updateInternalState(date: Date) {\r\n this.selectedDate.set(date);\r\n this.currentMonth.set(date.getMonth());\r\n this.currentYear.set(date.getFullYear());\r\n this.selectedHour.set(date.getHours());\r\n this.selectedMinute.set(date.getMinutes());\r\n this.selectedAmPm.set(date.getHours() >= 12 ? 'PM' : 'AM');\r\n \r\n // Update input text value to match the formatted date\r\n const formatted = this.formatDateForInput(date);\r\n this.inputTextValue.set(formatted);\r\n }\r\n\r\n private resetInternalState() {\r\n this.selectedDate.set(null);\r\n this.inputTextValue.set('');\r\n this.selectedHour.set(0);\r\n this.selectedMinute.set(0);\r\n this.selectedAmPm.set('AM');\r\n }\r\n\r\n private formatDateForInput(date: Date): string {\r\n const day = date.getDate().toString().padStart(2, '0');\r\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}/${month}/${year}`;\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) this.removeDocumentListener();\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n setTimeout(() => document.addEventListener('click', this.documentClickListener!, true), 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n\r\n // Navigation methods\r\n previousMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n if (currentMonth === 0) {\r\n this.currentMonth.set(11);\r\n this.currentYear.set(currentYear - 1);\r\n } else {\r\n this.currentMonth.set(currentMonth - 1);\r\n }\r\n }\r\n\r\n nextMonth() {\r\n const currentMonth = this.currentMonth();\r\n const currentYear = this.currentYear();\r\n if (currentMonth === 11) {\r\n this.currentMonth.set(0);\r\n this.currentYear.set(currentYear + 1);\r\n } else {\r\n this.currentMonth.set(currentMonth + 1);\r\n }\r\n }\r\n\r\n previousYear() { this.currentYear.set(this.currentYear() - 1); }\r\n nextYear() { this.currentYear.set(this.currentYear() + 1); }\r\n\r\n today() {\r\n const today = new Date();\r\n this.updateInternalState(today);\r\n this.onChange(today.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(today);\r\n this.dateSelected.emit({ filter: this.filterValue(), value: today });\r\n if (this.mode() === 'date') this.close();\r\n }\r\n\r\n clear() {\r\n this.resetInternalState();\r\n this.onChange(null);\r\n this.markAsTouched();\r\n this.dateChange.emit(null);\r\n this.close();\r\n }\r\n\r\n // Time setters\r\n setHour12(hour12: number) {\r\n if (this.isDisabled()) return;\r\n const amPm = this.selectedAmPm();\r\n const hour24 = hour12 === 12 ? (amPm === 'AM' ? 0 : 12) : (amPm === 'AM' ? hour12 : hour12 + 12);\r\n this.selectedHour.set(hour24);\r\n this.updateDateTime();\r\n }\r\n\r\n setMinute(minute: number) {\r\n if (this.isDisabled()) return;\r\n this.selectedMinute.set(minute);\r\n this.updateDateTime();\r\n }\r\n\r\n setAmPm(amPm: 'AM' | 'PM') {\r\n if (this.isDisabled()) return;\r\n const currentHour12 = this.selectedHour12();\r\n const newHour24 = amPm === 'AM' ? (currentHour12 === 12 ? 0 : currentHour12) : (currentHour12 === 12 ? 12 : currentHour12 + 12);\r\n this.selectedAmPm.set(amPm);\r\n this.selectedHour.set(newHour24);\r\n this.updateDateTime();\r\n }\r\n\r\n private updateDateTime() {\r\n const selected = this.selectedDate();\r\n if (!selected) return;\r\n const newDate = new Date(selected);\r\n newDate.setHours(this.selectedHour());\r\n newDate.setMinutes(this.selectedMinute());\r\n this.selectedDate.set(newDate);\r\n \r\n // Update input text value\r\n const formatted = this.formatDateForInput(newDate);\r\n this.inputTextValue.set(formatted);\r\n \r\n this.onChange(newDate.toISOString());\r\n this.markAsTouched();\r\n this.dateChange.emit(newDate);\r\n this.dateSelected.emit({\r\n filter: this.filterValue(),\r\n value: newDate,\r\n });\r\n }\r\n\r\n // Validation helpers\r\n isDaySelected(day: number | null): boolean {\r\n if (!day) return false;\r\n const selected = this.selectedDate();\r\n return !!selected && selected.getDate() === day && selected.getMonth() === this.currentMonth() && selected.getFullYear() === this.currentYear();\r\n }\r\n\r\n isToday(day: number | null): boolean {\r\n if (!day) return false;\r\n const today = new Date();\r\n return today.getDate() === day && today.getMonth() === this.currentMonth() && today.getFullYear() === this.currentYear();\r\n }\r\n\r\n isDayDisabled(day: number | null): boolean {\r\n if (!day) return true;\r\n return this.isDateDisabled(new Date(this.currentYear(), this.currentMonth(), day));\r\n }\r\n\r\n isDateDisabled(date: Date): boolean {\r\n const minDate = this.minDate();\r\n const maxDate = this.maxDate();\r\n if (minDate && date < minDate) return true;\r\n if (maxDate && date > maxDate) return true;\r\n return false;\r\n }\r\n}","<div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip-input-wrapper\" [class.has-value]=\"selectedDate() || inputTextValue()\"\r\n [class.active]=\"activeFilterType() === item.value\">\r\n <!-- Etiqueta flotante -->\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'dd/mm/aaaa' }}</label>\r\n\r\n <!-- Máscara de guía de fecha dinámica (__/__/____) -->\r\n <div class=\"chip-input-mask\">\r\n @for (part of inputMask(); track $index) {\r\n <span class=\"mask-char\" [class.mask-char-filled]=\"part.filled\" [class.mask-char-placeholder]=\"!part.filled\">\r\n {{ part.char }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <input type=\"text\" [value]=\"inputTextValue()\" (input)=\"onInputChange($event, item.value)\"\r\n (focus)=\"onInputFocus(item.value)\" [placeholder]=\"item.placeholder || 'Seleccionar Fecha'\" class=\"chip-input\"\r\n [disabled]=\"isDisabled()\" />\r\n\r\n <button type=\"button\" class=\"calendar-icon-button\" (click)=\"toggle(item.value)\" title=\"Abrir calendario\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-calendar-event\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M4 5m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z\" />\r\n <path d=\"M16 3l0 4\" />\r\n <path d=\"M8 3l0 4\" />\r\n <path d=\"M4 11l16 0\" />\r\n <path d=\"M8 15h2v2h-2z\" />\r\n </svg>\r\n </button>\r\n\r\n @if (isOpen() && activeFilterType() === item.value) {\r\n <div class=\"dropdown\">\r\n <div class=\"datetime-content\">\r\n <!-- Sección del calendario -->\r\n <div class=\"calendar-section\">\r\n <!-- Navegación -->\r\n <div class=\"calendar-nav\">\r\n <div class=\"nav-section\">\r\n <button type=\"button\" class=\"nav-btn\" (click)=\"previousYear()\" title=\"Año anterior\">\r\n ‹‹\r\n </button>\r\n <button type=\"button\" class=\"nav-btn\" (click)=\"previousMonth()\" title=\"Mes anterior\">\r\n ‹\r\n </button>\r\n </div>\r\n\r\n <div class=\"current-date\">\r\n {{ monthName() }} {{ currentYear() }}\r\n </div>\r\n\r\n <div class=\"nav-section\">\r\n <button type=\"button\" class=\"nav-btn\" (click)=\"nextMonth()\" title=\"Siguiente mes\">\r\n ›\r\n </button>\r\n <button type=\"button\" class=\"nav-btn\" (click)=\"nextYear()\" title=\"Siguiente año\">\r\n ››\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Días de la semana -->\r\n <div class=\"weekdays\">\r\n <div class=\"weekday\">Dom</div>\r\n <div class=\"weekday\">Lun</div>\r\n <div class=\"weekday\">Mar</div>\r\n <div class=\"weekday\">Mié</div>\r\n <div class=\"weekday\">Jue</div>\r\n <div class=\"weekday\">Vie</div>\r\n <div class=\"weekday\">Sáb</div>\r\n </div>\r\n\r\n <!-- Días -->\r\n <div class=\"calendar-grid\">\r\n @for (day of calendarDays(); track $index) {\r\n <div class=\"calendar-day\" [class.selected]=\"isDaySelected(day)\" [class.today]=\"isToday(day)\"\r\n [class.disabled]=\"isDayDisabled(day)\" [class.empty]=\"!day\" (click)=\"selectDay(day)\">\r\n {{ day || \"\" }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- TIME PICKER -->\r\n @if (mode() === 'datetime') {\r\n <div class=\"time-section\">\r\n <div class=\"time-header\">Horario</div>\r\n\r\n <div class=\"time-selectors\">\r\n <div class=\"time-group\">\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Hora</div>\r\n <div class=\"time-scroll\">\r\n @for (hour of hours12(); track hour.value) {\r\n <div class=\"time-option\" [class.selected]=\"hour.value === selectedHour12()\"\r\n (click)=\"setHour12(hour.value)\">\r\n {{ hour.display }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-separator-vertical\">:</div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">Min</div>\r\n <div class=\"time-scroll\">\r\n @for (minute of minutes(); track minute) {\r\n <div class=\"time-option\" [class.selected]=\"minute === selectedMinute()\" (click)=\"setMinute(minute)\">\r\n {{ minute.toString().padStart(2, \"0\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-column\">\r\n <div class=\"time-label\">AM/PM</div>\r\n <div class=\"time-scroll ampm\">\r\n <div class=\"time-option\" [class.selected]=\"selectedAmPm() === 'AM'\" (click)=\"setAmPm('AM')\">\r\n AM\r\n </div>\r\n <div class=\"time-option\" [class.selected]=\"selectedAmPm() === 'PM'\" (click)=\"setAmPm('PM')\">\r\n PM\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- botones -->\r\n <div class=\"action-buttons\">\r\n <button type=\"button\" class=\"action-btn secondary\" (click)=\"today()\">\r\n Hoy\r\n </button>\r\n\r\n @if (mode() === 'datetime') {\r\n <button type=\"button\" class=\"action-btn primary\" (click)=\"close()\">\r\n Aceptar\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-number-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-number-filter.html',\r\n styleUrl: './input-number-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputNumberFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputNumberFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor() {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // No cleanup needed\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // Not used for multiple inputs\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const value = (event.target as HTMLInputElement).value;\r\n \r\n this.markAsTouched();\r\n \r\n // Actualizar el valor del filtro específico\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterValue]: value\r\n }));\r\n\r\n // Emitir eventos\r\n this.onChange(value || null);\r\n this.valueChange.emit(value || null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: value,\r\n });\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n clearFilter(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n \r\n // Limpiar el valor del filtro específico\r\n this.filterValues.update(current => {\r\n const updated = { ...current };\r\n delete updated[filterValue];\r\n return updated;\r\n });\r\n\r\n // Emitir eventos\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: '',\r\n });\r\n }\r\n}\r\n","<div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip-input-wrapper\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Escribir Número' }}</label>\r\n <input type=\"number\" [value]=\"filterValues()[item.value] || ''\" (input)=\"onInputChange($event, item.value)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Escribir Número')\"\r\n class=\"chip-input\" [disabled]=\"isDisabled()\" />\r\n @if (filterValues()[item.value]) {\r\n <button type=\"button\" class=\"clear-button\" (click)=\"clearFilter(item.value)\" title=\"Limpiar\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n NgZone,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-select-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-select-filter.html',\r\n styleUrl: './input-select-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputSelectFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputSelectFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n activeFilterType = signal<string | null>(null);\r\n isOpen = signal(false);\r\n selectedLabel = signal<string>('');\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n searchTerm = signal('');\r\n\r\n // Computed Properties based on active filter\r\n activeFilter = computed(() => {\r\n const type = this.activeFilterType();\r\n return this.filters().find(f => f.value === type) || null;\r\n });\r\n\r\n placeholder = computed(() => this.activeFilter()?.placeholder || 'Seleccionar...');\r\n filterValueKey = computed(() => this.activeFilter()?.value || '');\r\n options = computed(() => this.activeFilter()?.options || []);\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase().trim();\r\n const opts = this.options();\r\n\r\n if (!term) return opts;\r\n\r\n return opts.filter(option =>\r\n option.label.toLowerCase().includes(term) ||\r\n option.value.toString().toLowerCase().includes(term)\r\n );\r\n });\r\n\r\n private documentClickListener?: (event: Event) => void;\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor(private elementRef: ElementRef, private ngZone: NgZone) {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeDocumentListener();\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.selectedLabel.set('');\r\n this.activeFilterType.set(null);\r\n this.isOpen.set(false);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // If we had a way to map value back to label without activeFilter, we would do it here.\r\n // For now, we might need to rely on the consumer or just show the value if label not found.\r\n // But since we only know options when activeFilter is set, this is tricky.\r\n // However, usually writeValue is for the form control value.\r\n // Let's just store it.\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n toggle(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.activeFilterType() === filterValue && this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.activeFilterType.set(filterValue);\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n this.isOpen.set(true);\r\n this.addDocumentListener();\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.removeDocumentListener();\r\n this.markAsTouched();\r\n }\r\n\r\n selectOption(option: { label: string; value: string }) {\r\n this.selectedLabel.set(option.label);\r\n\r\n const type = this.activeFilterType();\r\n if (type) {\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [type]: option.label // Show label in chip\r\n }));\r\n }\r\n\r\n this.onChange(option.value);\r\n this.valueChange.emit(option.value);\r\n this.filterSelected.emit({\r\n filter: this.filterValueKey(),\r\n value: option.value,\r\n });\r\n this.close();\r\n }\r\n\r\n clear() {\r\n this.selectedLabel.set('');\r\n const type = this.activeFilterType();\r\n if (type) {\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [type]: ''\r\n }));\r\n }\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.searchTerm.set('');\r\n this.close();\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n onInputChange(event: Event, filterType: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const target = event.target as HTMLInputElement;\r\n const value = target.value;\r\n\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterType]: value,\r\n }));\r\n\r\n this.searchTerm.set(value);\r\n this.activeFilterType.set(filterType);\r\n\r\n if (!this.isOpen()) {\r\n this.open();\r\n }\r\n }\r\n\r\n onFocusFilter(filterType: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.activeFilterType.set(filterType);\r\n const currentValue = this.filterValues()[filterType] || '';\r\n this.searchTerm.set(currentValue);\r\n\r\n if (!this.isOpen()) {\r\n this.open();\r\n }\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Enter') {\r\n const filtered = this.filteredOptions();\r\n if (filtered.length > 0) {\r\n this.selectOption(filtered[0]);\r\n }\r\n }\r\n }\r\n\r\n private addDocumentListener() {\r\n if (this.documentClickListener) this.removeDocumentListener();\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.documentClickListener = (event: Event) => {\r\n const target = event.target as Node;\r\n if (!this.elementRef.nativeElement.contains(target)) {\r\n this.ngZone.run(() => {\r\n if (this.isOpen()) {\r\n this.markAsTouched();\r\n this.close();\r\n }\r\n });\r\n }\r\n };\r\n setTimeout(() => document.addEventListener('click', this.documentClickListener!, true), 10);\r\n });\r\n }\r\n\r\n private removeDocumentListener() {\r\n if (this.documentClickListener) {\r\n document.removeEventListener('click', this.documentClickListener, true);\r\n this.documentClickListener = undefined;\r\n }\r\n }\r\n}\r\n","<div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip\" [class.active]=\"activeFilterType() === item.value\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Seleccionar' }}</label>\r\n <div class=\"content-chip\">\r\n <input type=\"text\" class=\"chip-input\" [value]=\"filterValues()[item.value] || ''\"\r\n (input)=\"onInputChange($event, item.value)\" (focus)=\"onFocusFilter(item.value)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"onKeyDown($event)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Seleccionar')\"\r\n [disabled]=\"isDisabled()\" />\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-list\" (click)=\"onFocusFilter(item.value)\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M9 6l11 0\" />\r\n <path d=\"M9 12l11 0\" />\r\n <path d=\"M9 18l11 0\" />\r\n <path d=\"M5 6l0 .01\" />\r\n <path d=\"M5 12l0 .01\" />\r\n <path d=\"M5 18l0 .01\" />\r\n </svg>\r\n </div>\r\n\r\n @if (isOpen() && activeFilterType() === item.value) {\r\n <div class=\"dropdown\">\r\n <div class=\"options-list\">\r\n @for (option of filteredOptions(); track option.value) {\r\n <div class=\"option-item\" (click)=\"selectOption(option)\">\r\n {{ option.label }}\r\n </div>\r\n }\r\n @if (filteredOptions().length === 0) {\r\n <div class=\"no-options\">No hay opciones</div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n OnDestroy,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FilterItem } from '../../interfaces/filters';\r\n\r\n@Component({\r\n selector: 'lib-input-text-filter',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\r\n templateUrl: './input-text-filter.html',\r\n styleUrl: './input-text-filter.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputTextFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class InputTextFilter implements ControlValueAccessor, OnDestroy {\r\n // Inputs\r\n filters = input<FilterItem[]>([]);\r\n clearTrigger = input<number>(0); // Increment this to trigger a clear\r\n\r\n // Outputs\r\n filterSelected = output<{ filter: string; value: string }>();\r\n valueChange = output<string | null>();\r\n\r\n // Internal State\r\n filterValues = signal<Record<string, string>>({});\r\n isDisabled = signal(false);\r\n isTouched = signal(false);\r\n\r\n private onChange: (value: string | null) => void = () => { };\r\n private onTouched: () => void = () => { };\r\n\r\n constructor() {\r\n // Watch for clear trigger changes\r\n effect(() => {\r\n const trigger = this.clearTrigger();\r\n if (trigger > 0) {\r\n this.resetAllFilters();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // No cleanup needed\r\n }\r\n\r\n private resetAllFilters() {\r\n this.filterValues.set({});\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: string | null): void {\r\n // Not used for multiple inputs\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => 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 this.isDisabled.set(isDisabled);\r\n }\r\n\r\n // Public Methods\r\n onInputChange(event: Event, filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n const value = (event.target as HTMLInputElement).value;\r\n \r\n this.markAsTouched();\r\n \r\n // Actualizar el valor del filtro específico\r\n this.filterValues.update(current => ({\r\n ...current,\r\n [filterValue]: value\r\n }));\r\n\r\n // Emitir eventos\r\n this.onChange(value || null);\r\n this.valueChange.emit(value || null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: value,\r\n });\r\n }\r\n\r\n clearFilter(filterValue: string) {\r\n if (this.isDisabled()) return;\r\n\r\n this.markAsTouched();\r\n \r\n // Limpiar el valor del filtro específico\r\n this.filterValues.update(current => {\r\n const updated = { ...current };\r\n delete updated[filterValue];\r\n return updated;\r\n });\r\n\r\n // Emitir eventos\r\n this.onChange(null);\r\n this.valueChange.emit(null);\r\n this.filterSelected.emit({\r\n filter: filterValue,\r\n value: '',\r\n });\r\n }\r\n\r\n private markAsTouched() {\r\n if (!this.isTouched()) {\r\n this.isTouched.set(true);\r\n this.onTouched();\r\n }\r\n }\r\n}\r\n","<div class=\"filter-chips\">\r\n @for (item of filters(); track item.value) {\r\n <div class=\"chip-input-wrapper\" [class.has-value]=\"filterValues()[item.value]\">\r\n <label class=\"floating-label\">{{ item.placeholder || item.label || 'Escribir' }}</label>\r\n <input type=\"text\" [value]=\"filterValues()[item.value] || ''\" (input)=\"onInputChange($event, item.value)\"\r\n [placeholder]=\"filterValues()[item.value] ? '' : (item.placeholder || item.label || 'Escribir')\"\r\n class=\"chip-input\" [disabled]=\"isDisabled()\" />\r\n @if (filterValues()[item.value]) {\r\n <button type=\"button\" class=\"clear-button\" (click)=\"clearFilter(item.value)\" title=\"Limpiar\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>","import { Component, input, model, output, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-input',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './input.html',\r\n styleUrl: './input.css',\r\n})\r\nexport class Input {\r\n mode = input<'search' | 'select'>('search');\r\n placeholder = input<string>();\r\n type = input<string>('text');\r\n value = model<string>('');\r\n valueChange = output<string>();\r\n onSearch = output<string>();\r\n onSelect = output<string>();\r\n onClear = output<void>();\r\n\r\n options = input<{ code: string; name: string }[]>([]);\r\n showDropdown = signal(false);\r\n\r\n clear() {\r\n this.value.set('');\r\n this.valueChange.emit('');\r\n this.onClear.emit();\r\n }\r\n\r\n search() {\r\n this.onSearch.emit(this.value());\r\n }\r\n\r\n handleInput(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n let inputValue = target.value;\r\n\r\n if (this.type() === 'number') {\r\n inputValue = inputValue.replace(/[^0-9]/g, '');\r\n target.value = inputValue;\r\n }\r\n \r\n this.value.set(inputValue);\r\n this.valueChange.emit(inputValue);\r\n }\r\n\r\n selectOption(option: any) {\r\n this.value.set(`${option.code} - ${option.name}`);\r\n this.valueChange.emit(this.value());\r\n this.showDropdown.set(false);\r\n }\r\n \r\n openSelect() {\r\n this.showDropdown.set(!this.showDropdown());\r\n }\r\n}\r\n","<div class=\"input-wrapper\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"custom-input\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keyup.enter)=\"search()\"\r\n />\r\n\r\n @if (value() && mode() === 'search') {\r\n <button class=\"clear-btn\" (click)=\"clear()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n } @if (mode() === 'search') {\r\n <button class=\"search-btn\" (click)=\"search()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"56\"\r\n height=\"56\"\r\n fill=\"none\"\r\n viewBox=\"0 0 56 56\"\r\n >\r\n <g clip-path=\"url(#clip0_190_2403)\">\r\n <path\r\n fill=\"#454733\"\r\n d=\"M31.755 30.255h-.79l-.28-.27a6.47 6.47 0 0 0 1.57-4.23 6.5 6.5 0 1 0-6.5 6.5c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99 1.49-1.49zm-6 0c-2.49 0-4.5-2.01-4.5-4.5s2.01-4.5 4.5-4.5 4.5 2.01 4.5 4.5-2.01 4.5-4.5 4.5\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_190_2403\">\r\n <rect width=\"56\" height=\"56\" fill=\"#fff\" rx=\"28\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n } @else {\r\n <button class=\"select-btn\" (click)=\"openSelect()\" type=\"button\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-down\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M6 9l6 6l6 -6\" />\r\n </svg>\r\n </button>\r\n }\r\n</div>\r\n\r\n@if (showDropdown()) {\r\n <div class=\"dropdown-menu\">\r\n @for (option of options(); track option.code) {\r\n <button\r\n type=\"button\"\r\n class=\"dropdown-item\"\r\n (click)=\"selectOption(option)\"\r\n >\r\n <span class=\"code\">{{ option.code }}</span>\r\n <span class=\"dash\">-</span>\r\n <span class=\"name\">{{ option.name }}</span>\r\n </button>\r\n }\r\n </div>\r\n}","import {\r\n Component,\r\n computed,\r\n ElementRef,\r\n HostListener,\r\n input,\r\n output,\r\n signal,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\ninterface Option {\r\n value: any;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-select-custom-search',\r\n imports: [],\r\n templateUrl: './select-custom-search.html',\r\n styleUrl: './select-custom-search.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectCustomSearch),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SelectCustomSearch implements ControlValueAccessor {\r\n options = input<Option[]>([]);\r\n placeholder = input<string>('Seleccionar opción');\r\n\r\n selectionChange = output<Option | null>();\r\n\r\n isOpen = signal(false);\r\n searchTerm = signal('');\r\n selectedValue = signal<any>(null);\r\n isDisabled = signal(false); \r\n\r\n readonly = input<boolean>(false);\r\n\r\n isBlocked = computed(() => this.isDisabled() || this.readonly());\r\n\r\n selectedOption = computed(() => {\r\n const value = this.selectedValue();\r\n return this.options().find((option) => option.value === value) || null;\r\n });\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase().trim();\r\n const opts = this.options();\r\n\r\n if (!term) return opts;\r\n\r\n return opts.filter(\r\n (option) =>\r\n option.label.toLowerCase().includes(term) ||\r\n option.value.toString().toLowerCase().includes(term)\r\n );\r\n });\r\n\r\n private onChange = (value: any) => {};\r\n private onTouched = () => {};\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n writeValue(value: any): void {\r\n this.selectedValue.set(value);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.isDisabled.set(isDisabled); \r\n }\r\n\r\n toggle() {\r\n \r\n if (this.isBlocked()) return;\r\n \r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n open() {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n this.isOpen.set(true);\r\n this.searchTerm.set('');\r\n\r\n setTimeout(() => {\r\n const input =\r\n this.elementRef.nativeElement.querySelector('.search-input');\r\n if (input) input.focus();\r\n });\r\n }\r\n\r\n close() {\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n }\r\n\r\n selectOption(option: Option) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n this.selectedValue.set(option.value);\r\n this.onChange(option.value);\r\n this.onTouched();\r\n this.selectionChange.emit(option);\r\n this.close();\r\n }\r\n\r\n onSearch(event: Event) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n const target = event.target as HTMLInputElement;\r\n this.searchTerm.set(target.value);\r\n }\r\n\r\n onKeyDown(event: KeyboardEvent) {\r\n\r\n if (this.isBlocked()) return;\r\n \r\n if (event.key === 'Escape') {\r\n this.close();\r\n } else if (event.key === 'Enter') {\r\n const filtered = this.filteredOptions();\r\n if (filtered.length > 0) {\r\n this.selectOption(filtered[0]);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event) {\r\n \r\n if (!this.isBlocked() && !this.elementRef.nativeElement.contains(event.target as Node)) {\r\n this.close();\r\n }\r\n }\r\n}","<div class=\"select-container\">\r\n <div\r\n class=\"select-header\"\r\n [class.active]=\"isOpen()\"\r\n [class.disabled]=\"isBlocked()\"\r\n [class.readonly]=\"isBlocked()\"\r\n (click)=\"!isBlocked() && toggle()\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n tabindex=\"0\"\r\n >\r\n <span class=\"selected-text\" [class.placeholder]=\"!selectedOption()\">\r\n {{ selectedOption()?.label || placeholder() }}\r\n </span>\r\n\r\n <span class=\"arrow\" [class.open]=\"isOpen()\"></span>\r\n </div>\r\n\r\n @if (isOpen()) {\r\n <div class=\"dropdown\">\r\n <input\r\n type=\"text\"\r\n class=\"search-input\"\r\n [value]=\"searchTerm()\"\r\n placeholder=\"Buscar...\"\r\n (input)=\"!isBlocked() &&onSearch($event)\"\r\n (keydown)=\"!isBlocked() && onKeyDown($event)\"\r\n />\r\n\r\n @if (filteredOptions().length > 0) {\r\n <div class=\"options\">\r\n @for (option of filteredOptions(); track option.value) {\r\n <div\r\n class=\"option\"\r\n [class.selected]=\"option.value === selectedValue()\"\r\n (click)=\"!isBlocked() && selectOption(option)\"\r\n [attr.disabled]=\"isBlocked()\"\r\n >\r\n {{ option.label }}\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <div class=\"no-results\">No se encontraron resultados</div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Component, input, OnDestroy, OnInit } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormGroup,\r\n ReactiveFormsModule,\r\n} from '@angular/forms';\r\n\r\nimport { Subscription } from 'rxjs';\r\nimport { SelectCustomSearch } from '../select-custom-search/select-custom-search';\r\nimport { DateTimePicker } from '../date-time-picker/date-time-picker';\r\n\r\ntype FieldType =\r\n | 'text'\r\n | 'email'\r\n | 'number'\r\n | 'date'\r\n | 'datetime-local'\r\n | 'select'\r\n | 'radio'\r\n | 'checkbox'\r\n | 'textarea'\r\n | 'disabled'\r\n | 'password'\r\n | 'time'\r\n | 'file';\r\n\r\nexport interface Option {\r\n value: string | number | boolean;\r\n label: string;\r\n}\r\n\r\nexport interface FieldConfig {\r\n key: string;\r\n label?: string;\r\n type: FieldType;\r\n placeholder?: string;\r\n required?: boolean;\r\n options?: Option[];\r\n col?: number;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n matchWith?: string;\r\n copyFrom?: string;\r\n pattern?: string;\r\n patternType?:\r\n | 'numbers'\r\n | 'phone'\r\n | 'custom'\r\n | 'text'\r\n | 'username'\r\n | 'alphanumeric';\r\n\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nexport interface SectionConfig {\r\n title?: string;\r\n description?: string;\r\n fields: FieldConfig[];\r\n}\r\n\r\ninterface RealTimeCopyItem {\r\n fieldKey: string;\r\n subscription: Subscription;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-dynamic-form-fields',\r\n standalone: true,\r\n imports: [ReactiveFormsModule, SelectCustomSearch, DateTimePicker],\r\n templateUrl: './dynamic-form-fields.html',\r\n styleUrl: './dynamic-form-fields.css',\r\n})\r\nexport class DynamicFormFields implements OnInit, OnDestroy {\r\n form = input.required<FormGroup>();\r\n sections = input<SectionConfig[]>([]);\r\n compact = input<boolean>(false);\r\n\r\n private copyFromSubscriptions: Subscription[] = [];\r\n private realTimeCopySubscriptions: RealTimeCopyItem[] = [];\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n this.setupCopyFromLogic();\r\n }, 100);\r\n }\r\n\r\n getDatePickerMode(fieldType: FieldType): 'date' | 'datetime' {\r\n return fieldType === 'datetime-local' ? 'datetime' : 'date';\r\n }\r\n\r\n private setupCopyFromLogic(): void {\r\n this.sections().forEach((section) => {\r\n section.fields.forEach((field) => {\r\n if (field.copyFrom) {\r\n this.setupFieldCopy(field);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private setupFieldCopy(field: FieldConfig): void {\r\n const targetControl = this.form().get(field.key);\r\n if (!targetControl) return;\r\n\r\n const sourceControl = this.form().get(field.copyFrom!);\r\n if (!sourceControl) return;\r\n\r\n const triggerFieldKey = this.findTriggerField();\r\n\r\n if (!triggerFieldKey) {\r\n this.setupSimpleCopy(sourceControl, targetControl);\r\n return;\r\n }\r\n\r\n const triggerControl = this.form().get(triggerFieldKey);\r\n if (!triggerControl) {\r\n this.setupSimpleCopy(sourceControl, targetControl);\r\n return;\r\n }\r\n\r\n const subscription = triggerControl.valueChanges.subscribe(\r\n (shouldCopy: boolean) => {\r\n if (shouldCopy) {\r\n targetControl.setValue(sourceControl.value);\r\n targetControl.disable();\r\n this.setupRealTimeCopy(sourceControl, targetControl, field.key);\r\n } else {\r\n targetControl.enable();\r\n\r\n targetControl.setValue('');\r\n this.removeRealTimeCopy(field.key);\r\n }\r\n }\r\n );\r\n\r\n this.copyFromSubscriptions.push(subscription);\r\n\r\n if (triggerControl.value === true) {\r\n targetControl.setValue(sourceControl.value);\r\n targetControl.disable();\r\n this.setupRealTimeCopy(sourceControl, targetControl, field.key);\r\n }\r\n }\r\n\r\n private findTriggerField(): string {\r\n for (const section of this.sections()) {\r\n const triggerField = section.fields.find(\r\n (f) =>\r\n f.type === 'radio' &&\r\n (f.key.includes('is_owner') || f.key.includes('infractor-owner'))\r\n );\r\n if (triggerField) return triggerField.key;\r\n }\r\n return '';\r\n }\r\n\r\n private setupSimpleCopy(\r\n sourceControl: AbstractControl,\r\n targetControl: AbstractControl\r\n ): void {\r\n const subscription = sourceControl.valueChanges.subscribe((value) => {\r\n targetControl.setValue(value);\r\n });\r\n this.copyFromSubscriptions.push(subscription);\r\n }\r\n\r\n private setupRealTimeCopy(\r\n sourceControl: AbstractControl,\r\n targetControl: AbstractControl,\r\n fieldKey: string\r\n ): void {\r\n this.removeRealTimeCopy(fieldKey);\r\n\r\n const subscription = sourceControl.valueChanges.subscribe((value) => {\r\n targetControl.setValue(value);\r\n });\r\n\r\n this.realTimeCopySubscriptions.push({\r\n fieldKey,\r\n subscription,\r\n });\r\n }\r\n\r\n private removeRealTimeCopy(fieldKey: string): void {\r\n const index = this.realTimeCopySubscriptions.findIndex(\r\n (item) => item.fieldKey === fieldKey\r\n );\r\n if (index >= 0) {\r\n this.realTimeCopySubscriptions[index].subscription.unsubscribe();\r\n this.realTimeCopySubscriptions.splice(index, 1);\r\n }\r\n }\r\n\r\n ctrl = (key: string): AbstractControl | null => this.form().get(key);\r\n\r\n getCheckboxArray(key: string): FormArray {\r\n return this.form().get(key) as FormArray;\r\n }\r\n\r\n onCheckboxChange(event: Event, fieldKey: string, optionIndex: number) {\r\n const checkbox = event.target as HTMLInputElement;\r\n const checkboxArray = this.getCheckboxArray(fieldKey);\r\n checkboxArray.at(optionIndex).setValue(checkbox.checked);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.copyFromSubscriptions.forEach((sub) => sub.unsubscribe());\r\n this.realTimeCopySubscriptions.forEach((item) =>\r\n item.subscription.unsubscribe()\r\n );\r\n }\r\n\r\n onCancel(): void {\r\n }\r\n\r\n onUppercaseInput(event: Event, fieldType: string, key: string) {\r\n if (['email','password'].includes(fieldType)) return;\r\n \r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.toUpperCase();\r\n \r\n input.value = value;\r\n this.form().get(key)?.setValue(value, { emitEvent: false });\r\n }\r\n \r\n}\r\n","@if (form()) {\r\n<form class=\"form\" [formGroup]=\"form()\" [class.form--compact]=\"compact()\">\r\n @for (sec of sections(); track $index) {\r\n <section class=\"section\">\r\n @if (sec.title) {\r\n <h3 class=\"section-title\">{{ sec.title }}</h3>\r\n } @if (sec.description) {\r\n <p class=\"section-desc\">{{ sec.description }}</p>\r\n }\r\n\r\n <div class=\"grid\">\r\n @for (f of sec.fields; track f.key) {\r\n <div class=\"col\" [style.--col-span]=\"f.col || 6\">\r\n @if(f.label) {\r\n <label\r\n [class.label-radio]=\"f.type === 'radio'\"\r\n [class.label-checkbox]=\"f.type === 'checkbox'\"\r\n [class.label-disabled]=\"f.readonly || f.disabled\"\r\n class=\"label\"\r\n >\r\n {{ f.label }} </label\r\n >} @if (['text','number','email', 'password', 'time'].includes(f.type))\r\n {\r\n <input\r\n class=\"input\"\r\n [type]=\"f.type\"\r\n [placeholder]=\"f.placeholder\"\r\n [formControlName]=\"f.key\"\r\n [disabled]=\"f.disabled || false\"\r\n [readonly]=\"f.readonly || false\"\r\n (input)=\"onUppercaseInput($event, f.type, f.key)\"\r\n />\r\n } @if (['date', 'datetime-local'].includes(f.type)) {\r\n <lib-date-time-picker\r\n [mode]=\"getDatePickerMode(f.type)\"\r\n [placeholder]=\"\r\n f.placeholder ||\r\n (f.type === 'date'\r\n ? 'Seleccionar fecha'\r\n : 'Seleccionar fecha y hora')\r\n \"\r\n [formControlName]=\"f.key\"\r\n [minDate]=\"f.minDate || null\"\r\n [maxDate]=\"f.maxDate || null\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n />\r\n } @if (f.type === 'textarea') {\r\n <textarea\r\n class=\"input textarea\"\r\n [placeholder]=\"f.placeholder\"\r\n [formControlName]=\"f.key\"\r\n rows=\"6\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n ></textarea>\r\n }@if (f.type === 'select') {\r\n\r\n <lib-select-custom-search\r\n [options]=\"f.options ?? []\"\r\n [placeholder]=\"f.placeholder || 'Seleccionar...'\"\r\n [formControlName]=\"f.key\"\r\n [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\"\r\n />\r\n } @if (f.type === 'radio') {\r\n <div class=\"radio-group\">\r\n @for (o of f.options ?? []; track o.value) {\r\n <label class=\"radio\">\r\n {{ o.label }}\r\n <input type=\"radio\" [value]=\"o.value\" [formControlName]=\"f.key\" [readonly]=\"f.readonly || false\"\r\n [disabled]=\"f.disabled || false\" />\r\n </label>\r\n }\r\n </div>\r\n } @if (f.type === 'checkbox') {\r\n <div class=\"checkbox-group\">\r\n @for (o of f.options ?? []; track o.value; let i = $index) {\r\n <label class=\"checkbox\">\r\n {{ o.label }}\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"getCheckboxArray(f.key).at(i).value\"\r\n (change)=\"onCheckboxChange($event, f.key, i)\"\r\n />\r\n </label>\r\n }\r\n </div>\r\n } @if (f.type === 'disabled') {\r\n <label class=\"label\">{{ f.label }}</label>\r\n <input\r\n class=\"input input--disabled\"\r\n [placeholder]=\"f.placeholder || 'Automático'\"\r\n disabled\r\n />\r\n } @if (ctrl(f.key)?.touched && ctrl(f.key)?.invalid) {\r\n <div class=\"error\">\r\n @if (ctrl(f.key)?.errors?.['required']) {\r\n <span>Campo requerido</span>\r\n } @if (ctrl(f.key)?.errors?.['email']) {\r\n <span>Correo inválido</span>\r\n } @if (ctrl(f.key)?.errors?.['pattern']) {\r\n <span>\r\n @switch (f.patternType) { @case ('numbers') { Solo se permiten\r\n números } @case ('phone') { Formato de teléfono inválido } @case\r\n ('text') { Solo se permiten letras y espacios } @case ('username') {\r\n Solo se permiten letras, números, puntos y guiones bajos (no al\r\n inicio ni al final) } @case ('alphanumeric') { Solo se permiten\r\n letras y números } @default { Formato inválido } }\r\n </span>\r\n } @if (ctrl(f.key)?.errors?.['notMatching']) {\r\n <span>Las contraseñas no coinciden</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n }\r\n</form>\r\n}\r\n","import {\r\n Component,\r\n input,\r\n output,\r\n signal,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalFormStep } from '../modal-form/modal-form';\r\n\r\n@Component({\r\n selector: 'lib-wizard-form',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './wizard-form.html',\r\n styleUrl: './wizard-form.css',\r\n})\r\nexport class WizardForm {\r\n form = input<FormGroup>();\r\n currentStep = input<number>(1);\r\n steps = input<ModalFormStep[]>([]);\r\n\r\n canContinue = output<boolean>();\r\n\r\n // Devuelve la key del paso\r\n currentStepKey = computed(() => {\r\n const index = this.currentStep() - 1;\r\n return this.steps()[index]?.key ?? null;\r\n });\r\n\r\n // Devuelve el subform correspondiente\r\n currentGroup = computed(() => {\r\n const key = this.currentStepKey();\r\n return key ? (this.form()?.get(key) as FormGroup) : null;\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const group = this.currentGroup();\r\n\r\n if (!group) {\r\n this.canContinue.emit(false);\r\n return;\r\n }\r\n\r\n this.canContinue.emit(group.valid);\r\n\r\n group.statusChanges.subscribe(() => {\r\n this.canContinue.emit(group.valid);\r\n });\r\n\r\n group.valueChanges.subscribe(() => {\r\n this.canContinue.emit(group.valid);\r\n });\r\n });\r\n }\r\n\r\n currentGroupComponent = computed(() => {\r\n const index = this.currentStep() - 1;\r\n return this.steps()[index].component;\r\n });\r\n}\r\n","<ng-container>\r\n\r\n @if (currentGroup()) {\r\n <ng-container\r\n *ngComponentOutlet=\"currentGroupComponent(); inputs: { group: currentGroup() }\"\r\n ></ng-container>\r\n }\r\n\r\n</ng-container>\r\n","import PubSub from 'pubsub-js';\r\n\r\nexport const TOAST_EVENTS = {\r\n SHOW_TOAST: 'SHOW_TOAST',\r\n SHOW_TOAST_WITH_ACTION: 'SHOW_TOAST_WITH_ACTION',\r\n HIDE_TOAST: 'HIDE_TOAST',\r\n} as const;\r\n\r\nexport interface ToastData {\r\n description: string;\r\n duration?: number;\r\n buttonText?: string;\r\n action?: () => void;\r\n}\r\n\r\n\r\nexport class ToastHelper {\r\n \r\n static show(description: string, duration?: number) {\r\n PubSub.publish(TOAST_EVENTS.SHOW_TOAST, {\r\n description,\r\n duration,\r\n });\r\n }\r\n\r\n static showWithAction(\r\n description: string,\r\n buttonText: string,\r\n action: () => void,\r\n duration?: number\r\n ) {\r\n PubSub.publish(TOAST_EVENTS.SHOW_TOAST_WITH_ACTION, {\r\n description,\r\n buttonText,\r\n action,\r\n duration,\r\n });\r\n }\r\n\r\n \r\n static success(message: string, duration?: number) {\r\n this.show(`${message}`, duration);\r\n }\r\n\r\n\r\n static error(message: string, duration?: number) {\r\n this.show(`${message}`, duration || 6000); \r\n }\r\n\r\n\r\n static warning(message: string, duration?: number) {\r\n this.show(`${message}`, duration);\r\n }\r\n\r\n \r\n static info(message: string, duration?: number) {\r\n this.show(`ℹ${message}`, duration);\r\n }\r\n\r\n\r\n static hide() {\r\n PubSub.publish(TOAST_EVENTS.HIDE_TOAST);\r\n }\r\n\r\n \r\n static showUndo(\r\n message: string,\r\n undoAction: () => void,\r\n duration: number = 8000\r\n ) {\r\n this.showWithAction(message, 'Deshacer', undoAction, duration);\r\n }\r\n}\r\n","import {\r\n Component,\r\n effect,\r\n input,\r\n output,\r\n signal,\r\n Type,\r\n} from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { WizardForm } from '../wizard-form/wizard-form';\r\nimport { ToastHelper } from '../../helpers/toast-helper';\r\n\r\nexport interface ModalFormStep {\r\n key: string;\r\n label: string;\r\n component: Type<any>;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-modal-form',\r\n standalone: true,\r\n imports: [CommonModule, WizardForm],\r\n templateUrl: './modal-form.html',\r\n styleUrl: './modal-form.css',\r\n})\r\nexport class ModalForm {\r\n isFull = input<boolean>(false);\r\n title = input<string>('Formulario');\r\n subtitle = input<string | null>('');\r\n submitLabel = input<string>('Guardar');\r\n\r\n form = input<FormGroup>();\r\n steps = input<ModalFormStep[]>([]);\r\n\r\n currentStep = signal<number>(1);\r\n canContinue = signal<boolean>(false);\r\n\r\n onSubmit = output<{form: any; evidence?: File}>();\r\n onCancel = output<void>();\r\n evidenceChange = output<File>();\r\n\r\n evidenceFile = signal<File | null>(null);\r\n evidenceFileName = signal<string | null>(null);\r\n showActionsLeft = input<boolean>(false);\r\n\r\n evidenceLabel = input<string>('Cargar archivo');\r\n evidenceHelperText = input<string>('Formato admitido');\r\n evidenceAccept = input<string>('application/pdf');\r\n maxSizeMB = input<number>(25);\r\n\r\n constructor() {\r\n effect(() => {\r\n if (!this.steps().length) {\r\n this.canContinue.set(true);\r\n } else {\r\n this.currentStep.set(1);\r\n }\r\n });\r\n }\r\n\r\n nextStep() {\r\n if (this.currentStep() < this.steps().length) {\r\n this.currentStep.update(v => v + 1);\r\n }\r\n }\r\n\r\n prevStep() {\r\n if (this.currentStep() > 1) {\r\n this.currentStep.update(v => v - 1);\r\n }\r\n }\r\n\r\n submitForm() {\r\n this.onSubmit.emit({\r\n form: this.form()?.value,\r\n evidence: this.evidenceFileName() ? (this.evidenceFile() as File) : undefined\r\n });\r\n }\r\n\r\n onFileSelected(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files?.length) return;\r\n\r\n const file = input.files[0];\r\n\r\n if (!this.evidenceAccept().includes(file.type)) {\r\n ToastHelper.warning('Tipo de archivo no permitido');\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Tamaño máximo 25MB\r\n if (file.size > this.maxSizeMB() * 1024 * 1024) {\r\n ToastHelper.warning(`El archivo no puede superar los ${this.maxSizeMB}MB`);\r\n input.value = '';\r\n return;\r\n }\r\n\r\n this.evidenceFile.set(file);\r\n this.evidenceFileName.set(file.name);\r\n this.evidenceChange.emit(file);\r\n }\r\n}","<div class=\"modal-form-container\" [class.expanded]=\"isFull()\">\r\n <div class=\"header-content\">\r\n <h1>{{ title() }}</h1>\r\n <p>{{ subtitle() }}</p>\r\n </div>\r\n\r\n @if (steps() && steps().length > 1) {\r\n <div class=\"steps\">\r\n @for (step of steps(); track $index) {\r\n <div\r\n class=\"step\"\r\n [class.step-active]=\"currentStep() === $index + 1\"\r\n [class.step-completed]=\"currentStep() > $index + 1\"\r\n >\r\n @if (currentStep() > $index + 1) {\r\n <span class=\"check-icon\">✔</span>\r\n }\r\n <span>Paso {{ $index + 1 }}: {{ step.label }}</span>\r\n </div>\r\n\r\n @if ($index < steps().length - 1) {\r\n <span class=\"separator\">›</span>\r\n } }\r\n </div>\r\n }\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"body-content\">\r\n @if (!steps() || !steps().length) {\r\n <ng-content></ng-content>\r\n } @else {\r\n <!-- Render dinámico del paso actual -->\r\n <lib-wizard-form\r\n [form]=\"form()\"\r\n [currentStep]=\"currentStep()\"\r\n [steps]=\"steps()\"\r\n (canContinue)=\"canContinue.set($event)\"\r\n ></lib-wizard-form>\r\n }\r\n </div>\r\n\r\n <div class=\"actions\">\r\n @if (showActionsLeft()){\r\n <div class=\"actions-left\">\r\n <p class=\"file-type\">{{ evidenceHelperText() }}</p>\r\n <button type=\"button\" class=\"btn-outline\" (click)=\"fileInput.click()\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"upload-icon icon icon-tabler icons-tabler-outline icon-tabler-cloud-upload\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1\"\r\n />\r\n <path d=\"M9 15l3 -3l3 3\" />\r\n <path d=\"M12 12l0 9\" />\r\n </svg>\r\n <span class=\"label-button\">\r\n {{ evidenceFileName() || evidenceLabel() }}\r\n </span>\r\n </button>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n hidden\r\n [accept]=\"evidenceAccept()\"\r\n (change)=\"onFileSelected($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <div class=\"actions-right\">\r\n @if (!steps() || steps().length <= 1) {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"onCancel.emit()\">\r\n Cancelar\r\n </button>\r\n } @else if (currentStep() === 1) {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"onCancel.emit()\">\r\n Cancelar\r\n </button>\r\n } @else {\r\n <button type=\"button\" class=\"btn--ghost\" (click)=\"prevStep()\">\r\n Volver\r\n </button>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n (click)=\"!steps() || !steps().length ? submitForm() :\r\n currentStep() === steps().length ? submitForm() : nextStep()\"\r\n [disabled]=\"!canContinue()\"\r\n >\r\n {{ !steps() || !steps().length ? submitLabel() : currentStep() ===\r\n steps().length ? submitLabel() : 'Continuar' }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ReactiveFormsModule, FormGroup, FormControl, Validators } from '@angular/forms';\r\nimport { DynamicFormFields, FieldConfig, SectionConfig } from '../dynamic-form-fields/dynamic-form-fields';\r\n\r\n@Component({\r\n selector: 'lib-dialog-alert-component',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, DynamicFormFields],\r\n templateUrl: './dialog-alert.html',\r\n styleUrl: './dialog-alert.css',\r\n})\r\nexport class DialogAlertComponent implements OnInit, OnChanges {\r\n @Input() title: string = 'Mensaje';\r\n @Input() message!: string;\r\n @Input() type: 'warning' | 'error' | 'info' | 'success' = 'info';\r\n /** Acción asociada al alert (ej: 'desactivar', 'eliminar', 'anular', 'sancionar') */\r\n @Input() action?: string;\r\n /** Forzar mostrar el campo razón si se necesita */\r\n @Input() showReason: boolean = false;\r\n @Input() confirm: boolean = false;\r\n @Input() confirmLabel: string = 'Aceptar';\r\n @Output() close = new EventEmitter<boolean>();\r\n /** Emite la razón escrita cuando aplica */\r\n @Input() reasonOptions: { label: string; value: any }[] = [];\r\n @Output() confirmReason = new EventEmitter<{\r\n reason?: string;\r\n observations?: string;\r\n }>();\r\n\r\n icon = ':fuente_de_información:';\r\n\r\n // Formulario interno que pasaremos a dynamic-form-fields\r\n form: FormGroup = new FormGroup({ reason: new FormControl('') });\r\n\r\n // Secciones para dynamic-form-fields\r\n sections: SectionConfig[] = [];\r\n\r\n // Calcula si se debe mostrar el campo razón\r\n get isReasonNeeded(): boolean {\r\n const action = (this.action || '').toLowerCase();\r\n const actionsRequiringReason = ['deactivate', 'delete', 'anulate', 'sancionar', 'active'];\r\n return this.showReason || actionsRequiringReason.includes(action);\r\n }\r\n\r\n ngOnInit() {\r\n this.updateFormAndSections();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['action'] || changes['showReason'] || changes['type']) {\r\n this.updateFormAndSections();\r\n }\r\n }\r\n\r\n private updateFormAndSections() {\r\n // Preparar form y sections según si la razón es necesaria\r\n if (this.isReasonNeeded) {\r\n this.form = new FormGroup({ reason: new FormControl('', [Validators.required]), observations: new FormControl('') });\r\n const reasonSection: SectionConfig[] = [\r\n {\r\n fields: [\r\n {\r\n key: \"reason\",\r\n label: \"Razón\",\r\n type: \"select\",\r\n placeholder: \"Seleccionar\",\r\n required: true,\r\n col: 12,\r\n options: this.reasonOptions ?? [],\r\n },\r\n {\r\n key: \"observations\",\r\n label: \"Observaciones\",\r\n type: \"textarea\",\r\n placeholder: \"Escriba las observaciones...\",\r\n col: 12,\r\n }\r\n ],\r\n },\r\n ];\r\n this.sections = reasonSection;\r\n } else {\r\n this.form = new FormGroup({ reason: new FormControl('') });\r\n this.sections = [];\r\n }\r\n }\r\n\r\n onConfirm() {\r\n if (this.isReasonNeeded && !this.form.get('reason')?.value?.trim().length) {\r\n return;\r\n }\r\n \r\n const reason = this.form.get('reason')?.value;\r\n const observations = this.form.get('observations')?.value;\r\n \r\n this.confirmReason.emit({\r\n reason: reason || undefined,\r\n observations: observations || undefined,\r\n });\r\n \r\n this.close.emit(true);\r\n }\r\n\r\n onCancel() {\r\n this.close.emit(false);\r\n }\r\n}","<div class=\"modal-backdrop\">\r\n <div class=\"modal-card\" [class.modal-card-compact]=\"!isReasonNeeded\">\r\n <div class=\"modal-header\">\r\n <h2>{{ title }}</h2>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>{{ message }}</p>\r\n <lib-dynamic-form-fields [form]=\"form\" [sections]=\"sections\"></lib-dynamic-form-fields>\r\n </div>\r\n <div class=\"modal-footer\">\r\n @if (confirm) {\r\n <button class=\"btn cancel\" (click)=\"onCancel()\">Cancelar</button>\r\n <button class=\"btn confirm\" [ngClass]=\"type\" (click)=\"onConfirm()\">{{ confirmLabel }}</button>\r\n } @else {\r\n <button class=\"btn confirm\" [ngClass]=\"type\" (click)=\"onConfirm()\">{{ confirmLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nexport interface DialogItem {\r\n key: string;\r\n label: string;\r\n value: string | number | Date;\r\n expandible?: boolean;\r\n children?: DialogItem[];\r\n}\r\n\r\n@Component({\r\n selector: 'lib-dialog-confirmation',\r\n imports: [CommonModule],\r\n templateUrl: './dialog-confirmation.html',\r\n styleUrl: './dialog-confirmation.css',\r\n})\r\nexport class DialogConfirmation {\r\n @Input() title: string = 'TITULO';\r\n @Input() confirm: boolean = false;\r\n @Input() confirmLabel: string = 'Aceptar';\r\n @Input() items: DialogItem[] = [];\r\n \r\n @Output() close = new EventEmitter<boolean>();\r\n\r\n expandedIndex: number | null = null;\r\n\r\n toggle(index: number) {\r\n this.expandedIndex = this.expandedIndex === index ? null : index;\r\n }\r\n\r\n onConfirm() {\r\n console.log('confirmado');\r\n this.close.emit(true);\r\n }\r\n\r\n onCancel() {\r\n this.close.emit(false);\r\n }\r\n}\r\n","<div class=\"modal-backdrop\">\r\n <div class=\"modal-card\">\r\n <div class=\"modal-header\">\r\n <h2>{{ title }}</h2>\r\n <button class=\"close-btn\" (click)=\"onCancel()\" aria-label=\"Cerrar\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M18 6l-12 12\" />\r\n <path d=\"M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"info-container\" [class.expanded]=\"expandedIndex !== null\">\r\n @for (item of items; track item.key; let i = $index) {\r\n\r\n <div class=\"info-item\">\r\n <div\r\n class=\"info-main\"\r\n [class.info-main-expanded]=\"item.expandible\"\r\n (click)=\"item.expandible && toggle(i)\"\r\n >\r\n <span class=\"label\"\r\n >{{ item.label }} @if (item.expandible) {\r\n <span class=\"arrow\"> {{ expandedIndex === i ? '▲' : '▼' }} </span>\r\n }\r\n </span>\r\n <span class=\"value\"> {{ item.value }} </span>\r\n </div>\r\n\r\n @if (expandedIndex === i && item.children?.length) {\r\n <div class=\"info-children\">\r\n @for (child of item.children; track child.key) {\r\n <div class=\"info-item child-item\">\r\n <div class=\"info-main\">\r\n <span class=\"label\">{{ child.label }}</span>\r\n <span class=\"value\">{{ child.value }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n }\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n @if (confirm) {\r\n <button class=\"btn cancel\" (click)=\"onCancel()\">Cancelar</button>\r\n <button class=\"btn confirm\" (click)=\"onConfirm()\">\r\n {{ confirmLabel }}\r\n </button>\r\n } @else {\r\n <button class=\"btn confirm\" (click)=\"onConfirm()\">\r\n {{ confirmLabel }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-not-found-modal',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './not-found-modal.html',\r\n styleUrl: './not-found-modal.css',\r\n})\r\nexport class NotFoundModal {\r\n isVisible = input<boolean>(false);\r\n title = input<string>('Documento no encontrado');\r\n message = input<string>('No encontrado');\r\n\r\n onClose = output<void>();\r\n\r\n onOverlayClick(event: Event) {\r\n if (event.target === event.currentTarget) {\r\n this.onClose.emit();\r\n }\r\n }\r\n\r\n onAccept() {\r\n this.onClose.emit();\r\n }\r\n}\r\n","<div\r\n class=\"modal-overlay\"\r\n (click)=\"onOverlayClick($event)\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n>\r\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"modal-header\">\r\n <div class=\"icon-container\">\r\n <svg\r\n width=\"48\"\r\n height=\"48\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"error-icon\"\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ef4444\" stroke-width=\"2\" />\r\n <path\r\n d=\"M15 9l-6 6\"\r\n stroke=\"#ef4444\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M9 9l6 6\"\r\n stroke=\"#ef4444\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h2 class=\"modal-title\">{{ title() }}</h2>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <p class=\"modal-message\">{{ message() }}</p>\r\n </div>\r\n\r\n <div class=\"modal-footer\">\r\n <button\r\n class=\"btn-primary\"\r\n (click)=\"onAccept()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"'Cerrar modal de documento no encontrado'\"\r\n >\r\n Aceptar\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-loader',\r\n imports: [],\r\n templateUrl: './loader.html',\r\n styleUrl: './loader.css'\r\n})\r\nexport class Loader {\r\n\r\n}\r\n","<div class=\"loader-overlay\">\r\n <div class=\"loader\"></div>\r\n</div>\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\ninterface StepConfig {\r\n title: string;\r\n key: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProgressFormService {\r\n currentPage = signal(1);\r\n totalPages = signal(6);\r\n\r\n private stepsConfig: { [key: number]: StepConfig } = {\r\n 1: { title: 'Paso 1', key: 'step1' },\r\n 2: { title: 'Paso 2', key: 'step2' },\r\n };\r\n\r\n resetData() {\r\n this.currentPage.set(1);\r\n }\r\n\r\n getProgressText() {\r\n return `${this.currentPage()}/${this.totalPages()}`;\r\n }\r\n\r\n getCurrentPageTitle(): string {\r\n const currentPage = this.currentPage();\r\n return this.stepsConfig[currentPage]?.title || `Página ${currentPage}`;\r\n }\r\n\r\n nextPage(): boolean {\r\n const current = this.currentPage();\r\n\r\n if (current < this.totalPages()) {\r\n this.currentPage.set(current + 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n prevPage(): boolean {\r\n const current = this.currentPage();\r\n\r\n if (current > 1) {\r\n this.currentPage.set(current - 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n getProgressPercentage(): number {\r\n const current = this.currentPage();\r\n const total = this.totalPages();\r\n return Math.round((current / total) * 100);\r\n }\r\n}\r\n","import { Component, Input, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ProgressFormService } from '../../services/progress/progress-service';\r\n\r\n@Component({\r\n selector: 'lib-progress-bar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './progress-bar.html',\r\n styleUrl: './progress-bar.css',\r\n})\r\nexport class ProgressBar {\r\n constructor(public progress: ProgressFormService) {}\r\n title = input<string>('');\r\n current = input<number>(1);\r\n total = input<number>(1);\r\n\r\n get percentage() {\r\n return Math.round((this.current() / this.total()) * 100);\r\n }\r\n\r\n get text() {\r\n return `Paso ${this.current()} de ${this.total()}`;\r\n }\r\n}\r\n","<div class=\"progress-container\">\r\n <div class=\"progress-header\">\r\n <span class=\"progress-title\">{{ title() }}</span>\r\n <span class=\"progress-fraction\">{{ text }}</span>\r\n </div>\r\n\r\n <div class=\"progress-bar\">\r\n <div\r\n class=\"progress-fill\"\r\n [style.width.%]=\"percentage\"\r\n ></div>\r\n </div>\r\n</div>\r\n","import { Component, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-processing-overlay',\r\n imports: [],\r\n templateUrl: './processing-overlay.html',\r\n styleUrl: './processing-overlay.css',\r\n})\r\nexport class ProcessingOverlay {\r\n loadingText = input<string>('');\r\n}\r\n","<div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <figure>\r\n <svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M58.8943 10.1325C61.244 6.40017 66.7559 6.40017 69.1056 10.1325L74.7379 19.079C76.2827 21.5328 79.399 22.5304 82.1127 21.4398L92.0068 17.4636C96.1345 15.8048 100.594 18.9967 100.268 23.3769L99.487 33.8765C99.2728 36.7562 101.199 39.368 104.045 40.0572L114.422 42.57C118.751 43.6183 120.454 48.783 117.577 52.138L110.681 60.18C108.79 62.3857 108.79 65.6141 110.681 67.8198L117.577 75.8619C120.454 79.2169 118.751 84.3816 114.422 85.4298L104.045 87.9427C101.199 88.6319 99.2728 91.2436 99.487 94.1234L100.268 104.623C100.594 109.003 96.1345 112.195 92.0069 110.536L82.1127 106.56C79.399 105.469 76.2827 106.467 74.7379 108.921L69.1056 117.867C66.756 121.6 61.244 121.6 58.8943 117.867L53.2621 108.921C51.7173 106.467 48.6009 105.469 45.8872 106.56L35.9931 110.536C31.8655 112.195 27.4062 109.003 27.732 104.623L28.5129 94.1234C28.7271 91.2436 26.8011 88.6319 23.955 87.9427L13.5783 85.4299C9.24928 84.3816 7.546 79.2169 10.4228 75.8619L17.3186 67.8198C19.21 65.6141 19.21 62.3857 17.3186 60.18L10.4228 52.138C7.546 48.783 9.24928 43.6183 13.5783 42.57L23.955 40.0572C26.8011 39.368 28.7271 36.7562 28.5129 33.8765L27.732 23.3769C27.4062 18.9967 31.8655 15.8048 35.9931 17.4636L45.8872 21.4398C48.6009 22.5304 51.7173 21.5328 53.2621 19.079L58.8943 10.1325Z\" fill=\"#BFD100\"/>\r\n </svg> \r\n </figure>\r\n <p class=\"loading-text\">{{ loadingText() }}</p>\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, input, signal } from '@angular/core';\r\n\r\nexport interface InfoItem {\r\n label: string;\r\n value: string | boolean | null | undefined;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-info-group',\r\n imports: [CommonModule],\r\n templateUrl: './info-group.html',\r\n styleUrl: './info-group.css',\r\n})\r\nexport class InfoGroup {\r\n type = input<'success' | 'error' | 'info'>('info');\r\n showBox = input<boolean>(false)\r\n // modo info\r\n items = input<InfoItem[]>([]);\r\n title = input<string | null>(null);\r\n\r\n // modo box\r\n fullName = input<string | null>(null);\r\n typeDocument = input<string | null>(null);\r\n document = input<string | null>(null);\r\n}","@if (!showBox()) {\r\n<div class=\"info-card\">\r\n @if (title()) {\r\n <h3 class=\"info-title\">{{ title() }}</h3>\r\n }\r\n\r\n <div class=\"info-grid\">\r\n @for (item of items(); track item.label) {\r\n <div class=\"info-row\">\r\n <span class=\"info-label\">{{ item.label }}</span>\r\n <span class=\"info-value\">\r\n {{ item.value === true ? \"SI\" : item.value === false ? \"NO\" : item.value\r\n || \"-\" }}\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n} \r\n\r\n@if (showBox()) {\r\n<div class=\"person-box\" [ngClass]=\"type()\" >\r\n <span class=\"person-name\">{{ fullName() || '-' }}</span>\r\n <span class=\"divider\"></span>\r\n <span class=\"person-doc\">{{ typeDocument() }} {{ document() || '-' }}</span>\r\n</div>\r\n}\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\nexport interface Feature {\r\n icon?: string;\r\n title: string;\r\n description: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-feature-card',\r\n standalone: true,\r\n templateUrl: './feature-card.html',\r\n styleUrls: ['./feature-card.css'],\r\n})\r\nexport class FeatureCard {\r\n feature = input<Feature>();\r\n showLeading = input<boolean>(false);\r\n showTrailling = input<boolean>(false);\r\n}\r\n","<div class=\"feature-card\">\r\n @if(showLeading()){\r\n <div class=\"feature-icon-leading\">\r\n <img [src]=\"feature()?.icon\" alt=\"{{ feature()?.title }}\" />\r\n </div>\r\n }\r\n \r\n <div class=\"feature-content\">\r\n <p>{{ feature()!.title }}</p>\r\n <h3>{{ feature()!.description }}</h3>\r\n </div>\r\n\r\n @if(showTrailling()){\r\n <div class=\"feature-icon-trailling\">\r\n <img [src]=\"feature()?.icon\" alt=\"{{ feature()?.title }}\" />\r\n </div>\r\n }\r\n</div>\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, Output, AfterViewInit, OnDestroy, ViewChild, OnChanges } from '@angular/core';\r\n\r\nexport interface SideCardItem {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface SideCardSection {\r\n title?: string;\r\n items?: SideCardItem[];\r\n showSlider?: boolean;\r\n sliderLabel?: string;\r\n sliderValue?: number; \r\n sliderUnit?: string;\r\n\r\n buttonSectionLabel?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-side-card',\r\n imports: [CommonModule],\r\n templateUrl: './side-card.html',\r\n styleUrl: './side-card.css',\r\n})\r\nexport class SideCard implements AfterViewInit, OnChanges, OnDestroy {\r\n @ViewChild('SideCard', { static: true })\r\n wrapper!: ElementRef<HTMLElement>;\r\n \r\n @Input() isFloating = true;\r\n isCompact = false;\r\n // Header\r\n @Input() modeSideCard: 'create' | 'edit' | 'info' = 'create';\r\n @Input() showTypeSelector = true;\r\n selectedType: 'radial' | 'poligonal' = 'radial';\r\n @Output() btnClickIcon = new EventEmitter<void>();\r\n\r\n // Input\r\n @Input() placeholder = 'NOMBRE';\r\n @Input() value = '';\r\n\r\n @Output() valueChange = new EventEmitter<string>();\r\n @Output() typeChange = new EventEmitter<'radial' | 'poligonal'>();\r\n\r\n @Input() statusValue: 1 | 2 = 1; // backend value\r\n @Output() statusChange = new EventEmitter<1 | 2>();\r\n\r\n // Sections\r\n @Input() sections: SideCardSection[] = [];\r\n\r\n @Output() sectionButtonClick = new EventEmitter<SideCardSection>();\r\n\r\n // Slider\r\n @Input() min = 0;\r\n @Input() max = 1000;\r\n sliderLabel = 'Radio';\r\n sliderUnit = 'km';\r\n\r\n sliderValue = 0;\r\n @Output() sliderChange = new EventEmitter<number>();\r\n\r\n //actions\r\n @Input() showBtnPrimary = false;\r\n @Input() primaryButtonLabel = 'Aceptar';\r\n \r\n @Input() showBtnSecondary = false;\r\n @Input() secondaryButtonLabel = 'Cancelar';\r\n\r\n @Output() buttonClick = new EventEmitter<'primary' | 'secondary'>();\r\n\r\n private ro!: ResizeObserver;\r\n \r\n get statusLabel(): string {\r\n return this.statusValue === 1 ? 'Activo' : 'Inactivo';\r\n }\r\n\r\n get statusClass(): string {\r\n return this.statusValue === 1\r\n ? 'status-chip-active'\r\n : 'status-chip-inactive';\r\n }\r\n\r\n get sliderPercentage(): string {\r\n const max = this.max || 1000;\r\n return ((this.sliderValue / max) * 100) + '%';\r\n }\r\n\r\n // Inicializa slider cuando llegan secciones\r\n ngOnChanges() {\r\n const section = this.sections.find(s => s.showSlider);\r\n\r\n if (section) {\r\n this.sliderLabel = section.sliderLabel || 'Radio';\r\n this.sliderUnit = section.sliderUnit || 'km';\r\n this.sliderValue = section.sliderValue ?? 0;\r\n } \r\n }\r\n\r\n ngAfterViewInit() {\r\n this.ro = new ResizeObserver(entries => {\r\n const rect = entries[0].contentRect;\r\n this.updateCompact(rect.width, rect.height);\r\n });\r\n \r\n this.ro.observe(this.wrapper.nativeElement);\r\n \r\n // evaluación inicial\r\n const rect = this.wrapper.nativeElement.getBoundingClientRect();\r\n this.updateCompact(rect.width, rect.height);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.ro?.disconnect();\r\n }\r\n\r\n selectType(type: 'radial' | 'poligonal') {\r\n this.selectedType = type;\r\n this.typeChange.emit(type);\r\n }\r\n\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.value = input.value;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n focusInput(input: HTMLInputElement) {\r\n input.focus();\r\n }\r\n\r\n onSliderChange(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n this.sliderValue = Number(input.value);\r\n this.sliderChange.emit(this.sliderValue);\r\n }\r\n\r\n onButtonSectionClick(section: SideCardSection) {\r\n this.sectionButtonClick.emit(section);\r\n }\r\n\r\n onButtonClick(type: 'primary' | 'secondary') {\r\n this.buttonClick.emit(type);\r\n }\r\n\r\n changeStatusLabel() {\r\n if (this.modeSideCard !== 'edit') return;\r\n\r\n this.statusValue = this.statusValue === 1 ? 2 : 1;\r\n this.statusChange.emit(this.statusValue);\r\n }\r\n\r\n buttonClickIcon() {\r\n this.btnClickIcon.emit();\r\n }\r\n\r\n private updateCompact(width: number, height: number) {\r\n this.isCompact =\r\n width <= 299 ||\r\n height <= 420;\r\n }\r\n}\r\n","<div #SideCard class=\"side-card-wrapper\">\r\n <div class=\"side-card\" [class.floating]=\"isFloating\" [class.compact]=\"isCompact\">\r\n <div class=\"element-header\">\r\n @if (modeSideCard === 'create' && showTypeSelector) {\r\n <div class=\"button-group\">\r\n <button class=\"btn-type\" [class.active]=\"selectedType === 'radial'\" (click)=\"selectType('radial')\">\r\n Radial\r\n </button>\r\n <button class=\"btn-type\" [class.active]=\"selectedType === 'poligonal'\" (click)=\"selectType('poligonal')\">\r\n Poligonal\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"text-container\">\r\n <input #inputRef type=\"text\" class=\"input-field\" [placeholder]=\"placeholder\" [value]=\"value\"\r\n (input)=\"onInput($event)\" />\r\n @if(modeSideCard === 'create' || modeSideCard === 'edit'){\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-edit\" (click)=\"focusInput(inputRef)\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\r\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415\" />\r\n <path d=\"M16 5l3 3\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-settings\" (click)=\"buttonClickIcon()\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065\" />\r\n <path d=\"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0\" />\r\n </svg>\r\n }\r\n </div>\r\n\r\n @if(modeSideCard === 'edit' || modeSideCard === 'info'){\r\n <span #statusChip class=\"status-chip\" [ngClass]=\"statusClass\" (click)=\"changeStatusLabel()\">\r\n {{ statusLabel }}\r\n </span>\r\n }\r\n </div>\r\n @for (section of sections; track section.title) {\r\n <div class=\"element-section\">\r\n <h3>{{ section.title }}</h3>\r\n\r\n <div class=\"element-content\">\r\n @if (section.items?.length) { @for (item of section.items; track\r\n item.label) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ item.label }}</span>\r\n <span class=\"value\">{{ item.value }}</span>\r\n </div>\r\n } } @if (section.showSlider) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ sliderLabel }}</span>\r\n <span class=\"value\">{{ sliderValue }} {{ sliderUnit }}</span>\r\n </div>\r\n @if (modeSideCard !== 'info') {\r\n <input type=\"range\" class=\"slider\" [min]=\"min\" [max]=\"max\" [value]=\"sliderValue\"\r\n [style.--slider-value]=\"sliderPercentage\" (input)=\"onSliderChange($event)\" />\r\n }} @if (section.buttonSectionLabel && modeSideCard !== 'info') {\r\n <button class=\"btn-assign\" (click)=\"onButtonSectionClick(section)\">{{ section.buttonSectionLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"side-card-actions\">\r\n @if (showBtnPrimary) {\r\n <button class=\"btn-primary\" (click)=\"onButtonClick('primary')\">{{ primaryButtonLabel }}</button>\r\n }\r\n @if (showBtnSecondary) {\r\n <button class=\"btn-secondary\" (click)=\"onButtonClick('secondary')\">{{ secondaryButtonLabel }}</button>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, viewChild, ViewChild } from '@angular/core';\r\nimport { SideCardSection } from '../side-card/side-card';\r\n\r\n@Component({\r\n selector: 'lib-side-card-detail',\r\n imports: [CommonModule],\r\n templateUrl: './side-card-detail.html',\r\n styleUrl: './side-card-detail.css',\r\n})\r\nexport class SideCardDetail implements AfterViewInit, OnDestroy{\r\n @ViewChild('SideCard', { static: true })\r\n wrapper!: ElementRef<HTMLElement>;\r\n\r\n @Input() isFloating = true;\r\n isCompact = false;\r\n\r\n nowLabel = 'Ahora mismo';\r\n agoLabel = 'Hace';\r\n\r\n // Header\r\n @Input() title = 'Titulo';\r\n @Input() subtitle = 'Subtitulo'\r\n @Output() btnClickIcon = new EventEmitter<'back' | 'location' | 'message'>();\r\n\r\n @Input() statusValue: 1 | 2 = 1; // backend value\r\n @Output() statusChange = new EventEmitter<1 | 2>();\r\n\r\n // Sections\r\n @Input() sections: SideCardSection[] = [];\r\n\r\n activeTab: 'principal' | 'historial' = 'principal';\r\n @Output() tabChange = new EventEmitter<'principal' | 'historial'>();\r\n\r\n private ro!: ResizeObserver;\r\n\r\n ngAfterViewInit() {\r\n this.ro = new ResizeObserver(entries => {\r\n const rect = entries[0].contentRect;\r\n this.updateCompact(rect.width, rect.height);\r\n });\r\n \r\n this.ro.observe(this.wrapper.nativeElement);\r\n \r\n // evaluación inicial\r\n const rect = this.wrapper.nativeElement.getBoundingClientRect();\r\n this.updateCompact(rect.width, rect.height);\r\n }\r\n \r\n ngOnDestroy() {\r\n this.ro?.disconnect();\r\n }\r\n\r\n get statusLabel(): string {\r\n return this.statusValue === 1 ? 'Dentro de geocerca' : 'Fuera de geocerca';\r\n }\r\n\r\n get statusClass(): string {\r\n return this.statusValue === 1\r\n ? 'status-chip-active'\r\n : 'status-chip-inactive';\r\n }\r\n\r\n buttonClickIcon(type: 'back' | 'location' | 'message') {\r\n this.btnClickIcon.emit(type);\r\n }\r\n\r\n setTab(tab: 'principal' | 'historial') {\r\n this.activeTab = tab;\r\n this.tabChange.emit(tab);\r\n }\r\n\r\n getIndicatorLeft(): string {\r\n return this.activeTab === 'principal' ? '0%' : '50%';\r\n }\r\n\r\n isDateValue(value: any): boolean {\r\n if (!value) return false;\r\n return (\r\n typeof value === 'string' &&\r\n !isNaN(Date.parse(value))\r\n );\r\n }\r\n\r\n getRelativeTime(date: string | Date | number): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n\r\n if (isNaN(d.getTime())) return '';\r\n\r\n const diff = Math.floor((now.getTime() - d.getTime()) / 1000);\r\n\r\n if (diff < 10) return this.nowLabel;\r\n\r\n const units = [\r\n { singular: 'Segundo', plural: 'Segundos', value: 60 },\r\n { singular: 'Minuto', plural: 'Minutos', value: 60 },\r\n { singular: 'Hora', plural: 'Horas', value: 24 },\r\n { singular: 'Día', plural: 'Días', value: 7 },\r\n { singular: 'Semana', plural: 'Semanas', value: 4 },\r\n { singular: 'Mes', plural: 'Meses', value: 12 },\r\n { singular: 'Año', plural: 'Años', value: Infinity }\r\n ];\r\n\r\n let value = diff;\r\n let unit = units[0];\r\n\r\n for (let i = 0; i < units.length; i++) {\r\n if (value < units[i].value) {\r\n unit = units[i];\r\n break;\r\n }\r\n value = Math.floor(value / units[i].value);\r\n }\r\n\r\n const label = value === 1 ? unit.singular : unit.plural;\r\n\r\n return `${this.agoLabel} ${value} ${label}`;\r\n }\r\n\r\n private updateCompact(width: number, height: number) {\r\n this.isCompact =\r\n width <= 312 ||\r\n height <= 460;\r\n }\r\n}\r\n","<div #SideCard class=\"side-card-wrapper\">\r\n<div class=\"side-card\" [class.floating]=\"isFloating\" [class.compact]=\"isCompact\">\r\n <div class=\"element-header\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-arrow-left\" (click)=\"buttonClickIcon('back')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path d=\"M5 12l12 0\" />\r\n <path d=\"M5 12l4 5\" />\r\n <path d=\"M5 12l4 -5\" />\r\n </svg>\r\n\r\n <div class=\"text-container\">\r\n <span class=\"title\"> {{ title }} </span>\r\n <span class=\"subtitle\"> {{ subtitle }} </span>\r\n <div class=\"container-chip\">\r\n <span #statusChip class=\"status-chip\" [ngClass]=\"statusClass\">\r\n {{ statusLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-icons\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\"\r\n class=\"icon icon-tabler icons-tabler-filled icon-tabler-current-location\" (click)=\"buttonClickIcon('location')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M12 1a1 1 0 0 1 1 1v1.055a9.004 9.004 0 0 1 7.946 7.945h1.054a1 1 0 0 1 0 2h-1.055a9.004 9.004 0 0 1 -7.944 7.945l-.001 1.055a1 1 0 0 1 -2 0v-1.055a9.004 9.004 0 0 1 -7.945 -7.944l-1.055 -.001a1 1 0 0 1 0 -2h1.055a9.004 9.004 0 0 1 7.945 -7.945v-1.055a1 1 0 0 1 1 -1m0 4a7 7 0 1 0 0 14a7 7 0 0 0 0 -14m0 3a4 4 0 1 1 -4 4l.005 -.2a4 4 0 0 1 3.995 -3.8\" />\r\n </svg>\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-message-circle\" (click)=\"buttonClickIcon('message')\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"side-tabs\">\r\n <div class=\"tab\" [class.active]=\"activeTab === 'principal'\" (click)=\"setTab('principal')\">\r\n Principal\r\n </div>\r\n\r\n <div class=\"tab\" [class.active]=\"activeTab === 'historial'\" (click)=\"setTab('historial')\">\r\n Historial\r\n </div>\r\n\r\n <div class=\"tab-indicator\" [style.left]=\"getIndicatorLeft()\"></div>\r\n </div>\r\n\r\n @for (section of sections; track section.title) {\r\n <div class=\"element-section\">\r\n <h3>{{ section.title }}</h3>\r\n\r\n <div class=\"element-content\">\r\n @if (section.items?.length) { @for (item of section.items; track\r\n item.label) {\r\n <div class=\"element-item\">\r\n <span class=\"label\">{{ item.label }}</span>\r\n <span class=\"value\">{{ isDateValue(item.value) ? getRelativeTime(item.value) : item.value }}</span>\r\n </div>\r\n } }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';\r\n\r\nexport interface DeviceStatus {\r\n geofence: 'inside' | 'outside';\r\n wifi?: boolean;\r\n bluetooth?: boolean;\r\n gps?: boolean;\r\n signalStatus?: 0 | 1 | 2 | 3 | 4;\r\n batteryPercentage?: string;\r\n}\r\n\r\nexport interface DeviceCard {\r\n code: string;\r\n name: string;\r\n geofenceName: string;\r\n deviceInfo: string;\r\n status: DeviceStatus;\r\n lastUpdate: string | Date | number;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-devices-carousel',\r\n imports: [CommonModule],\r\n templateUrl: './devices-carousel.html',\r\n styleUrl: './devices-carousel.css',\r\n})\r\nexport class DevicesCarousel implements AfterViewInit {\r\n @Input() devices: DeviceCard[] = [];\r\n nowLabel = 'AHORA MISMO';\r\n agoLabel = 'HACE';\r\n\r\n canScrollLeft = false;\r\n canScrollRight = false;\r\n\r\n @Output() btnClickIcon = new EventEmitter<void>();\r\n\r\n @ViewChild('list', { static: false }) listRef!: ElementRef<HTMLElement>;\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.updateScrollButtons();\r\n }\r\n\r\n onScroll(el: HTMLElement) {\r\n this.updateScrollButtons(el);\r\n }\r\n\r\n updateScrollButtons(el?: HTMLElement) {\r\n const element = el ?? this.listRef?.nativeElement;\r\n if (!element) return;\r\n\r\n this.canScrollLeft = element.scrollLeft > 0;\r\n\r\n this.canScrollRight =\r\n element.scrollLeft + element.clientWidth < element.scrollWidth - 1;\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.updateScrollButtons();\r\n });\r\n }\r\n\r\n scroll(el: HTMLElement, dir: 'left' | 'right') {\r\n const amount = 300;\r\n\r\n el.scrollBy({\r\n left: dir === 'right' ? amount : -amount,\r\n behavior: 'smooth'\r\n });\r\n\r\n setTimeout(() => this.updateScrollButtons(el), 300);\r\n }\r\n\r\n getGeofenceClass(state: string) {\r\n return state === 'inside' ? 'badge-inside' : 'badge-outside';\r\n }\r\n\r\n getSignalClass(level: 0 | 1 | 2 | 3 | 4) {\r\n return 'signal-' + level;\r\n }\r\n\r\n getBatteryLevel(battery?: string): 0 | 1 | 2 | 3 | 4 {\r\n if (!battery) return 0;\r\n \r\n const value = parseInt(battery.replace('%', ''), 10);\r\n \r\n if (isNaN(value) || value <= 5) return 0;\r\n if (value <= 25) return 1;\r\n if (value <= 50) return 2;\r\n if (value <= 75) return 3;\r\n return 4;\r\n }\r\n\r\n getRelativeTime(date: string | Date | number): string {\r\n const d = new Date(date);\r\n const now = new Date();\r\n\r\n if (isNaN(d.getTime())) return 'Fecha inválida';\r\n\r\n const diff = Math.floor((now.getTime() - d.getTime()) / 1000);\r\n\r\n if (diff < 10) return this.nowLabel;\r\n\r\n const units = [\r\n { singular: 'SEGUNDO', plural: 'SEGUNDOS', value: 60 },\r\n { singular: 'MINUTO', plural: 'MINUTOS', value: 60 },\r\n { singular: 'HORA', plural: 'HORAS', value: 24 },\r\n { singular: 'DÍA', plural: 'DÍAS', value: 7 },\r\n { singular: 'SEMANA', plural: 'SEMANAS', value: 4 },\r\n { singular: 'MES', plural: 'MESES', value: 12 },\r\n { singular: 'AÑO', plural: 'AÑOS', value: Infinity }\r\n ];\r\n\r\n let value = diff;\r\n let unit = units[0];\r\n\r\n for (let i = 0; i < units.length; i++) {\r\n if (value < units[i].value) {\r\n unit = units[i];\r\n break;\r\n }\r\n value = Math.floor(value / units[i].value);\r\n }\r\n\r\n const label = value === 1 ? unit.singular : unit.plural;\r\n\r\n return `${this.agoLabel} ${value} ${label}`;\r\n }\r\n\r\n buttonClickIcon() {\r\n this.btnClickIcon.emit();\r\n }\r\n}\r\n","<div class=\"carousel-container\">\r\n <div class=\"carousel-wrapper\">\r\n\r\n @if (canScrollLeft) {\r\n <button class=\"nav left\" (click)=\"scroll(list,'left')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-left\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" stroke=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path d=\"m15 6-6 6 6 6\" />\r\n </svg>\r\n </button>\r\n }\r\n\r\n <div class=\"carousel-mask\">\r\n <div class=\"carousel-list\" #list (scroll)=\"onScroll(list)\">\r\n @for (d of devices; track d.code) {\r\n <div class=\"device-card\">\r\n <div class=\"card-header\">\r\n <span class=\"code\">{{ d.code }} - {{ d.name }}</span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"currentColor\"\r\n class=\"target icon icon-tabler icons-tabler-filled icon-tabler-current-location\"\r\n (click)=\"buttonClickIcon()\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path\r\n d=\"M12 1a1 1 0 0 1 1 1v1.055A9.004 9.004 0 0 1 20.946 11H22a1 1 0 0 1 0 2h-1.055a9.004 9.004 0 0 1-7.944 7.945L13 22a1 1 0 0 1-2 0v-1.055a9.004 9.004 0 0 1-7.945-7.944L2 13a1 1 0 0 1 0-2h1.055A9.004 9.004 0 0 1 11 3.055V2a1 1 0 0 1 1-1m0 4a7 7 0 1 0 0 14 7 7 0 0 0 0-14m0 3a4 4 0 1 1-4 4l.005-.2A4 4 0 0 1 12 8\" />\r\n </svg>\r\n </div>\r\n\r\n <span class=\"geofence\">{{ d.geofenceName }}</span>\r\n\r\n <div class=\"device-info\">\r\n <span>{{ d.deviceInfo }}</span>\r\n <div class=\"icons\">\r\n @if (d.status.wifi) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>En Línea</title>\r\n <path fill=\"#454733\"\r\n d=\"M.833 7.314 2.5 8.98c4.142-4.141 10.858-4.141 15 0l1.667-1.666C14.108 2.255 5.9 2.255.833 7.314M7.5 13.98l2.5 2.5 2.5-2.5a3.53 3.53 0 0 0-5 0m-3.333-3.333 1.666 1.667c2.3-2.3 6.034-2.3 8.334 0l1.666-1.667c-3.216-3.217-8.441-3.217-11.666 0\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>Fuera de Línea</title>\r\n <path fill=\"#454733\"\r\n d=\"m17.5 10.142 1.667-1.667C16.058 5.367 11.775 4.183 7.75 4.883l2.15 2.15a10.62 10.62 0 0 1 7.6 3.109m-1.667 1.666a8.25 8.25 0 0 0-3.1-1.941l2.517 2.516zM7.5 15.142l2.5 2.5 2.5-2.5a3.53 3.53 0 0 0-5 0m-4.658-12.8L1.667 3.517l2.541 2.541A13.1 13.1 0 0 0 .833 8.475L2.5 10.142a10.5 10.5 0 0 1 3.475-2.317l1.867 1.867a8.2 8.2 0 0 0-3.675 2.116l1.666 1.667a5.83 5.83 0 0 1 4.075-1.717l5.9 5.9 1.175-1.175z\" />\r\n </svg>\r\n } @if (getBatteryLevel(d.status.batteryPercentage) >= 4) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" fill=\"#454733\"\r\n viewBox=\"0 0 32 32\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>76-100%</title>\r\n <path\r\n d=\"M12.563 1c-.937 0-1.25.211-1.25 1.25v.937H8.5c-1.847 0-2.187.341-2.187 2.187v23.438c0 1.847.341 2.187 2.187 2.187h15c1.847 0 2.187-.341 2.187-2.187V5.374c0-1.847-.341-2.187-2.187-2.187h-2.813V2.25c0-1.038-.312-1.25-1.25-1.25zM8.5 7.563c0-2.5-.312-2.187 2.187-2.187h10.625c2.5 0 2.187-.312 2.187 2.187v19.063c0 2.5.312 2.187-2.187 2.187H10.687c-2.5 0-2.187.312-2.187-2.187zm1.562-1.25h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625V6.938c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625\" />\r\n </g>\r\n </svg>\r\n } @else if (getBatteryLevel(d.status.batteryPercentage) == 3) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" fill=\"#454733\"\r\n viewBox=\"0 0 32 32\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>51-75%</title>\r\n <path\r\n d=\"M12.563 1c-.937 0-1.25.211-1.25 1.25v.937H8.5c-1.847 0-2.187.341-2.187 2.187v23.438c0 1.847.341 2.187 2.187 2.187h15c1.847 0 2.187-.341 2.187-2.187V5.374c0-1.847-.341-2.187-2.187-2.187h-2.813V2.25c0-1.038-.312-1.25-1.25-1.25zM8.5 7.563c0-2.5-.312-2.187 2.187-2.187h10.625c2.5 0 2.187-.312 2.187 2.187v19.063c0 2.5.312 2.187-2.187 2.187H10.687c-2.5 0-2.187.312-2.187-2.187zm1.562 4.375h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625\" />\r\n </g>\r\n </svg>\r\n } @else if (getBatteryLevel(d.status.batteryPercentage) == 2) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" fill=\"#454733\"\r\n viewBox=\"0 0 32 32\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>21-50%</title>\r\n <path\r\n d=\"M12.563 1c-.937 0-1.25.211-1.25 1.25v.937H8.5c-1.847 0-2.187.341-2.187 2.187v23.438c0 1.847.341 2.187 2.187 2.187h15c1.847 0 2.187-.341 2.187-2.187V5.374c0-1.847-.341-2.187-2.187-2.187h-2.813V2.25c0-1.038-.312-1.25-1.25-1.25zM8.5 7.563c0-2.5-.312-2.187 2.187-2.187h10.625c2.5 0 2.187-.312 2.187 2.187v19.063c0 2.5.312 2.187-2.187 2.187H10.687c-2.5 0-2.187.312-2.187-2.187zm1.562 10h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625m0 5.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625\" />\r\n </g>\r\n </svg>\r\n } @else if (getBatteryLevel(d.status.batteryPercentage) == 1) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" fill=\"#454733\"\r\n viewBox=\"0 0 32 32\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>1-20%</title>\r\n <path\r\n d=\"M12.563 1c-.937 0-1.25.211-1.25 1.25v.937H8.5c-1.847 0-2.187.341-2.187 2.187v23.438c0 1.847.341 2.187 2.187 2.187h15c1.847 0 2.187-.341 2.187-2.187V5.374c0-1.847-.341-2.187-2.187-2.187h-2.813V2.25c0-1.038-.312-1.25-1.25-1.25zM8.5 7.563c0-2.5-.312-2.187 2.187-2.187h10.625c2.5 0 2.187-.312 2.187 2.187v19.063c0 2.5.312 2.187-2.187 2.187H10.687c-2.5 0-2.187.312-2.187-2.187zm1.562 15.625h11.875c.345 0 .625.28.625.625v3.438c0 .345-.28.625-.625.625H10.062a.625.625 0 0 1-.625-.625v-3.438c0-.345.28-.625.625-.625\" />\r\n </g>\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"19\" fill=\"#454733\"\r\n viewBox=\"0 0 32 32\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>0%</title>\r\n <path\r\n d=\"M12.563 1c-.937 0-1.25.211-1.25 1.25v.937H8.5c-1.847 0-2.187.341-2.187 2.187v23.438c0 1.847.341 2.187 2.187 2.187h15c1.847 0 2.187-.341 2.187-2.187V5.374c0-1.847-.341-2.187-2.187-2.187h-2.813V2.25c0-1.038-.312-1.25-1.25-1.25zM8.5 7.563c0-2.5-.312-2.187 2.187-2.187h10.625c2.5 0 2.187-.312 2.187 2.187v19.063c0 2.5.312 2.187-2.187 2.187H10.687c-2.5 0-2.187.312-2.187-2.187z\" />\r\n </g>\r\n </svg>\r\n }\r\n @if (d.status.signalStatus! >= 4) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>Exelente</title>\r\n <path fill=\"#454733\" d=\"M1.667 18.333h16.666V1.667z\" />\r\n </svg>\r\n } @else if (d.status.signalStatus! == 3) { <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" fill=\"#000\" viewBox=\"0 0 512 512\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>Buena</title>\r\n <g id=\"Page-1\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"none\" stroke-width=\"1\">\r\n <g id=\"drop\" fill=\"#454733\" transform=\"translate(42.667 85.333)\">\r\n <path id=\"Combined-Shape\"\r\n d=\"M426.667 0v341.333H0zM384 88.747l-85.334 68.266v141.653H384z\" />\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n } @else if (d.status.signalStatus! == 2) { <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" fill=\"#000\" viewBox=\"0 0 512 512\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>Regular</title>\r\n <g id=\"Page-1\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"none\" stroke-width=\"1\">\r\n <g id=\"drop\" fill=\"#454733\" transform=\"translate(42.667 85.333)\">\r\n <path id=\"Combined-Shape\"\r\n d=\"M426.667 0v341.333H0zM384 88.747 213.333 225.28v73.386H384z\" />\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n } @else if (d.status.signalStatus! == 1) { <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" fill=\"#000\" viewBox=\"0 0 512 512\">\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <title>Mala</title>\r\n <g id=\"Page-1\" fill=\"none\" fill-rule=\"evenodd\" stroke=\"none\" stroke-width=\"1\">\r\n <g id=\"drop\" fill=\"#454733\" transform=\"translate(42.667 85.333)\">\r\n <path id=\"Combined-Shape\"\r\n d=\"M426.667 0v341.333H0zM384 88.747 170.666 259.413v39.253H384z\" />\r\n </g>\r\n </g>\r\n </g>\r\n </svg>\r\n } @else { <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>Sin Señal</title>\r\n <path fill=\"#454733\" d=\"M1.667 18.333h16.666V1.667zm15-1.666H5.692L16.667 5.692z\" />\r\n </svg>\r\n }\r\n @if (d.status.bluetooth) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>Conectado</title>\r\n <path fill=\"#454733\"\r\n d=\"m15.296 6.425-4.758-4.758h-.834v6.325L5.88 4.167 4.704 5.342 9.363 10l-4.659 4.658 1.175 1.175 3.825-3.825v6.325h.834l4.758-4.758L11.713 10zM11.37 4.858l1.567 1.567-1.567 1.567zm1.567 8.717-1.567 1.567v-3.134z\" />\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <title>Desconectado</title>\r\n <path fill=\"#454733\"\r\n d=\"M10.833 4.858 12.4 6.425l-1.333 1.333 1.175 1.175 2.516-2.516L10 1.667h-.833v4.191l1.666 1.667zM4.508 3.333 3.333 4.508 8.825 10l-4.658 4.658 1.175 1.175 3.825-3.825v6.325H10l3.575-3.575 1.917 1.909 1.175-1.175zm6.325 11.809v-3.134l1.567 1.567z\" />\r\n </svg>\r\n }\r\n @if (d.status.gps) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <g clip-path=\"url(#clip0_3_9268)\">\r\n <title>Localizado</title>\r\n <path fill=\"#454733\"\r\n d=\"M10 6.667a3.332 3.332 0 1 0 0 6.666 3.332 3.332 0 1 0 0-6.666m7.45 2.5a7.495 7.495 0 0 0-6.617-6.617V.833H9.167V2.55A7.495 7.495 0 0 0 2.55 9.167H.833v1.666H2.55a7.495 7.495 0 0 0 6.617 6.617v1.717h1.666V17.45a7.495 7.495 0 0 0 6.617-6.617h1.717V9.167zM10 15.833A5.83 5.83 0 0 1 4.167 10 5.83 5.83 0 0 1 10 4.167 5.83 5.83 0 0 1 15.833 10 5.83 5.83 0 0 1 10 15.833\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3_9268\">\r\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n } @else {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\"\r\n viewBox=\"0 0 20 20\">\r\n <g clip-path=\"url(#clip0_3_9268)\">\r\n <title>No Localizado</title>\r\n <path fill=\"#454733\"\r\n d=\"M17.45 9.167a7.495 7.495 0 0 0-6.617-6.617V.833H9.167V2.55a7.4 7.4 0 0 0-2.309.65l1.275 1.275a5.83 5.83 0 0 1 7.392 7.392l1.275 1.275a7.4 7.4 0 0 0 .65-2.309h1.717V9.167zM2.5 3.558l1.7 1.7a7.5 7.5 0 0 0-1.65 3.909H.833v1.666H2.55a7.495 7.495 0 0 0 6.617 6.617v1.717h1.666V17.45a7.5 7.5 0 0 0 3.909-1.65l1.7 1.7 1.175-1.175L3.675 2.383zm11.058 11.059a5.829 5.829 0 0 1-8.175-8.175z\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3_9268\">\r\n <path fill=\"#fff\" d=\"M0 0h20v20H0z\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <span class=\"badge\" [ngClass]=\"getGeofenceClass(d.status.geofence)\">\r\n {{ d.status.geofence === 'inside' ? 'DENTRO DE GEOCERCA' : 'FUERA DE GEOCERCA' }}\r\n </span>\r\n\r\n <span class=\"badge update\">{{ getRelativeTime(d.lastUpdate) }}</span>\r\n </div>\r\n\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (canScrollRight) {\r\n <button class=\"nav right\" (click)=\"scroll(list,'right')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-right\" viewBox=\"0 0 24 24\">\r\n <path fill=\"none\" stroke=\"none\" d=\"M0 0h24v24H0z\" />\r\n <path d=\"m9 6 6 6-6 6\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n\r\n</div>","import { Component, input, output, signal } from '@angular/core';\r\nimport { DateFilterSelection, FilterItem, FilterType, SelectedDatesMap } from '../../interfaces/filters';\r\nimport { InputNumberFilter } from '../input-number-filter/input-number-filter';\r\nimport { InputTextFilter } from '../input-text-filter/input-text-filter';\r\nimport { InputSelectFilter } from '../input-select-filter/input-select-filter';\r\nimport { DateTimeFilter } from '../date-time-filter/date-time-filter';\r\n\r\nexport interface TitleFilterConfig {\r\n type: FilterType;\r\n filters: FilterItem[];\r\n}\r\n\r\ntype FilterButtonMode = 'toggle' | 'action';\r\n\r\n@Component({\r\n selector: 'lib-title-filters',\r\n imports: [InputNumberFilter, InputTextFilter, InputSelectFilter, DateTimeFilter],\r\n templateUrl: './title-filters.html',\r\n styleUrl: './title-filters.css',\r\n})\r\nexport class TitleFilters {\r\n showFilters = signal<boolean>(false);\r\n\r\n title = input<string>('Listado');\r\n filtersConfig = input<TitleFilterConfig[]>([]);\r\n\r\n filtersChange = output<Record<string, string | number | Date | null>>();\r\n\r\n applyFilters = output<void>();\r\n\r\n clearFilterTrigger = signal(0);\r\n\r\n selectedDates = signal<SelectedDatesMap>({});\r\n selectedTextFilters = signal<Record<string, string>>({});\r\n\r\n buttonMode = input<FilterButtonMode>('toggle');\r\n filterButtonClicked = output<void>();\r\n\r\n onFilterButtonClick() {\r\n if (this.buttonMode() === 'toggle') {\r\n this.toggleFilters();\r\n } else {\r\n this.filterButtonClicked.emit();\r\n }\r\n } \r\n\r\n toggleFilters(): void {\r\n this.showFilters.update((v) => !v);\r\n }\r\n \r\n clearAllFilters(): void {\r\n this.selectedDates.set({});\r\n this.selectedTextFilters.set({});\r\n this.clearFilterTrigger.update(v => v + 1);\r\n }\r\n\r\n onApplyFilters(): void {\r\n this.applyFilters.emit();\r\n }\r\n\r\n onDateSelected(event: DateFilterSelection): void {\r\n this.selectedDates.update((current) => ({\r\n ...current,\r\n [event.filter]: event.value,\r\n }));\r\n }\r\n\r\n onFilterSelected(event: { filter: string; value: string }): void {\r\n this.selectedTextFilters.update((current) => ({\r\n ...current,\r\n [event.filter]: event.value,\r\n }));\r\n }\r\n}\r\n","<div class=\"header-container-table\">\r\n <div class=\"filters-dashboard-table\">\r\n <div class=\"title-table\">{{ title() }}</div>\r\n\r\n @if (buttonMode() === 'toggle') {\r\n <div class=\"button-small-primary\" (click)=\"toggleFilters()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\r\n class=\"icon icon-tabler icons-tabler-outline icon-tabler-filter\">\r\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\r\n <path\r\n d=\"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z\" />\r\n </svg>\r\n <div class=\"label\">Filtros</div>\r\n </div>\r\n }\r\n @if (buttonMode() === 'action') {\r\n <div class=\"button-small-primary\" (click)=\"onFilterButtonClick()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" fill=\"none\" viewBox=\"0 0 20 20\">\r\n <path fill=\"#fff\"\r\n d=\"M10.85 16.608v1.684a8.3 8.3 0 0 0 4.433-1.842L14.1 15.258a6.6 6.6 0 0 1-3.25 1.35M3.358 10c0-3.375 2.525-6.175 5.792-6.608V1.708C4.958 2.15 1.692 5.7 1.692 10s3.266 7.85 7.458 8.292v-1.684C5.883 16.175 3.358 13.375 3.358 10m13.267-.833h1.683a8.3 8.3 0 0 0-1.841-4.434l-1.192 1.192a6.56 6.56 0 0 1 1.35 3.242M15.283 3.55a8.3 8.3 0 0 0-4.433-1.842v1.684a6.6 6.6 0 0 1 3.25 1.35zm-.008 10.533 1.192 1.184a8.3 8.3 0 0 0 1.841-4.434h-1.683a6.6 6.6 0 0 1-1.35 3.25\" />\r\n <path fill=\"#fff\"\r\n d=\"M13.333 9.25c0-2.075-1.583-3.417-3.333-3.417S6.667 7.175 6.667 9.25c0 1.383 1.108 3.025 3.333 4.917 2.225-1.892 3.333-3.534 3.333-4.917M10 10a.893.893 0 0 1 0-1.783A.893.893 0 0 1 10 10\" />\r\n </svg>\r\n <div class=\"label\">Ir al Mapa</div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showFilters()) {\r\n <div class=\"filters-container\">\r\n <div class=\"date-picker-wrapper\">\r\n\r\n @for (config of filtersConfig(); track $index) {\r\n @switch (config.type) {\r\n @case ('text') {\r\n <lib-input-text-filter [filters]=\"config.filters\" [clearTrigger]=\"clearFilterTrigger()\"\r\n (filterSelected)=\"onFilterSelected($event)\" />\r\n }\r\n @case ('number') {\r\n <lib-input-number-filter [filters]=\"config.filters\" [clearTrigger]=\"clearFilterTrigger()\"\r\n (filterSelected)=\"onFilterSelected($event)\" />\r\n }\r\n @case ('select') {\r\n <lib-input-select-filter [filters]=\"config.filters\" [clearTrigger]=\"clearFilterTrigger()\"\r\n (filterSelected)=\"onFilterSelected($event)\" />\r\n }\r\n @case ('date') {\r\n <lib-date-time-filter [filters]=\"config.filters\" [clearTrigger]=\"clearFilterTrigger()\"\r\n (dateSelected)=\"onDateSelected($event)\" />\r\n }\r\n }\r\n }\r\n\r\n <div class=\"actions\">\r\n <div class=\"button-small-primary\" (click)=\"onApplyFilters()\">\r\n <div class=\"label\">Aplicar Filtros</div>\r\n </div>\r\n\r\n <div class=\"button-text\" (click)=\"clearAllFilters()\">\r\n Borrar Filtros\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n</div>","// src/app/components/public-api.ts\r\n\r\n// Exportar el componente\r\n\r\nexport * from './lib/components/pagination/pagination';\r\nexport * from './lib/components/table/table';\r\nexport * from './lib/interfaces/filters';\r\n\r\nexport * from './lib/components/date-time-picker/date-time-picker';\r\nexport * from './lib/components/date-time-filter/date-time-filter';\r\nexport * from './lib/components/input-number-filter/input-number-filter';\r\nexport * from './lib/components/input-select-filter/input-select-filter';\r\nexport * from './lib/components/input-text-filter/input-text-filter';\r\n\r\nexport * from './lib/components/input/input';\r\nexport * from './lib/components/select-custom-search/select-custom-search';\r\nexport * from './lib/components/dynamic-form-fields/dynamic-form-fields';\r\nexport * from './lib/components/wizard-form/wizard-form';\r\nexport * from './lib/components/modal-form/modal-form';\r\n\r\nexport * from './lib/components/dialog-alert/dialog-alert';\r\nexport * from './lib/components/dialog-confirmation/dialog-confirmation';\r\n\r\nexport * from './lib/helpers/toast-helper';\r\n\r\nexport * from './lib/components/not-found-modal/not-found-modal';\r\n\r\nexport * from './lib/components/loader/loader';\r\nexport * from './lib/components/progress-bar/progress-bar';\r\nexport * from './lib/services/progress/progress-service';\r\nexport * from './lib/components/processing-overlay/processing-overlay';\r\n\r\nexport * from './lib/components/info-group/info-group'\r\nexport * from './lib/components/feature-card/feature-card'\r\n\r\nexport * from './lib/components/side-card/side-card'\r\nexport * from './lib/components/side-card-detail/side-card-detail'\r\nexport * from './lib/components/devices-carousel/devices-carousel'\r\n\r\nexport * from './lib/components/title-filters/title-filters'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","Input","i1.ProgressFormService"],"mappings":"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"}
|