@up_si_vale/sivale-componentes-angular 1.0.2 → 1.0.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up_si_vale-sivale-componentes-angular.mjs","sources":["../../src/lib/tokens/asset-base-url.token.ts","../../src/lib/services/snackbar.service.ts","../../src/lib/directives/asset-source.directive.ts","../../src/lib/directives/icon-source.directive.ts","../../src/lib/directives/only-number.directive.ts","../../src/lib/directives/only-letters.directive.ts","../../src/lib/directives/rfc.directive.ts","../../src/lib/directives/no-leading-space.directive.ts","../../src/lib/directives/tooltip.directive.ts","../../src/lib/atoms/button/button.component.ts","../../src/lib/atoms/button/button.component.html","../../src/lib/atoms/input/input.component.ts","../../src/lib/atoms/textarea/textarea.component.ts","../../src/lib/atoms/checkbox/checkbox.component.ts","../../src/lib/atoms/radio/radio.component.ts","../../src/lib/atoms/date-picker/date-picker.component.ts","../../src/lib/atoms/date-picker/date-picker.component.html","../../src/lib/atoms/loader/loader.component.ts","../../src/lib/organisms/sidebar/sidebar-icon.component.ts","../../src/lib/organisms/sidebar/sidebar.component.ts","../../src/lib/organisms/sidebar/sidebar.component.html","../../src/lib/molecules/option/option.component.ts","../../src/lib/molecules/select/select.component.ts","../../src/lib/molecules/multiselect/multiselect.component.ts","../../src/lib/molecules/phone-input/phone-input.component.ts","../../src/lib/molecules/copy-input/copy-input.component.ts","../../src/lib/molecules/copy-input/copy-input.component.html","../../src/lib/molecules/snackbar/snackbar.component.ts","../../src/lib/molecules/alert/alert.component.ts","../../src/lib/molecules/alert/alert.component.html","../../src/public-api.ts","../../src/up_si_vale-sivale-componentes-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Base URL para los assets remotos del microfrontend (íconos, imágenes).\n * El consumidor debe proveerlo, normalmente con el valor de `environment.mfAssetsUrl`.\n */\nexport const ASSET_BASE_URL = new InjectionToken<string>('ASSET_BASE_URL', {\n providedIn: 'root',\n factory: () => ''\n});\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { SnackbarConfig, SnackbarData, SnackbarPosition } from '../models/snackbar.models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SnackbarService {\n private snackbarSubject = new Subject<SnackbarData>();\n public snackbar$ = this.snackbarSubject.asObservable();\n\n private dismissSubject = new Subject<string>();\n public dismiss$ = this.dismissSubject.asObservable();\n\n private snackbarIdCounter = 0;\n\n constructor() {\n }\n\n /**\n * Show success snackbar\n */\n success(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'success',\n duration,\n position\n });\n }\n\n /**\n * Show error snackbar\n */\n error(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'error',\n duration,\n position\n });\n }\n\n /**\n * Show warning snackbar\n */\n warning(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'warning',\n duration,\n position\n });\n }\n\n /**\n * Show info snackbar\n */\n info(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'info',\n duration,\n position\n });\n }\n\n /**\n * Show snackbar with custom configuration\n */\n show(config: SnackbarConfig): void {\n const id = `snackbar-${++this.snackbarIdCounter}`;\n const snackbarData: SnackbarData = {\n ...config,\n id,\n duration: config.duration ?? 5000,\n position: config.position ?? 'top-right'\n };\n\n this.snackbarSubject.next(snackbarData);\n\n // Auto dismiss after duration\n if (snackbarData.duration && snackbarData.duration > 0) {\n setTimeout(() => {\n this.dismiss(id);\n }, snackbarData.duration);\n }\n }\n\n /**\n * Dismiss specific snackbar by id\n */\n dismiss(id: string): void {\n this.dismissSubject.next(id);\n }\n\n /**\n * Dismiss all snackbars\n */\n dismissAll(): void {\n this.dismissSubject.next('all');\n }\n}\n","import { Directive, Input, ElementRef, OnInit, OnChanges, AfterViewInit, Inject, Optional } from '@angular/core';\nimport { ASSET_BASE_URL } from '../tokens/asset-base-url.token';\n\nexport type AssetSource = 'mf' | 'main';\n\n@Directive({\n selector: '[assetSource]',\n standalone: true\n})\nexport class AssetSourceDirective implements OnInit, OnChanges, AfterViewInit {\n @Input() assetSource: AssetSource = 'mf';\n @Input() assetPath?: string;\n\n private originalSrc: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLImageElement>,\n @Optional() @Inject(ASSET_BASE_URL) private assetBaseUrl: string | null\n ) {}\n\n ngOnInit() {\n this.captureOriginalSrc();\n }\n\n ngAfterViewInit() {\n this.updateSrc();\n }\n\n ngOnChanges() {\n this.updateSrc();\n }\n\n private captureOriginalSrc() {\n if (this.el.nativeElement.tagName === 'IMG') {\n this.originalSrc = this.el.nativeElement.getAttribute('src');\n }\n }\n\n private updateSrc() {\n const assetPath = this.assetPath || this.originalSrc;\n\n if (!assetPath) {\n return;\n }\n\n const baseUrl = this.getBaseUrl();\n const fullPath = `${baseUrl}/${assetPath}`;\n\n if (this.el.nativeElement.tagName === 'IMG') {\n this.el.nativeElement.src = fullPath;\n }\n }\n\n private getBaseUrl(): string {\n switch (this.assetSource) {\n case 'mf':\n return this.assetBaseUrl ?? '';\n case 'main':\n return '/assets';\n default:\n return this.assetBaseUrl ?? '';\n }\n }\n}\n","import { Directive, Input, ElementRef, OnInit, OnChanges, AfterViewInit, Inject, Optional } from '@angular/core';\nimport { ASSET_BASE_URL } from '../tokens/asset-base-url.token';\n\nexport type IconName =\n 'user'\n | 'mail'\n | 'build'\n | 'map-pin'\n | 'money'\n | 'card'\n | 'nav-arrow-up'\n | 'nav-arrow-down'\n | 'car'\n | 'trash'\n | 'hand-card'\n | 'help-outlined'\n | 'edit'\n | 'shopping-cart';\n\n@Directive({\n selector: 'i[iconName]',\n standalone: true\n})\nexport class IconSourceDirective implements OnInit, OnChanges, AfterViewInit {\n @Input() iconName!: IconName;\n @Input() assetSource: 'mf' | 'main' = 'mf';\n\n constructor(\n private el: ElementRef<HTMLElement>,\n @Optional() @Inject(ASSET_BASE_URL) private assetBaseUrl: string | null\n ) {\n }\n\n ngOnInit() {\n this.addIconClass();\n }\n\n ngAfterViewInit() {\n this.setIconUrl();\n }\n\n ngOnChanges() {\n this.setIconUrl();\n }\n\n private addIconClass() {\n if (this.iconName) {\n this.el.nativeElement.classList.add(`icon-${this.iconName}`);\n }\n }\n\n private setIconUrl() {\n if (!this.iconName) {\n return;\n }\n\n const baseUrl = this.getBaseUrl();\n const iconUrl = `${baseUrl}/icons/${this.iconName}.svg`;\n\n this.el.nativeElement.style.maskImage = `url('${iconUrl}')`;\n this.el.nativeElement.style.webkitMaskImage = `url('${iconUrl}')`;\n }\n\n private getBaseUrl(): string {\n switch (this.assetSource) {\n case 'mf':\n return this.assetBaseUrl ?? '';\n case 'main':\n return '/assets';\n default:\n return this.assetBaseUrl ?? '';\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[onlyNumber]',\n standalone: true\n})\n\nexport class OnlyNumberDirective {\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value = event.target.value;\n event.target.value = value.replace(/\\D/g, '');\n }\n\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[onlyLetters]',\n standalone: true\n})\n\nexport class OnlyLettersDirective {\n\n private regex = /^[A-Za-zÁÉÍÓÚÜÑáéíóúüñ' -]*$/;\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value: string = event.target.value;\n\n event.target.value = value\n .split('')\n .filter(char => this.regex.test(char))\n .join('');\n }\n}\n","import { Directive, HostListener, Input, Optional, Self } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[rfcValidator]',\n standalone: true\n})\nexport class RfcDirective {\n\n @Input() tipoContribuyente: string | null = null;\n\n constructor(@Optional() @Self() private ngControl: NgControl | null) {\n }\n\n // Función para obtener el límite según el tipo de contribuyente\n private getMaxLength(): number {\n if (this.tipoContribuyente === 'fisica') return 13;\n if (this.tipoContribuyente === 'moral') return 12;\n return 13; // Default por si no llega el valor\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Solo letras y números\n value = value.replace(/[^a-zA-Z0-9]/g, '');\n\n // Mayúsculas\n value = value.toUpperCase();\n\n // Aplicar límite dinámico\n const max = this.getMaxLength();\n if (value.length > max) {\n value = value.substring(0, max);\n }\n\n this.ngControl?.control?.setValue(value, { emitEvent: false });\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n const pasted = event.clipboardData?.getData('text') || '';\n const max = this.getMaxLength();\n\n // Bloquear pegado con caracteres inválidos\n if (/[^a-zA-Z0-9]/.test(pasted)) {\n event.preventDefault();\n return;\n }\n\n // Bloquear pegado si excede el máximo\n if (pasted.length > max) {\n event.preventDefault();\n }\n }\n}\n\n\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[noLeadingSpace]',\n standalone: true\n})\nexport class NoLeadingSpaceDirective {\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value = event.target.value;\n\n // Elimina espacios al inicio\n if (value.startsWith(' ')) {\n event.target.value = value.trimStart();\n }\n }\n}\n","import {\n Directive,\n Input,\n ElementRef,\n HostListener,\n Renderer2,\n OnDestroy,\n HostBinding\n} from '@angular/core';\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'auto';\n\n@Directive({\n selector: '[appTooltip]',\n standalone: true\n})\nexport class TooltipDirective implements OnDestroy {\n @Input('appTooltip') tooltipText = '';\n @Input() tooltipPosition: TooltipPosition = 'auto';\n @Input() tooltipDelay = 300;\n @Input() tooltipMaxWidth = 280;\n @Input() tooltipClass = '';\n\n @HostBinding('style.cursor') cursor = 'help';\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n }\n\n this.showTimeout = window.setTimeout(() => {\n this.showTooltip();\n }, this.tooltipDelay);\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = undefined;\n }\n\n this.hideTimeout = window.setTimeout(() => {\n this.hideTooltip();\n }, 100);\n }\n\n @HostListener('click')\n onClick(): void {\n // Allow click events to propagate\n }\n\n private showTooltip(): void {\n if (!this.tooltipText || this.tooltipElement) {\n return;\n }\n\n // Create tooltip element\n this.tooltipElement = this.renderer.createElement('div');\n this.renderer.addClass(this.tooltipElement, 'app-tooltip');\n\n if (this.tooltipClass) {\n this.renderer.addClass(this.tooltipElement, this.tooltipClass);\n }\n\n // Create tooltip content\n const tooltipContent = this.renderer.createElement('div');\n this.renderer.addClass(tooltipContent, 'app-tooltip-content');\n this.renderer.setStyle(tooltipContent, 'max-width', `${this.tooltipMaxWidth}px`);\n\n const textNode = this.renderer.createText(this.tooltipText);\n this.renderer.appendChild(tooltipContent, textNode);\n this.renderer.appendChild(this.tooltipElement, tooltipContent);\n\n // Create arrow element\n const arrow = this.renderer.createElement('div');\n this.renderer.addClass(arrow, 'app-tooltip-arrow');\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n // Add to body\n this.renderer.appendChild(document.body, this.tooltipElement);\n\n // Position tooltip\n this.positionTooltip();\n\n // Trigger animation\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.addClass(this.tooltipElement, 'app-tooltip-show');\n }\n });\n }\n\n private hideTooltip(): void {\n if (!this.tooltipElement) {\n return;\n }\n\n this.renderer.removeClass(this.tooltipElement, 'app-tooltip-show');\n\n setTimeout(() => {\n if (this.tooltipElement) {\n this.renderer.removeChild(document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }, 200);\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) {\n return;\n }\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const scrollX = window.scrollX || window.pageXOffset;\n const scrollY = window.scrollY || window.pageYOffset;\n const gap = 16; // Space between element and tooltip\n\n // Calculate available space in each direction\n const spaceTop = hostRect.top;\n const spaceBottom = window.innerHeight - hostRect.bottom;\n const spaceLeft = hostRect.left;\n const spaceRight = window.innerWidth - hostRect.right;\n\n let position = this.tooltipPosition;\n let top = 0;\n let left = 0;\n\n // Auto-detect best position\n if (position === 'auto') {\n if (spaceTop >= tooltipRect.height + gap) {\n position = 'top';\n } else if (spaceBottom >= tooltipRect.height + gap) {\n position = 'bottom';\n } else if (spaceRight >= tooltipRect.width + gap) {\n position = 'right';\n } else if (spaceLeft >= tooltipRect.width + gap) {\n position = 'left';\n } else {\n // Default to top if no space is sufficient\n position = 'top';\n }\n }\n\n // Calculate position based on detected/specified position\n switch (position) {\n case 'top':\n top = hostRect.top + scrollY - tooltipRect.height - gap;\n left = hostRect.left + scrollX + (hostRect.width / 2) - (tooltipRect.width / 2);\n break;\n\n case 'bottom':\n top = hostRect.bottom + scrollY + gap;\n left = hostRect.left + scrollX + (hostRect.width / 2) - (tooltipRect.width / 2);\n break;\n\n case 'left':\n top = hostRect.top + scrollY + (hostRect.height / 2) - (tooltipRect.height / 2);\n left = hostRect.left + scrollX - tooltipRect.width - gap;\n break;\n\n case 'right':\n top = hostRect.top + scrollY + (hostRect.height / 2) - (tooltipRect.height / 2);\n left = hostRect.right + scrollX + gap;\n break;\n }\n\n // Adjust horizontal position to keep tooltip within viewport\n if (position === 'top' || position === 'bottom') {\n const minLeft = scrollX + 10;\n const maxLeft = scrollX + window.innerWidth - tooltipRect.width - 10;\n left = Math.max(minLeft, Math.min(left, maxLeft));\n }\n\n // Adjust vertical position to keep tooltip within viewport\n if (position === 'left' || position === 'right') {\n const minTop = scrollY + 10;\n const maxTop = scrollY + window.innerHeight - tooltipRect.height - 10;\n top = Math.max(minTop, Math.min(top, maxTop));\n }\n\n // Apply position\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n\n // Add position class for arrow styling\n this.renderer.addClass(this.tooltipElement, `app-tooltip-${position}`);\n }\n\n ngOnDestroy(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n this.hideTooltip();\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success';\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'medium';\n @Input() type: ButtonType = 'button';\n @Input() disabled: boolean = false;\n @Input() loading: boolean = false;\n @Input() fullWidth: boolean = false;\n @Input() id?: string;\n @Input() ariaLabel?: string;\n\n @Output() onClick = new EventEmitter<MouseEvent>();\n\n get buttonClasses(): string {\n return [\n 'svu-btn',\n `svu-btn--${this.variant}`,\n `svu-btn--${this.size}`,\n this.fullWidth ? 'svu-btn--full-width' : '',\n this.loading ? 'svu-btn--loading' : '',\n this.disabled ? 'svu-btn--disabled' : ''\n ].filter(Boolean).join(' ');\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled && !this.loading) {\n this.onClick.emit(event);\n }\n }\n}","<button\n [type]=\"type\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled || loading\"\n [id]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-busy]=\"loading\"\n (click)=\"handleClick($event)\">\n\n <!-- Loading spinner -->\n <span *ngIf=\"loading\" class=\"svu-btn__spinner\">\n <svg class=\"svu-spinner\" viewBox=\"0 0 24 24\">\n <circle class=\"svu-spinner__circle\" cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke-width=\"3\"></circle>\n </svg>\n </span>\n\n <!-- Content -->\n <span [class.svu-btn__content--hidden]=\"loading\" class=\"svu-btn__content\">\n <ng-content></ng-content>\n </span>\n</button>","import { Component, Input, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { IconSourceDirective } from '../../directives/icon-source.directive';\nimport { NoLeadingSpaceDirective } from '../../directives/no-leading-space.directive';\n\ntype InputFormat = 'alphanumeric' | 'currency' | 'numeric';\n\n@Component({\n selector: 'app-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, IconSourceDirective, NoLeadingSpaceDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"input-wrapper\" [class.input-wrapper--unstyled]=\"unstyled\">\n <label *ngIf=\"label && !unstyled\" [for]=\"id\">{{ label }}</label>\n <div class=\"input-container\" [class.error]=\"hasError && !unstyled\" [class.input-container--unstyled]=\"unstyled\">\n <div class=\"input-prefix-wrapper\">\n <ng-content select=\"[prefix]\"></ng-content>\n </div>\n <input\n noLeadingSpace\n [type]=\"type\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [attr.maxlength]=\"format === 'currency' ? null : maxLength\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n class=\"input-field\"\n [class.error]=\"hasError && !unstyled\"\n [class.input-field--unstyled]=\"unstyled\"\n [value]=\"formattedValue\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChange($event)\">\n <div class=\"input-suffix-wrapper\">\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage && !unstyled\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styles: [`\n /* Solución para el sombreado azul del autocompletado del navegador */\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n input:-webkit-autofill:active {\n -webkit-box-shadow: 0 0 0 30px white inset !important;\n box-shadow: 0 0 0 30px white inset !important;\n -webkit-text-fill-color: #2E353A !important;\n transition: background-color 5000s ease-in-out 0s;\n }\n\n /* Wrappers para prefix y suffix con soporte completo de eventos */\n .input-prefix-wrapper,\n .input-suffix-wrapper {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-family: 'Quicksand', sans-serif;\n font-size: 14px;\n font-weight: 500;\n color: #969A9C;\n position: relative;\n z-index: 2;\n pointer-events: auto !important;\n }\n\n .input-prefix-wrapper {\n margin-right: 0.5rem;\n\n &:empty {\n display: none;\n margin-right: 0;\n }\n }\n\n .input-suffix-wrapper {\n margin-left: 0.5rem;\n\n &:empty {\n display: none;\n margin-left: 0;\n }\n }\n\n /* Asegurar que todos los elementos dentro de prefix/suffix sean clickeables */\n .input-prefix-wrapper *,\n .input-suffix-wrapper * {\n pointer-events: auto !important;\n }\n\n /* El input no debe cubrir los wrappers */\n .input-field {\n position: relative;\n z-index: 1;\n }\n `],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() type: 'text' | 'email' | 'tel' | 'password' | 'number' = 'text';\n @Input() maxLength?: number | null;\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() format: InputFormat = 'alphanumeric';\n @Input() unstyled = false; // Para usar dentro de componentes compuestos\n\n value: any = '';\n formattedValue = '';\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n writeValue(value: any): void {\n let processedValue = value || '';\n\n // For currency format, enforce maxLength on the raw value (without commas)\n if (this.format === 'currency' && this.maxLength) {\n const rawValue = String(processedValue).replace(/[^0-9.]/g, '');\n if (rawValue.length > this.maxLength) {\n processedValue = rawValue.slice(0, this.maxLength);\n }\n }\n\n // For number inputs, enforce maxLength on initial value\n if (this.type === 'number' && this.maxLength && String(processedValue).length > this.maxLength) {\n processedValue = String(processedValue).slice(0, this.maxLength);\n }\n\n this.value = processedValue;\n this.formattedValue = this.applyFormat(this.value);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n let inputValue = target.value;\n\n // Parse the value first (removes formatting like commas)\n let rawValue = this.parseValue(inputValue);\n\n // For currency format, enforce maxLength on the raw value (without commas)\n if (this.format === 'currency' && this.maxLength && String(rawValue).length > this.maxLength) {\n rawValue = String(rawValue).slice(0, this.maxLength);\n }\n\n // For number inputs or numeric format, maxLength doesn't work natively, so we handle it manually\n if ((this.type === 'number' || this.format === 'numeric') && this.maxLength) {\n // Check the length of the raw value (without formatting)\n const rawString = String(rawValue);\n if (rawString.length > this.maxLength) {\n rawValue = rawString.slice(0, this.maxLength);\n // Update the input value to reflect the truncation\n target.value = rawValue;\n }\n }\n\n this.value = rawValue;\n this.formattedValue = this.applyFormat(rawValue);\n\n // Update the input display (for formatted inputs like currency)\n if (this.format === 'currency') {\n target.value = this.formattedValue;\n }\n\n this.onChange(rawValue);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n private parseValue(value: string): any {\n switch (this.format) {\n case 'currency':\n // Remove all non-numeric characters except decimal point\n return value.replace(/[^0-9.]/g, '');\n case 'numeric':\n // Remove all non-numeric characters (only digits allowed)\n return value.replace(/[^0-9]/g, '');\n case 'alphanumeric':\n default:\n return value;\n }\n }\n\n private applyFormat(value: any): string {\n if (!value && value !== 0) return '';\n\n switch (this.format) {\n case 'currency':\n return this.formatCurrency(value);\n case 'alphanumeric':\n default:\n return String(value);\n }\n }\n\n private formatCurrency(value: any): string {\n const numValue = typeof value === 'string' ? parseFloat(value.replace(/[^0-9.]/g, '')) : value;\n\n if (isNaN(numValue)) return '';\n\n // Format with thousands separator\n return numValue.toLocaleString('es-MX', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-textarea',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"textarea-wrapper\">\n <label *ngIf=\"label\" [for]=\"id\" class=\"textarea-label\">{{ label }}</label>\n <div class=\"textarea-container\" [class.error]=\"hasError\">\n <textarea\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxLength\"\n class=\"textarea-field\"\n [class.error]=\"hasError\"\n [value]=\"value\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChange($event)\"\n ></textarea>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styles: [`\n .textarea-wrapper {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .textarea-label {\n font-family: 'Quicksand', sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n color: #414651;\n }\n\n .textarea-container {\n width: 100%;\n\n &.error .textarea-field {\n border-color: #F04438;\n }\n }\n\n .textarea-field {\n width: 100%;\n padding: 10px 14px;\n background: #FFFFFF;\n border: 1px solid #D5D7DA;\n border-radius: 8px;\n font-family: 'Quicksand', sans-serif;\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n color: #2E353A;\n resize: vertical;\n min-height: 100px;\n transition: all 0.2s ease;\n box-sizing: border-box;\n\n &::placeholder {\n color: #A4A7AE;\n }\n\n &:focus {\n outline: none;\n border-color: #F59100;\n box-shadow: 0 0 0 4px rgba(245, 145, 0, 0.1);\n }\n\n &:disabled {\n background: #F9FAFB;\n cursor: not-allowed;\n }\n\n &.error {\n border-color: #F04438;\n\n &:focus {\n box-shadow: 0 0 0 4px rgba(240, 68, 56, 0.1);\n }\n }\n }\n\n .field-error {\n color: #F04438;\n font-size: 0.875rem;\n font-family: 'Quicksand', sans-serif;\n }\n `],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextareaComponent),\n multi: true\n }\n ]\n})\nexport class TextareaComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() maxLength?: number;\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() readonly = false;\n\n value = '';\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n writeValue(value: any): void {\n this.value = value || '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, Output, EventEmitter, SimpleChanges, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-checkbox',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div class=\"checkbox-wrapper\" [class.disabled]=\"disabled\">\n <div class=\"checkbox-container\">\n <label [for]=\"id\" class=\"checkbox-label-input\">\n <input\n type=\"checkbox\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [checked]=\"value\"\n (blur)=\"onTouched()\"\n (change)=\"onCheckboxChange($event)\">\n <span class=\"checkbox-custom\" [class.checked]=\"value\" [class.indeterminate]=\"indeterminate\">\n <!-- Paloma -->\n <svg *ngIf=\"value && !indeterminate\" class=\"check-icon\" width=\"14\" height=\"10\" viewBox=\"0 0 10 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 1L3.5 6.5L1 4\" stroke=\"#F59100\" stroke-width=\"1.6666\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <!-- Guion -->\n <svg *ngIf=\"indeterminate && !value\" class=\"minus-icon\" width=\"12\" height=\"2\" viewBox=\"0 0 12 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"12\" height=\"2\" rx=\"1\" fill=\"#F59100\"/>\n </svg>\n </span>\n </label>\n <span class=\"checkbox-text\" (click)=\"onTextClick($event)\">\n <ng-content></ng-content>\n <span *ngIf=\"label\" [innerHTML]=\"label\"></span>\n </span>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true\n }\n ]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() indeterminate = false;\n @Input()\n set checked(value: boolean) {\n this.value = !!value;\n this.cdr.markForCheck();\n }\n get checked(): boolean {\n return this.value;\n }\n\n @Output() changed = new EventEmitter<boolean>();\n\n value = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef, private elRef: ElementRef) {}\n\n ngAfterViewInit() {\n this.updateNativeIndeterminate();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['indeterminate']) {\n this.updateNativeIndeterminate();\n }\n }\n\n private updateNativeIndeterminate() {\n const input = this.elRef.nativeElement.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\n if (input) input.indeterminate = this.indeterminate;\n }\n\n onCheckboxChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.checked;\n this.onChange(this.value);\n this.changed.emit(this.value); // ← EMITE EVENTO MANUAL PARA USO EXTERNO\n this.cdr.markForCheck();\n }\n\n onTextClick(event: Event): void {\n const target = event.target as HTMLElement;\n if (target.tagName === 'A' || target.closest('a')) {\n return;\n }\n\n if (this.disabled) {\n return;\n }\n\n this.value = !this.value;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = !!value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-radio',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div\n class=\"radio-wrapper\"\n [class.disabled]=\"disabled\"\n [class.radio-wrapper--selected]=\"isSelected\"\n (click)=\"onContainerClick()\"\n >\n <div class=\"radio-container\">\n <input\n type=\"radio\"\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"radioValue\"\n [disabled]=\"disabled\"\n [checked]=\"isSelected\"\n (blur)=\"onTouched()\"\n (change)=\"onRadioChange($event)\"\n class=\"radio-input\"\n />\n <span class=\"radio-custom\" [class.checked]=\"isSelected\">\n <span class=\"radio-dot\" *ngIf=\"isSelected\"></span>\n </span>\n <span class=\"radio-text\">\n <ng-content></ng-content>\n <span *ngIf=\"label\">{{ label }}</span>\n </span>\n </div>\n </div>\n `,\n styleUrls: ['./radio.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true\n }\n ]\n})\nexport class RadioComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() name = '';\n @Input() radioValue: any = '';\n @Input() disabled = false;\n\n @Output() changed = new EventEmitter<any>();\n\n value: any = null;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get isSelected(): boolean {\n return this.value === this.radioValue;\n }\n\n onContainerClick(): void {\n if (this.disabled) return;\n\n this.value = this.radioValue;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n\n onRadioChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as HTMLInputElement;\n if (target.checked) {\n this.value = this.radioValue;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n OnDestroy,\n HostListener,\n Renderer2,\n OnInit\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Inject } from '@angular/core';\n\nexport interface DateRange {\n startDate: Date | null;\n endDate: Date | null;\n}\n\nexport type DatePickerValue = Date | null | DateRange;\n\ninterface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isDisabled: boolean;\n}\n\ntype FilterOption = 'hoy' | 'ayer' | 'esta-semana' | 'semana-pasada' | 'este-mes' | 'mes-pasado' | 'este-ano' | 'ano-pasado' | 'mostrar-todo';\n\n@Component({\n selector: 'app-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DatePickerComponent implements ControlValueAccessor, OnDestroy, OnInit {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = 'Seleccionar fecha';\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() rangeMode = false; // false = single date, true = date range\n @Input() iconPosition: 'left' | 'right' = 'left';\n\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ViewChild('dropdown', { read: ElementRef }) dropdown?: ElementRef;\n\n // Single date value\n singleValue: Date | null = null;\n // Range value\n rangeValue: DateRange = { startDate: null, endDate: null };\n\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n leftMonthDate: Date = new Date();\n rightMonthDate: Date = new Date();\n tempStartDate: Date | null = null;\n tempEndDate: Date | null = null;\n tempSingleDate: Date | null = null;\n hoverDate: Date | null = null;\n\n // Store original calendar positions for cancel\n originalLeftMonthDate: Date = new Date();\n originalRightMonthDate: Date = new Date();\n\n // Cached calendar days\n leftCalendarDays: CalendarDay[] = [];\n rightCalendarDays: CalendarDay[] = [];\n\n filterOptions: { value: FilterOption; label: string }[] = [\n { value: 'hoy', label: 'Hoy' },\n { value: 'ayer', label: 'Ayer' },\n { value: 'esta-semana', label: 'Esta semana' },\n { value: 'semana-pasada', label: 'Semana pasada' },\n { value: 'este-mes', label: 'Este mes' },\n { value: 'mes-pasado', label: 'Mes pasado' },\n { value: 'este-ano', label: 'Este año' },\n { value: 'ano-pasado', label: 'Año pasado' },\n { value: 'mostrar-todo', label: 'Mostrar todo' }\n ];\n\n selectedFilter: FilterOption | '' = '';\n\n weekDays = ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'];\n months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\n\n // Month/Year picker state\n showLeftMonthPicker = false;\n showRightMonthPicker = false;\n years: number[] = [];\n leftYearPickerPage = 0;\n rightYearPickerPage = 0;\n yearsPerPage = 12;\n\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n dropdownPosition: { top: string; left: string } = { top: '0px', left: '0px' };\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit(): void {\n this.initializeDates();\n }\n\n ngOnDestroy(): void {\n this.removeRepositionListeners();\n }\n\n private initializeDates(): void {\n const today = new Date();\n this.leftMonthDate = new Date(today.getFullYear(), today.getMonth(), 1);\n this.rightMonthDate = new Date(today.getFullYear(), today.getMonth() + 1, 1);\n this.updateCalendarDays();\n }\n\n private updateCalendarDays(): void {\n this.leftCalendarDays = this.generateCalendarDays(this.leftMonthDate);\n if (this.rangeMode) {\n this.rightCalendarDays = this.generateCalendarDays(this.rightMonthDate);\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen) return;\n\n const triggerElement = this.trigger?.nativeElement;\n const dropdownElement = this.document.querySelector('.date-picker-dropdown');\n const monthYearPickers = this.document.querySelectorAll('.month-year-picker');\n const monthYearButtons = this.document.querySelectorAll('.month-year');\n\n let isOnMonthYearButton = false;\n monthYearButtons.forEach(button => {\n if (button.contains(event.target as Node)) {\n isOnMonthYearButton = true;\n }\n });\n\n let isInsideMonthYearPicker = false;\n monthYearPickers.forEach(picker => {\n if (picker.contains(event.target as Node)) {\n isInsideMonthYearPicker = true;\n }\n });\n\n if (isOnMonthYearButton || isInsideMonthYearPicker) {\n return;\n }\n\n if (dropdownElement && dropdownElement.contains(event.target as Node)) {\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n return;\n }\n\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n if (dropdownElement && !dropdownElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n\n this.originalLeftMonthDate = new Date(this.leftMonthDate);\n this.originalRightMonthDate = new Date(this.rightMonthDate);\n\n this.leftYearPickerPage = 0;\n this.rightYearPickerPage = 0;\n\n this.isOpen = true;\n\n setTimeout(() => {\n this.updateDropdownPosition();\n this.addRepositionListeners();\n }, 0);\n }\n\n getDropdownStyle(): any {\n if (!this.trigger) return {};\n\n const position = this.calculatePosition();\n return {\n 'position': 'fixed',\n 'left': position.left,\n 'top': position.top,\n 'z-index': '10000'\n };\n }\n\n private calculatePosition(): { top: string; left: string } {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n let dropdownWidth = this.rangeMode ? 830 : 320;\n let dropdownHeight = this.rangeMode ? 520 : 400;\n\n if (this.dropdown) {\n const dropdownElement = this.dropdown.nativeElement;\n const dropdownRect = dropdownElement.getBoundingClientRect();\n\n if (dropdownRect.width > 0) {\n dropdownWidth = dropdownRect.width;\n } else {\n dropdownWidth = window.innerWidth < 768 ? 280 : (this.rangeMode ? 830 : 320);\n }\n\n if (dropdownRect.height > 0) {\n dropdownHeight = dropdownRect.height;\n }\n } else {\n dropdownWidth = window.innerWidth < 768 ? 280 : (this.rangeMode ? 830 : 320);\n }\n\n const spaceOnRight = window.innerWidth - rect.left;\n\n let left = rect.left;\n\n if (spaceOnRight < dropdownWidth) {\n left = rect.right - dropdownWidth;\n\n if (left < 0) {\n left = Math.max(8, window.innerWidth - dropdownWidth - 8);\n }\n }\n\n if (window.innerWidth < 768) {\n const centeredLeft = rect.left + (rect.width / 2) - (dropdownWidth / 2);\n const minLeft = 8;\n const maxLeft = window.innerWidth - dropdownWidth - 8;\n\n left = Math.max(minLeft, Math.min(centeredLeft, maxLeft));\n }\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n let top = rect.bottom + 4;\n\n if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {\n top = rect.top - dropdownHeight - 4;\n }\n\n return {\n top: `${top}px`,\n left: `${left}px`\n };\n }\n\n closeDropdown(): void {\n this.leftMonthDate = new Date(this.originalLeftMonthDate);\n this.rightMonthDate = new Date(this.originalRightMonthDate);\n\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n\n this.updateCalendarDays();\n this.removeRepositionListeners();\n this.isOpen = false;\n this.hoverDate = null;\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n }\n\n private addRepositionListeners(): void {\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private removeRepositionListeners(): void {\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n }\n\n private updateDropdownPosition(): void {\n if (!this.trigger) return;\n this.dropdownPosition = this.calculatePosition();\n }\n\n getDisplayValue(): string {\n if (this.rangeMode) {\n if (this.rangeValue.startDate && this.rangeValue.endDate) {\n const start = this.formatDateShort(this.rangeValue.startDate);\n const end = this.formatDateShort(this.rangeValue.endDate);\n return `${start} - ${end}`;\n }\n } else {\n if (this.singleValue) {\n return this.formatDateShort(this.singleValue);\n }\n }\n return '';\n }\n\n formatDateShort(date: Date): string {\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n }\n\n generateCalendarDays(monthDate: Date): CalendarDay[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n let startDay = firstDay.getDay() - 1;\n if (startDay === -1) startDay = 6;\n\n const days: CalendarDay[] = [];\n\n const prevMonthLastDay = new Date(year, month, 0);\n for (let i = startDay - 1; i >= 0; i--) {\n const date = new Date(year, month - 1, prevMonthLastDay.getDate() - i);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, false));\n }\n\n for (let day = 1; day <= lastDay.getDate(); day++) {\n const date = new Date(year, month, day);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, true));\n }\n\n const remainingDays = 42 - days.length;\n for (let day = 1; day <= remainingDays; day++) {\n const date = new Date(year, month + 1, day);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, false));\n }\n\n return days;\n }\n\n private createCalendarDay(date: Date, isCurrentMonth: boolean): CalendarDay {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n const isToday = dateOnly.getTime() === today.getTime();\n\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let isInRange = false;\n\n if (this.rangeMode) {\n const startDate = this.tempStartDate ? new Date(this.tempStartDate) : null;\n const endDate = this.tempEndDate ? new Date(this.tempEndDate) : null;\n\n if (startDate) startDate.setHours(0, 0, 0, 0);\n if (endDate) endDate.setHours(0, 0, 0, 0);\n\n isRangeStart = isCurrentMonth && startDate ? dateOnly.getTime() === startDate.getTime() : false;\n isRangeEnd = isCurrentMonth && endDate ? dateOnly.getTime() === endDate.getTime() : false;\n isSelected = isRangeStart || isRangeEnd;\n\n if (isCurrentMonth && startDate && endDate) {\n isInRange = dateOnly > startDate && dateOnly < endDate;\n } else if (isCurrentMonth && startDate && this.hoverDate && !endDate) {\n const hoverDateOnly = new Date(this.hoverDate);\n hoverDateOnly.setHours(0, 0, 0, 0);\n if (hoverDateOnly > startDate) {\n isInRange = dateOnly > startDate && dateOnly < hoverDateOnly;\n }\n }\n } else {\n const selectedDate = this.tempSingleDate ? new Date(this.tempSingleDate) : null;\n if (selectedDate) selectedDate.setHours(0, 0, 0, 0);\n isSelected = isCurrentMonth && selectedDate ? dateOnly.getTime() === selectedDate.getTime() : false;\n }\n\n const isDisabled = !isCurrentMonth || this.isDateDisabled(date);\n\n return {\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isDisabled\n };\n }\n\n private isDateDisabled(date: Date): boolean {\n if (this.minDate && date < this.minDate) return true;\n if (this.maxDate && date > this.maxDate) return true;\n return false;\n }\n\n trackByDate(index: number, day: CalendarDay): string {\n return day.date.getTime().toString();\n }\n\n isInRange(date: Date): boolean {\n if (!this.rangeMode) return false;\n\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n const startDate = this.tempStartDate ? new Date(this.tempStartDate) : null;\n const endDate = this.tempEndDate ? new Date(this.tempEndDate) : null;\n\n if (startDate) startDate.setHours(0, 0, 0, 0);\n if (endDate) endDate.setHours(0, 0, 0, 0);\n\n if (startDate && endDate) {\n return dateOnly > startDate && dateOnly < endDate;\n } else if (startDate && this.hoverDate && !endDate) {\n const hoverDateOnly = new Date(this.hoverDate);\n hoverDateOnly.setHours(0, 0, 0, 0);\n if (hoverDateOnly > startDate) {\n return dateOnly > startDate && dateOnly < hoverDateOnly;\n }\n }\n return false;\n }\n\n onDayClick(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n const clickedDate = new Date(day.date);\n clickedDate.setHours(0, 0, 0, 0);\n\n if (this.rangeMode) {\n this.selectedFilter = '' as FilterOption;\n\n if (!this.tempStartDate || (this.tempStartDate && this.tempEndDate)) {\n this.tempStartDate = clickedDate;\n this.tempEndDate = null;\n this.hoverDate = null;\n } else if (this.tempStartDate && !this.tempEndDate) {\n const startDate = new Date(this.tempStartDate);\n startDate.setHours(0, 0, 0, 0);\n\n if (clickedDate.getTime() === startDate.getTime()) {\n this.tempEndDate = clickedDate;\n } else if (clickedDate > startDate) {\n this.tempEndDate = clickedDate;\n } else {\n this.tempEndDate = startDate;\n this.tempStartDate = clickedDate;\n }\n this.hoverDate = null;\n }\n } else {\n this.tempSingleDate = clickedDate;\n // Auto-apply for single date mode\n this.apply();\n return;\n }\n\n this.updateCalendarDays();\n }\n\n onDayHover(day: CalendarDay): void {\n if (day.isDisabled || !this.rangeMode) return;\n this.hoverDate = day.date;\n }\n\n onDayLeave(): void {\n this.hoverDate = null;\n }\n\n previousMonth(): void {\n if (!this.canNavigatePreviousMonth()) return;\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() - 1, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), this.rightMonthDate.getMonth() - 1, 1);\n }\n this.updateCalendarDays();\n }\n\n nextMonth(): void {\n if (!this.canNavigateNextMonth()) return;\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() + 1, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), this.rightMonthDate.getMonth() + 1, 1);\n }\n this.updateCalendarDays();\n }\n\n canNavigatePreviousMonth(): boolean {\n if (!this.minDate) return true;\n\n const newLeftMonth = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() - 1, 1);\n const minDateMonth = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\n\n return newLeftMonth >= minDateMonth;\n }\n\n canNavigateNextMonth(): boolean {\n if (!this.maxDate) return true;\n\n const checkMonth = this.rangeMode ? this.rightMonthDate : this.leftMonthDate;\n const newMonth = new Date(checkMonth.getFullYear(), checkMonth.getMonth() + 1, 1);\n const maxDateMonth = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);\n\n return newMonth <= maxDateMonth;\n }\n\n getMonthYear(date: Date): string {\n return `${this.months[date.getMonth()]} ${date.getFullYear()}`;\n }\n\n selectFilter(filter: FilterOption): void {\n this.selectedFilter = filter;\n this.applyFilter(filter);\n this.updateCalendarDays();\n }\n\n private applyFilter(filter: FilterOption): void {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n let startDate: Date | null = null;\n let endDate: Date | null = null;\n\n switch (filter) {\n case 'hoy':\n startDate = new Date(today);\n endDate = new Date(today);\n break;\n case 'ayer':\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 1);\n endDate = new Date(startDate);\n break;\n case 'esta-semana':\n startDate = this.getStartOfWeek(today);\n endDate = new Date(today);\n break;\n case 'semana-pasada':\n const lastWeekEnd = new Date(this.getStartOfWeek(today));\n lastWeekEnd.setDate(lastWeekEnd.getDate() - 1);\n startDate = this.getStartOfWeek(lastWeekEnd);\n endDate = lastWeekEnd;\n break;\n case 'este-mes':\n startDate = new Date(today.getFullYear(), today.getMonth(), 1);\n endDate = new Date(today);\n break;\n case 'mes-pasado':\n startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);\n endDate = new Date(today.getFullYear(), today.getMonth(), 0);\n break;\n case 'este-ano':\n startDate = new Date(today.getFullYear(), 0, 1);\n endDate = new Date(today);\n break;\n case 'ano-pasado':\n startDate = new Date(today.getFullYear() - 1, 0, 1);\n endDate = new Date(today.getFullYear() - 1, 11, 31);\n break;\n case 'mostrar-todo':\n startDate = null;\n endDate = null;\n break;\n }\n\n this.tempStartDate = startDate;\n this.tempEndDate = endDate;\n\n if (startDate) {\n this.leftMonthDate = new Date(startDate.getFullYear(), startDate.getMonth(), 1);\n this.rightMonthDate = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 1);\n } else {\n const currentDate = new Date();\n this.leftMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);\n this.rightMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1);\n }\n }\n\n private getStartOfWeek(date: Date): Date {\n const day = date.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n const startOfWeek = new Date(date);\n startOfWeek.setDate(date.getDate() + diff);\n return startOfWeek;\n }\n\n cancel(): void {\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n this.selectedFilter = '';\n\n this.leftMonthDate = new Date(this.originalLeftMonthDate);\n this.rightMonthDate = new Date(this.originalRightMonthDate);\n\n this.updateCalendarDays();\n this.closeDropdown();\n }\n\n apply(): void {\n if (this.rangeMode) {\n this.rangeValue = {\n startDate: this.tempStartDate,\n endDate: this.tempEndDate\n };\n this.onChange(this.rangeValue);\n } else {\n this.singleValue = this.tempSingleDate;\n this.onChange(this.singleValue);\n }\n\n this.originalLeftMonthDate = new Date(this.leftMonthDate);\n this.originalRightMonthDate = new Date(this.rightMonthDate);\n\n this.onTouched();\n\n this.removeRepositionListeners();\n this.isOpen = false;\n this.hoverDate = null;\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n }\n\n getStartDateDisplay(): string {\n if (this.tempStartDate) {\n return this.formatDateForInput(this.tempStartDate);\n }\n return 'Fecha inicio';\n }\n\n getEndDateDisplay(): string {\n if (this.tempEndDate) {\n return this.formatDateForInput(this.tempEndDate);\n }\n return 'Fecha fin';\n }\n\n private formatDateForInput(date: Date): string {\n const day = date.getDate();\n const month = date.toLocaleString('es-ES', { month: 'short' });\n const year = date.getFullYear();\n return `${day} ${month} ${year}`;\n }\n\n toggleLeftMonthPicker(event: Event): void {\n event.stopPropagation();\n this.showLeftMonthPicker = !this.showLeftMonthPicker;\n this.showRightMonthPicker = false;\n if (this.showLeftMonthPicker) {\n this.leftYearPickerPage = 0;\n }\n }\n\n toggleRightMonthPicker(event: Event): void {\n event.stopPropagation();\n this.showRightMonthPicker = !this.showRightMonthPicker;\n this.showLeftMonthPicker = false;\n if (this.showRightMonthPicker) {\n this.rightYearPickerPage = 0;\n }\n }\n\n getLeftYears(): number[] {\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + (this.leftYearPickerPage * this.yearsPerPage);\n const years: number[] = [];\n\n for (let i = 0; i < this.yearsPerPage; i++) {\n const year = baseYear - 5 + i;\n years.push(year);\n }\n\n return years;\n }\n\n getRightYears(): number[] {\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + (this.rightYearPickerPage * this.yearsPerPage);\n const years: number[] = [];\n\n for (let i = 0; i < this.yearsPerPage; i++) {\n const year = baseYear - 5 + i;\n years.push(year);\n }\n\n return years;\n }\n\n previousLeftYearPage(event: Event): void {\n event.stopPropagation();\n this.leftYearPickerPage--;\n }\n\n nextLeftYearPage(event: Event): void {\n event.stopPropagation();\n this.leftYearPickerPage++;\n }\n\n previousRightYearPage(event: Event): void {\n event.stopPropagation();\n this.rightYearPickerPage--;\n }\n\n nextRightYearPage(event: Event): void {\n event.stopPropagation();\n this.rightYearPickerPage++;\n }\n\n isMonthDisabled(monthIndex: number, calendarDate: Date): boolean {\n const testDate = new Date(calendarDate.getFullYear(), monthIndex, 1);\n\n if (this.minDate) {\n const minDateMonth = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\n if (testDate < minDateMonth) return true;\n }\n\n if (this.maxDate) {\n const maxDateMonth = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);\n if (testDate > maxDateMonth) return true;\n }\n\n return false;\n }\n\n isYearDisabled(year: number): boolean {\n if (this.minDate && year < this.minDate.getFullYear()) return true;\n if (this.maxDate && year > this.maxDate.getFullYear()) return true;\n return false;\n }\n\n getLeftYearRangeLabel(): string {\n const years = this.getLeftYears();\n return `${years[0]} - ${years[years.length - 1]}`;\n }\n\n getRightYearRangeLabel(): string {\n const years = this.getRightYears();\n return `${years[0]} - ${years[years.length - 1]}`;\n }\n\n canNavigateLeftYearsPrevious(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + ((this.leftYearPickerPage - 1) * this.yearsPerPage);\n\n const previousPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n previousPageYears.push(baseYear - 5 + i);\n }\n\n return previousPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateLeftYearsNext(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + ((this.leftYearPickerPage + 1) * this.yearsPerPage);\n\n const nextPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n nextPageYears.push(baseYear - 5 + i);\n }\n\n return nextPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateRightYearsPrevious(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + ((this.rightYearPickerPage - 1) * this.yearsPerPage);\n\n const previousPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n previousPageYears.push(baseYear - 5 + i);\n }\n\n return previousPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateRightYearsNext(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + ((this.rightYearPickerPage + 1) * this.yearsPerPage);\n\n const nextPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n nextPageYears.push(baseYear - 5 + i);\n }\n\n return nextPageYears.some(year => !this.isYearDisabled(year));\n }\n\n selectLeftMonth(monthIndex: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), monthIndex, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.leftMonthDate.getFullYear(), monthIndex + 1, 1);\n }\n this.updateCalendarDays();\n this.showLeftMonthPicker = false;\n }\n\n selectRightMonth(monthIndex: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), monthIndex, 1);\n this.leftMonthDate = new Date(this.rightMonthDate.getFullYear(), monthIndex - 1, 1);\n this.updateCalendarDays();\n this.showRightMonthPicker = false;\n }\n\n selectLeftYear(year: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.leftMonthDate = new Date(year, this.leftMonthDate.getMonth(), 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(year, this.leftMonthDate.getMonth() + 1, 1);\n }\n this.updateCalendarDays();\n this.showLeftMonthPicker = false;\n }\n\n selectRightYear(year: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.rightMonthDate = new Date(year, this.rightMonthDate.getMonth(), 1);\n this.leftMonthDate = new Date(year, this.rightMonthDate.getMonth() - 1, 1);\n this.updateCalendarDays();\n this.showRightMonthPicker = false;\n }\n\n writeValue(value: DatePickerValue): void {\n if (this.rangeMode) {\n const rangeVal = value as DateRange;\n this.rangeValue = rangeVal || { startDate: null, endDate: null };\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.singleValue = value as Date | null;\n this.tempSingleDate = this.singleValue;\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public resetDatePicker(): void {\n if (this.rangeMode) {\n this.rangeValue = { startDate: null, endDate: null };\n this.tempStartDate = null;\n this.tempEndDate = null;\n this.onChange(this.rangeValue);\n } else {\n this.singleValue = null;\n this.tempSingleDate = null;\n this.onChange(this.singleValue);\n }\n this.selectedFilter = '';\n\n this.initializeDates();\n this.updateCalendarDays();\n }\n}\n","<div class=\"date-picker-wrapper\">\n <label *ngIf=\"label\" [for]=\"id\">{{ label }}</label>\n\n <div class=\"date-picker-container\">\n <div\n #trigger\n class=\"date-picker-input\"\n [class.error]=\"hasError\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.icon-right]=\"iconPosition === 'right'\"\n (click)=\"toggleDropdown($event)\">\n\n <svg *ngIf=\"iconPosition === 'left'\" class=\"calendar-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.66667 1.66667V4.16667M13.3333 1.66667V4.16667M2.5 7.5H17.5M4.16667 3.33333H15.8333C16.7538 3.33333 17.5 4.07953 17.5 5V16.6667C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6667V5C2.5 4.07953 3.24619 3.33333 4.16667 3.33333Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <span class=\"date-picker-placeholder\" *ngIf=\"!getDisplayValue()\">\n {{ placeholder }}\n </span>\n <span class=\"date-picker-value\" *ngIf=\"getDisplayValue()\">\n {{ getDisplayValue() }}\n </span>\n\n <svg *ngIf=\"iconPosition === 'right'\" class=\"calendar-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.66667 1.66667V4.16667M13.3333 1.66667V4.16667M2.5 7.5H17.5M4.16667 3.33333H15.8333C16.7538 3.33333 17.5 4.07953 17.5 5V16.6667C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6667V5C2.5 4.07953 3.24619 3.33333 4.16667 3.33333Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n</div>\n\n<!-- Dropdown content (rendered with fixed position) -->\n<div *ngIf=\"isOpen\" class=\"date-picker-overlay\">\n <div #dropdown class=\"date-picker-dropdown\" [class.open]=\"isOpen\" [class.range-mode]=\"rangeMode\" [ngStyle]=\"getDropdownStyle()\">\n <div class=\"date-picker-content\">\n <!-- Sidebar with filters (only for range mode) -->\n <div class=\"filter-sidebar\" *ngIf=\"rangeMode\">\n <div\n *ngFor=\"let option of filterOptions\"\n class=\"filter-option\"\n [class.active]=\"selectedFilter === option.value\"\n (click)=\"selectFilter(option.value)\">\n {{ option.label }}\n </div>\n </div>\n\n <!-- Main content (calendars + footer) -->\n <div class=\"date-picker-main\">\n <!-- Calendars -->\n <div class=\"calendars-container\">\n <!-- Left Calendar (or single calendar in single mode) -->\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigatePreviousMonth()\"\n [class.disabled]=\"!canNavigatePreviousMonth()\"\n (click)=\"previousMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 2L3.5 6L7.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"month-year-selector\">\n <button type=\"button\" class=\"month-year\" (click)=\"toggleLeftMonthPicker($event)\">\n {{ getMonthYear(leftMonthDate) }}\n </button>\n\n <!-- Month/Year Picker Dropdown -->\n <div class=\"month-year-picker\" *ngIf=\"showLeftMonthPicker\" (click)=\"$event.stopPropagation()\">\n <div class=\"picker-section\">\n <div class=\"picker-title\">Mes</div>\n <div class=\"months-grid\">\n <button\n type=\"button\"\n *ngFor=\"let month of months; let i = index\"\n class=\"month-option\"\n [class.active]=\"i === leftMonthDate.getMonth()\"\n [class.disabled]=\"isMonthDisabled(i, leftMonthDate)\"\n [disabled]=\"isMonthDisabled(i, leftMonthDate)\"\n (click)=\"selectLeftMonth(i, $event)\">\n {{ month.substring(0, 3) }}\n </button>\n </div>\n </div>\n <div class=\"picker-section\">\n <div class=\"picker-header\">\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateLeftYearsPrevious()\"\n [class.disabled]=\"!canNavigateLeftYearsPrevious()\"\n (click)=\"previousLeftYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.25 2.5L3.75 5L6.25 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"picker-title\">{{ getLeftYearRangeLabel() }}</div>\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateLeftYearsNext()\"\n [class.disabled]=\"!canNavigateLeftYearsNext()\"\n (click)=\"nextLeftYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.75 2.5L6.25 5L3.75 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n <div class=\"years-grid\">\n <button\n type=\"button\"\n *ngFor=\"let year of getLeftYears()\"\n class=\"year-option\"\n [class.active]=\"year === leftMonthDate.getFullYear()\"\n [class.disabled]=\"isYearDisabled(year)\"\n [disabled]=\"isYearDisabled(year)\"\n (click)=\"selectLeftYear(year, $event)\">\n {{ year }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigateNextMonth()\"\n [class.disabled]=\"!canNavigateNextMonth()\"\n (click)=\"nextMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2L8.5 6L4.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"calendar-grid\">\n <div class=\"weekday-header\" *ngFor=\"let day of weekDays\">\n {{ day }}\n </div>\n\n <div\n *ngFor=\"let day of leftCalendarDays; trackBy: trackByDate\"\n class=\"calendar-day\"\n [class.other-month]=\"!day.isCurrentMonth\"\n [class.today]=\"day.isToday\"\n [class.selected]=\"day.isSelected\"\n [class.in-range]=\"rangeMode && isInRange(day.date)\"\n [class.range-start]=\"day.isRangeStart\"\n [class.range-end]=\"day.isRangeEnd\"\n [class.disabled]=\"day.isDisabled\"\n (click)=\"onDayClick(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayLeave()\">\n <span>{{ day.date.getDate() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Right Calendar (only for range mode) -->\n <div class=\"calendar\" *ngIf=\"rangeMode\">\n <div class=\"calendar-header\">\n <div class=\"nav-button-placeholder\"></div>\n <div class=\"month-year-selector\">\n <button type=\"button\" class=\"month-year\" (click)=\"toggleRightMonthPicker($event)\">\n {{ getMonthYear(rightMonthDate) }}\n </button>\n\n <!-- Month/Year Picker Dropdown -->\n <div class=\"month-year-picker\" *ngIf=\"showRightMonthPicker\" (click)=\"$event.stopPropagation()\">\n <div class=\"picker-section\">\n <div class=\"picker-title\">Mes</div>\n <div class=\"months-grid\">\n <button\n type=\"button\"\n *ngFor=\"let month of months; let i = index\"\n class=\"month-option\"\n [class.active]=\"i === rightMonthDate.getMonth()\"\n [class.disabled]=\"isMonthDisabled(i, rightMonthDate)\"\n [disabled]=\"isMonthDisabled(i, rightMonthDate)\"\n (click)=\"selectRightMonth(i, $event)\">\n {{ month.substring(0, 3) }}\n </button>\n </div>\n </div>\n <div class=\"picker-section\">\n <div class=\"picker-header\">\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateRightYearsPrevious()\"\n [class.disabled]=\"!canNavigateRightYearsPrevious()\"\n (click)=\"previousRightYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.25 2.5L3.75 5L6.25 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"picker-title\">{{ getRightYearRangeLabel() }}</div>\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateRightYearsNext()\"\n [class.disabled]=\"!canNavigateRightYearsNext()\"\n (click)=\"nextRightYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.75 2.5L6.25 5L3.75 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n <div class=\"years-grid\">\n <button\n type=\"button\"\n *ngFor=\"let year of getRightYears()\"\n class=\"year-option\"\n [class.active]=\"year === rightMonthDate.getFullYear()\"\n [class.disabled]=\"isYearDisabled(year)\"\n [disabled]=\"isYearDisabled(year)\"\n (click)=\"selectRightYear(year, $event)\">\n {{ year }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigateNextMonth()\"\n [class.disabled]=\"!canNavigateNextMonth()\"\n (click)=\"nextMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2L8.5 6L4.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"calendar-grid\">\n <div class=\"weekday-header\" *ngFor=\"let day of weekDays\">\n {{ day }}\n </div>\n\n <div\n *ngFor=\"let day of rightCalendarDays; trackBy: trackByDate\"\n class=\"calendar-day\"\n [class.other-month]=\"!day.isCurrentMonth\"\n [class.today]=\"day.isToday\"\n [class.selected]=\"day.isSelected\"\n [class.in-range]=\"isInRange(day.date)\"\n [class.range-start]=\"day.isRangeStart\"\n [class.range-end]=\"day.isRangeEnd\"\n [class.disabled]=\"day.isDisabled\"\n (click)=\"onDayClick(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayLeave()\">\n <span>{{ day.date.getDate() }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer with dates and actions (only for range mode) -->\n <div class=\"footer\" *ngIf=\"rangeMode\">\n <div class=\"selected-dates\">\n <div class=\"date-display\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33333 1.33333V3.33333M10.6667 1.33333V3.33333M2 6H14M3.33333 2.66667H12.6667C13.403 2.66667 14 3.26362 14 4V13.3333C14 14.0697 13.403 14.6667 12.6667 14.6667H3.33333C2.59695 14.6667 2 14.0697 2 13.3333V4C2 3.26362 2.59695 2.66667 3.33333 2.66667Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"date-text\">{{ getStartDateDisplay() }}</span>\n </div>\n <span class=\"date-separator\">-</span>\n <div class=\"date-display\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33333 1.33333V3.33333M10.6667 1.33333V3.33333M2 6H14M3.33333 2.66667H12.6667C13.403 2.66667 14 3.26362 14 4V13.3333C14 14.0697 13.403 14.6667 12.6667 14.6667H3.33333C2.59695 14.6667 2 14.0697 2 13.3333V4C2 3.26362 2.59695 2.66667 3.33333 2.66667Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"date-text\">{{ getEndDateDisplay() }}</span>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn-cancel\" (click)=\"cancel()\">\n Cancelar\n </button>\n <button type=\"button\" class=\"btn-apply\" (click)=\"apply()\">\n Aplicar\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AssetSourceDirective } from '../../directives/asset-source.directive';\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [CommonModule, AssetSourceDirective],\n template: `\n <div class=\"svu-loader-overlay\" *ngIf=\"show\">\n <div class=\"svu-loader-content\">\n <!-- Logo -->\n <div class=\"svu-loader-logo\" *ngIf=\"logo\">\n <img [src]=\"logo\" assetSource=\"mf\" alt=\"Logo\">\n </div>\n\n <!-- Image/Icon -->\n <div class=\"svu-loader-image\" *ngIf=\"image\">\n <img [src]=\"image\" assetSource=\"mf\" [alt]=\"imageAlt\">\n </div>\n\n <!-- Loading Dots Animation -->\n <div class=\"svu-loader-dots\">\n <span class=\"svu-loader-dot\"></span>\n <span class=\"svu-loader-dot\"></span>\n <span class=\"svu-loader-dot\"></span>\n </div>\n\n <!-- Message -->\n <div class=\"svu-loader-message\" *ngIf=\"message\">\n <span [innerHTML]=\"message\"></span>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent {\n @Input() show: boolean = false;\n @Input() message?: string;\n @Input() logo?: string;\n @Input() image?: string;\n @Input() imageAlt: string = 'Loading';\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SidebarIconName =\n | 'dashboard'\n | 'file-users'\n | 'card'\n | 'logout'\n | 'chevron-down'\n | 'settings'\n | 'user'\n | 'home';\n\n@Component({\n selector: 'svu-sidebar-icon',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-container [ngSwitch]=\"name\">\n <svg *ngSwitchCase=\"'dashboard'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 17h8M11.018 2.764L4.235 8.039c-.453.353-.68.53-.843.75a2 2 0 00-.318.65C3 9.704 3 9.991 3 10.565V17.8c0 1.12 0 1.68.218 2.108a2 2 0 00.874.874C4.52 21 5.08 21 6.2 21h11.6c1.12 0 1.68 0 2.108-.218a2 2 0 00.874-.874C21 19.48 21 18.92 21 17.8v-7.235c0-.574 0-.861-.074-1.126a2 2 0 00-.318-.65c-.163-.22-.39-.397-.843-.75l-6.783-5.275c-.351-.273-.527-.41-.72-.462a1 1 0 00-.508 0c-.193.052-.369.189-.72.462z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'file-users'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2.27V6.4c0 .56 0 .84.109 1.054a1 1 0 00.437.437C14.76 8 15.04 8 15.6 8h4.13M8 15h8M8 11h4M14 2H8.8c-1.68 0-2.52 0-3.162.327a3 3 0 00-1.311 1.311C4 4.28 4 5.12 4 6.8v10.4c0 1.68 0 2.52.327 3.162a3 3 0 001.311 1.311C6.28 22 7.12 22 8.8 22h6.4c1.68 0 2.52 0 3.162-.327a3 3 0 001.311-1.311C20 19.72 20 18.88 20 17.2V8l-6-6z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'card'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 10H2M22 11V8.2C22 7.08 22 6.52 21.782 6.092a2 2 0 00-.874-.874C20.48 5 19.92 5 18.8 5H5.2C4.08 5 3.52 5 3.092 5.218a2 2 0 00-.874.874C2 6.52 2 7.08 2 8.2V15.8c0 1.12 0 1.68.218 2.108a2 2 0 00.874.874C3.52 19 4.08 19 5.2 19H18.8c1.12 0 1.68 0 2.108-.218a2 2 0 00.874-.874C22 17.48 22 16.92 22 15.8V11z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'logout'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 17l5-5m0 0l-5-5m5 5H9m0-9H7.8c-1.68 0-2.52 0-3.162.327a3 3 0 00-1.311 1.311C3 5.28 3 6.12 3 7.8v8.4c0 1.68 0 2.52.327 3.162a3 3 0 001.311 1.311C5.28 21 6.12 21 7.8 21H9\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'chevron-down'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5l5 5 5-5\" stroke=\"currentColor\" stroke-width=\"1.667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'settings'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19.622 10.395l-1.097-2.65L20 6l-2-2-1.735 1.483-2.707-1.113L12.935 2h-1.954l-.632 2.401-2.645 1.115L6 4 4 6l1.453 1.789-1.08 2.657L2 11v2l2.401.655L5.516 16.3 4 18l2 2 1.791-1.46 2.606 1.072L11 22h2l.604-2.387 2.651-1.098C16.697 18.831 18 20 18 20l2-2-1.484-1.75 1.098-2.652 2.386-.62V11l-2.378-.605z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'user'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2M12 11a4 4 0 100-8 4 4 0 000 8z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'home'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22V12h6v10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </ng-container>\n `,\n styles: [`\n :host {\n display: inline-flex;\n line-height: 0;\n color: currentColor;\n }\n svg {\n display: block;\n }\n `]\n})\nexport class SidebarIconComponent {\n @Input() name!: SidebarIconName;\n @Input() size = 24;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink, RouterLinkActive, IsActiveMatchOptions } from '@angular/router';\nimport { SidebarIconComponent, SidebarIconName } from './sidebar-icon.component';\n\nexport interface SidebarItem {\n label: string;\n icon?: SidebarIconName;\n route?: string;\n /** Subset match para que el padre se marque activo aunque la ruta hija no esté exacta. */\n exact?: boolean;\n children?: SidebarItem[];\n}\n\n@Component({\n selector: 'svu-sidebar',\n standalone: true,\n imports: [CommonModule, RouterLink, RouterLinkActive, SidebarIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss']\n})\nexport class SidebarComponent {\n /** Items del menú (datos-driven). Soporta children para sub-navegación. */\n @Input() items: SidebarItem[] = [];\n\n /** Logo: si se pasa la URL se renderiza; alternativamente proyecta contenido con `[sidebarLogo]`. */\n @Input() logoSrc?: string;\n @Input() logoAlt = 'Logo';\n\n /** Footer hibrido: si se pasan los inputs se usa el footer por defecto.\n * Para footer custom, proyectar con `[sidebarFooter]` (gana sobre los inputs). */\n @Input() userName?: string;\n @Input() userEmail?: string;\n /** Si no se pasa, se usa la primera letra de userName. */\n @Input() userInitial?: string;\n /** Mostrar/ocultar el botón de logout en el menú de cuenta. */\n @Input() showLogout = true;\n @Input() logoutLabel = 'Cerrar sesión';\n\n /** Click en un item (incluye expandibles y hojas). */\n @Output() itemClick = new EventEmitter<SidebarItem>();\n @Output() logout = new EventEmitter<void>();\n\n @ContentChild('sidebarLogo', { read: TemplateRef }) logoTpl?: TemplateRef<unknown>;\n @ContentChild('sidebarFooter', { read: TemplateRef }) footerTpl?: TemplateRef<unknown>;\n\n expandedKeys = new Set<string>();\n accountMenuOpen = false;\n\n readonly subsetMatch: IsActiveMatchOptions = {\n paths: 'subset',\n queryParams: 'ignored',\n fragment: 'ignored',\n matrixParams: 'ignored'\n };\n\n readonly exactMatch: IsActiveMatchOptions = {\n paths: 'exact',\n queryParams: 'ignored',\n fragment: 'ignored',\n matrixParams: 'ignored'\n };\n\n constructor(private hostRef: ElementRef<HTMLElement>) {}\n\n get computedInitial(): string {\n if (this.userInitial) return this.userInitial;\n return (this.userName?.trim().charAt(0) || '').toUpperCase();\n }\n\n isExpanded(item: SidebarItem): boolean {\n return this.expandedKeys.has(item.label);\n }\n\n onItemClick(item: SidebarItem): void {\n if (item.children?.length) {\n if (this.expandedKeys.has(item.label)) {\n this.expandedKeys.delete(item.label);\n } else {\n this.expandedKeys.add(item.label);\n }\n }\n this.itemClick.emit(item);\n }\n\n toggleAccountMenu(): void {\n this.accountMenuOpen = !this.accountMenuOpen;\n }\n\n onLogoutClick(): void {\n this.accountMenuOpen = false;\n this.logout.emit();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this.accountMenuOpen) return;\n const footer = this.hostRef.nativeElement.querySelector('.svu-sidebar__footer');\n if (footer && !footer.contains(event.target as Node)) {\n this.accountMenuOpen = false;\n }\n }\n}\n","<aside class=\"svu-sidebar\">\n <div class=\"svu-sidebar__content\">\n <div class=\"svu-sidebar__top\">\n <!-- Logo: slot proyectable o input -->\n <div class=\"svu-sidebar__logo\">\n <ng-container *ngIf=\"logoTpl; else defaultLogo\" [ngTemplateOutlet]=\"logoTpl\"></ng-container>\n <ng-template #defaultLogo>\n <img *ngIf=\"logoSrc\" [src]=\"logoSrc\" [alt]=\"logoAlt\" class=\"svu-sidebar__logo-img\" />\n </ng-template>\n </div>\n\n <!-- Navigation -->\n <nav class=\"svu-sidebar__nav\">\n <ng-container *ngFor=\"let item of items\">\n <!-- Item con children (expandible) -->\n <ng-container *ngIf=\"item.children?.length; else leafItem\">\n <div\n class=\"svu-sidebar__nav-item\"\n [class.svu-sidebar__nav-item--active]=\"parentActive.isActive\"\n (click)=\"onItemClick(item)\"\n [routerLink]=\"item.route || null\"\n routerLinkActive\n #parentActive=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"subsetMatch\">\n <div class=\"svu-sidebar__nav-item-content\">\n <svu-sidebar-icon *ngIf=\"item.icon\" [name]=\"item.icon\" class=\"svu-sidebar__nav-icon\"></svu-sidebar-icon>\n <span class=\"svu-sidebar__nav-text\">{{ item.label }}</span>\n </div>\n <svu-sidebar-icon\n name=\"chevron-down\"\n [size]=\"20\"\n class=\"svu-sidebar__nav-chevron\"\n [class.svu-sidebar__nav-chevron--open]=\"isExpanded(item)\">\n </svu-sidebar-icon>\n </div>\n\n <div class=\"svu-sidebar__subnav\" *ngIf=\"isExpanded(item)\">\n <a\n *ngFor=\"let child of item.children\"\n class=\"svu-sidebar__subnav-item\"\n [routerLink]=\"child.route\"\n routerLinkActive=\"svu-sidebar__subnav-item--active\"\n [routerLinkActiveOptions]=\"child.exact ? exactMatch : subsetMatch\"\n (click)=\"onItemClick(child)\">\n {{ child.label }}\n </a>\n </div>\n </ng-container>\n\n <!-- Item simple (hoja) -->\n <ng-template #leafItem>\n <a\n class=\"svu-sidebar__nav-item\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"svu-sidebar__nav-item--active\"\n [routerLinkActiveOptions]=\"item.exact ? exactMatch : subsetMatch\"\n (click)=\"onItemClick(item)\">\n <div class=\"svu-sidebar__nav-item-content\">\n <svu-sidebar-icon *ngIf=\"item.icon\" [name]=\"item.icon\" class=\"svu-sidebar__nav-icon\"></svu-sidebar-icon>\n <span class=\"svu-sidebar__nav-text\">{{ item.label }}</span>\n </div>\n </a>\n </ng-template>\n </ng-container>\n </nav>\n </div>\n\n <!-- Footer: slot custom o default (user + logout) -->\n <div class=\"svu-sidebar__footer\">\n <div class=\"svu-sidebar__divider\"></div>\n\n <ng-container *ngIf=\"footerTpl; else defaultFooter\" [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n\n <ng-template #defaultFooter>\n <div class=\"svu-sidebar__account-wrapper\" *ngIf=\"userName\">\n <div class=\"svu-sidebar__account\" (click)=\"toggleAccountMenu()\">\n <div class=\"svu-sidebar__avatar\">\n <span class=\"svu-sidebar__avatar-text\">{{ computedInitial }}</span>\n </div>\n <div class=\"svu-sidebar__user-info\">\n <span class=\"svu-sidebar__user-name\">{{ userName }}</span>\n <span class=\"svu-sidebar__user-email\" *ngIf=\"userEmail\">{{ userEmail }}</span>\n </div>\n </div>\n\n <div *ngIf=\"accountMenuOpen && showLogout\" class=\"svu-sidebar__account-menu\">\n <button type=\"button\" class=\"svu-sidebar__account-menu-item\" (click)=\"onLogoutClick()\">\n <svu-sidebar-icon name=\"logout\" [size]=\"20\"></svu-sidebar-icon>\n <span>{{ logoutLabel }}</span>\n </button>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"svu-sidebar__border\"></div>\n</aside>\n","import { Component, Input, HostBinding, ChangeDetectionStrategy, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-option',\n standalone: true,\n imports: [CommonModule],\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'app-option',\n '[class.disabled]': 'disabled',\n '[class.selected]': 'selected'\n }\n})\nexport class OptionComponent {\n @Input() value: any;\n @Input() disabled: boolean = false;\n\n @HostBinding('class.selected')\n selected: boolean = false;\n\n @HostBinding('class.app-option')\n readonly optionClass = true;\n\n // Internal property to store text content\n private _viewValue: string = '';\n\n get viewValue(): string {\n return this._viewValue || this.getTextContent();\n }\n\n set viewValue(value: string) {\n this._viewValue = value;\n }\n\n constructor(private elementRef: ElementRef) {}\n\n /**\n * Get the text content from the element\n */\n getTextContent(): string {\n return this.elementRef.nativeElement.textContent?.trim() || '';\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n OnDestroy,\n HostListener,\n Renderer2,\n ContentChildren,\n ContentChild,\n QueryList,\n AfterContentInit,\n RendererStyleFlags2,\n TemplateRef\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Inject } from '@angular/core';\nimport { OptionComponent } from '../option/option.component';\n\n// Directive markers for prefix/suffix\nimport { Directive } from '@angular/core';\n\n@Directive({\n selector: '[prefix]',\n standalone: true\n})\nexport class SelectPrefixDirective {}\n\n@Directive({\n selector: '[suffix]',\n standalone: true\n})\nexport class SelectSuffixDirective {}\n\nexport interface SelectOption {\n value: any;\n label: string;\n disabled?: boolean;\n}\n\ninterface DropdownPosition {\n top?: string;\n bottom?: string;\n left: string;\n width: string;\n maxHeight: string;\n}\n\n@Component({\n selector: 'app-select',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, SelectPrefixDirective, SelectSuffixDirective],\n template: `\n <div class=\"select-wrapper\" [class.select-wrapper--unstyled]=\"unstyled\" [ngClass]=\"customClass\">\n <label *ngIf=\"label && !unstyled\" [for]=\"id\">{{ label }}</label>\n <div class=\"select-container\" [class.select-container--unstyled]=\"unstyled\">\n <div\n #trigger\n class=\"select-header\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [class.error]=\"hasError && !unstyled\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.select-header--unstyled]=\"unstyled\"\n [class.select-header--has-prefix]=\"hasPrefix\"\n (blur)=\"handleBlur()\"\n (click)=\"!disabled && toggleDropdown($event)\">\n <span class=\"select-prefix\" *ngIf=\"hasPrefix\">\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n <span class=\"select-placeholder\" *ngIf=\"!getSelectedLabel()\">\n {{ placeholder }}\n </span>\n <span class=\"select-selected\" *ngIf=\"getSelectedLabel()\">\n {{ getSelectedLabel() }}\n </span>\n <span class=\"select-suffix\" *ngIf=\"hasSuffix\">\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n <svg class=\"select-arrow\" [class.open]=\"isOpen\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1.5L6 6.5L11 1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage && !unstyled\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n\n <!-- Hidden container for projected options -->\n <div style=\"display: none;\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, OnDestroy, AfterContentInit {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() options: SelectOption[] | any[] = [];\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() unstyled = false;\n @Input() displayKey: string = 'label'; // Property to display as label\n @Input() valueKey: string = 'value'; // Property to use as value\n @Input() customClass: string = ''; // Custom CSS class for styling\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ContentChildren(OptionComponent) contentOptions!: QueryList<OptionComponent>;\n @ContentChild(SelectPrefixDirective) prefixDirective!: SelectPrefixDirective;\n @ContentChild(SelectSuffixDirective) suffixDirective!: SelectSuffixDirective;\n\n get hasPrefix(): boolean {\n return !!this.prefixDirective;\n }\n\n get hasSuffix(): boolean {\n return !!this.suffixDirective;\n }\n\n value: any = '';\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n private _usingContentOptions = false;\n\n private dropdownElement: HTMLElement | null = null;\n private backdropElement: HTMLElement | null = null;\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngAfterContentInit(): void {\n // Determine if using content projection or input options\n this._usingContentOptions = this.contentOptions && this.contentOptions.length > 0;\n\n // Subscribe to changes in content options\n if (this.contentOptions) {\n this.contentOptions.changes.subscribe(() => {\n this._usingContentOptions = this.contentOptions.length > 0;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyDropdown();\n }\n\n @HostListener('keydown.escape')\nonEsc() {\n this.closeDropdown();\n this.onTouched();\n}\n\n handleBlur() {\n this.onTouched();\n }\n\n /**\n * Get all options (from content or input)\n */\n private getAllOptions(): any[] {\n if (this._usingContentOptions && this.contentOptions) {\n return this.contentOptions.toArray();\n }\n return this.options || [];\n }\n\n /**\n * Get display label from option\n */\n getOptionLabel(option: any): string {\n if (option instanceof OptionComponent) {\n return option.viewValue;\n }\n return option?.[this.displayKey] || '';\n }\n\n /**\n * Get value from option\n */\n getOptionValue(option: any): any {\n if (option instanceof OptionComponent) {\n return option.value;\n }\n return option?.[this.valueKey];\n }\n\n /**\n * Check if option is disabled\n */\n isOptionDisabled(option: any): boolean {\n if (option instanceof OptionComponent) {\n return option.disabled;\n }\n return option?.disabled || false;\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Close dropdown if click is outside\n if (this.isOpen && this.dropdownElement && !this.dropdownElement.contains(event.target as Node)) {\n const triggerElement = this.trigger?.nativeElement;\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n // Create backdrop\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'select-custom-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.closeDropdown());\n this.renderer.appendChild(this.document.body, this.backdropElement);\n\n // Create dropdown\n this.dropdownElement = this.renderer.createElement('div');\n this.renderer.addClass(this.dropdownElement, 'select-custom-dropdown');\n this.renderer.addClass(this.dropdownElement, 'select-overlay-pane');\n\n // Calculate position\n const position = this.calculatePosition();\n\n // Apply positioning styles\n this.renderer.setStyle(this.dropdownElement, 'position', 'fixed');\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n this.renderer.setStyle(this.dropdownElement, 'max-height', position.maxHeight);\n this.renderer.setStyle(this.dropdownElement, 'z-index', '100000', RendererStyleFlags2.Important);\n\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n\n // Create dropdown content wrapper\n const dropdownContent = this.renderer.createElement('div');\n this.renderer.addClass(dropdownContent, 'select-dropdown');\n\n // Add options\n const allOptions = this.getAllOptions();\n allOptions.forEach(option => {\n const optionElement = this.createOptionElement(option);\n this.renderer.appendChild(dropdownContent, optionElement);\n });\n\n this.renderer.appendChild(this.dropdownElement, dropdownContent);\n this.renderer.appendChild(this.document.body, this.dropdownElement);\n\n this.isOpen = true;\n\n // Add scroll and resize listeners to reposition dropdown\n this.addRepositionListeners();\n\n // Trigger animation\n setTimeout(() => {\n if (this.dropdownElement) {\n this.renderer.addClass(this.dropdownElement, 'select-dropdown-open');\n }\n }, 10);\n }\n\n private calculatePosition(): DropdownPosition {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const dropdownMaxHeight = 300;\n const offsetY = 4;\n\n const shouldOpenAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n const position: DropdownPosition = {\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${dropdownMaxHeight}px`\n };\n\n if (shouldOpenAbove) {\n position.bottom = `${window.innerHeight - rect.top + offsetY}px`;\n } else {\n position.top = `${rect.bottom + offsetY}px`;\n }\n\n return position;\n }\n\n private addRepositionListeners(): void {\n // Create handlers\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n // Add scroll listener to window with capture phase to catch all scroll events\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n // Add resize listener\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private updateDropdownPosition(): void {\n if (!this.dropdownElement || !this.trigger) return;\n\n const position = this.calculatePosition();\n\n // Update position styles\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n\n // Remove old top/bottom styles\n this.renderer.removeStyle(this.dropdownElement, 'top');\n this.renderer.removeStyle(this.dropdownElement, 'bottom');\n\n // Apply new top/bottom position\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n }\n\n private createOptionElement(option: any): HTMLElement {\n const optionElement = this.renderer.createElement('div');\n this.renderer.addClass(optionElement, 'select-option');\n\n const optionValue = this.getOptionValue(option);\n const optionLabel = this.getOptionLabel(option);\n const optionDisabled = this.isOptionDisabled(option);\n\n if (this.isEmptyValue(optionValue)) {\n this.renderer.addClass(optionElement, 'select-option-placeholder');\n }\n\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(optionElement, 'selected');\n }\n\n if (optionDisabled) {\n this.renderer.addClass(optionElement, 'disabled');\n }\n\n // Option text\n const textSpan = this.renderer.createElement('span');\n this.renderer.addClass(textSpan, 'option-text');\n const text = this.renderer.createText(optionLabel);\n this.renderer.appendChild(textSpan, text);\n this.renderer.appendChild(optionElement, textSpan);\n\n // Check icon for selected option\n if (this.isSelected(optionValue)) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(optionElement, svg);\n }\n\n // Click handler\n if (!optionDisabled) {\n this.renderer.listen(optionElement, 'click', (event: Event) => {\n event.stopPropagation();\n this.selectOption(option);\n });\n }\n\n return optionElement;\n }\n\n private createCheckIcon(): SVGElement {\n const svg = this.renderer.createElement('svg', 'svg');\n this.renderer.addClass(svg, 'check-icon');\n this.renderer.setAttribute(svg, 'width', '14');\n this.renderer.setAttribute(svg, 'height', '10');\n this.renderer.setAttribute(svg, 'viewBox', '0 0 10 8');\n this.renderer.setAttribute(svg, 'fill', 'none');\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\n\n const path = this.renderer.createElement('path', 'svg');\n this.renderer.setAttribute(path, 'd', 'M9 1L3.5 6.5L1 4');\n this.renderer.setAttribute(path, 'stroke', '#F59100');\n this.renderer.setAttribute(path, 'stroke-width', '1.6666');\n this.renderer.setAttribute(path, 'stroke-linecap', 'round');\n this.renderer.setAttribute(path, 'stroke-linejoin', 'round');\n\n this.renderer.appendChild(svg, path);\n return svg;\n }\n\n closeDropdown(): void {\n this.destroyDropdown();\n this.isOpen = false;\n }\n\n private destroyDropdown(): void {\n // Remove listeners\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n\n if (this.dropdownElement) {\n this.renderer.removeChild(this.document.body, this.dropdownElement);\n this.dropdownElement = null;\n }\n\n if (this.backdropElement) {\n this.renderer.removeChild(this.document.body, this.backdropElement);\n this.backdropElement = null;\n }\n }\n\n selectOption(option: any): void {\n if (this.isOptionDisabled(option)) return;\n\n this.value = this.getOptionValue(option);\n this.onChange(this.value);\n this.onTouched();\n this.closeDropdown();\n }\n\n isSelected(value: any): boolean {\n return this.value === value;\n }\n\n isEmptyValue(value: any): boolean {\n return value === '' || value === null || value === undefined;\n }\n\n getSelectedLabel(): string {\n const allOptions = this.getAllOptions();\n const selectedOption = allOptions.find(opt => this.getOptionValue(opt) === this.value);\n return selectedOption ? this.getOptionLabel(selectedOption) : '';\n }\n\n writeValue(value: any): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n HostListener,\n ContentChildren,\n QueryList,\n AfterContentInit,\n OnDestroy,\n Renderer2,\n Inject,\n RendererStyleFlags2\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { OptionComponent } from '../option/option.component';\n\nexport interface MultiselectOption {\n value: any;\n label: string;\n icon?: string;\n disabled?: boolean;\n}\n\ninterface DropdownPosition {\n top?: string;\n bottom?: string;\n left: string;\n width: string;\n maxHeight: string;\n}\n\n@Component({\n selector: 'app-multiselect',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div class=\"multiselect-wrapper\" [ngClass]=\"customClass\">\n <label *ngIf=\"label\" [for]=\"id\">{{ label }}</label>\n <div class=\"multiselect-container\">\n <div\n #trigger\n class=\"multiselect-header\"\n (click)=\"toggleDropdown($event)\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.error]=\"hasError\">\n <span class=\"multiselect-placeholder\" *ngIf=\"getSelectedCount() === 0\">\n {{ placeholder || 'Selecciona uno o más...' }}\n </span>\n <span class=\"multiselect-selected\" *ngIf=\"getSelectedCount() > 0\">\n {{ getSelectedLabels() }}\n </span>\n <svg class=\"multiselect-arrow\" [class.open]=\"isOpen\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1.5L6 6.5L11 1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n\n <!-- Hidden container for projected options -->\n <div style=\"display: none;\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./multiselect.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiselectComponent),\n multi: true\n }\n ]\n})\nexport class MultiselectComponent implements ControlValueAccessor, AfterContentInit, OnDestroy {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() options: MultiselectOption[] | any[] = [];\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() displayKey: string = 'label'; // Property to display as label\n @Input() valueKey: string = 'value'; // Property to use as value\n @Input() customClass: string = ''; // Custom CSS class for styling\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ContentChildren(OptionComponent) contentOptions!: QueryList<OptionComponent>;\n\n value: any[] = [];\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n private _usingContentOptions = false;\n\n private dropdownElement: HTMLElement | null = null;\n private backdropElement: HTMLElement | null = null;\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngAfterContentInit(): void {\n // Determine if using content projection or input options\n this._usingContentOptions = this.contentOptions && this.contentOptions.length > 0;\n\n // Subscribe to changes in content options\n if (this.contentOptions) {\n this.contentOptions.changes.subscribe(() => {\n this._usingContentOptions = this.contentOptions.length > 0;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyDropdown();\n }\n\n /**\n * Get all options (from content or input)\n */\n getAllOptions(): any[] {\n if (this._usingContentOptions && this.contentOptions) {\n return this.contentOptions.toArray();\n }\n return this.options || [];\n }\n\n /**\n * Get display label from option\n */\n getOptionLabel(option: any): string {\n if (option instanceof OptionComponent) {\n return option.viewValue;\n }\n return option?.[this.displayKey] || '';\n }\n\n /**\n * Get value from option\n */\n getOptionValue(option: any): any {\n if (option instanceof OptionComponent) {\n return option.value;\n }\n return option?.[this.valueKey];\n }\n\n /**\n * Check if option is disabled\n */\n isOptionDisabled(option: any): boolean {\n if (option instanceof OptionComponent) {\n return option.disabled;\n }\n return option?.disabled || false;\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Close dropdown if click is outside\n if (this.isOpen && this.dropdownElement && !this.dropdownElement.contains(event.target as Node)) {\n const triggerElement = this.trigger?.nativeElement;\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n // Create backdrop\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'multiselect-custom-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.closeDropdown());\n this.renderer.appendChild(this.document.body, this.backdropElement);\n\n // Create dropdown\n this.dropdownElement = this.renderer.createElement('div');\n this.renderer.addClass(this.dropdownElement, 'multiselect-custom-dropdown');\n this.renderer.addClass(this.dropdownElement, 'multiselect-overlay-pane');\n\n // Calculate position\n const position = this.calculatePosition();\n\n // Apply positioning styles\n this.renderer.setStyle(this.dropdownElement, 'position', 'fixed');\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n this.renderer.setStyle(this.dropdownElement, 'max-height', position.maxHeight);\n this.renderer.setStyle(this.dropdownElement, 'z-index', '100000', RendererStyleFlags2.Important);\n\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n\n // Create dropdown content wrapper\n const dropdownContent = this.renderer.createElement('div');\n this.renderer.addClass(dropdownContent, 'multiselect-dropdown');\n\n // Add options\n const allOptions = this.getAllOptions();\n allOptions.forEach(option => {\n const optionElement = this.createOptionElement(option);\n this.renderer.appendChild(dropdownContent, optionElement);\n });\n\n this.renderer.appendChild(this.dropdownElement, dropdownContent);\n this.renderer.appendChild(this.document.body, this.dropdownElement);\n\n this.isOpen = true;\n\n // Add scroll and resize listeners to reposition dropdown\n this.addRepositionListeners();\n\n // Trigger animation\n setTimeout(() => {\n if (this.dropdownElement) {\n this.renderer.addClass(this.dropdownElement, 'multiselect-dropdown-open');\n }\n }, 10);\n }\n\n private calculatePosition(): DropdownPosition {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const dropdownMaxHeight = 300;\n const offsetY = 4;\n\n const shouldOpenAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n const position: DropdownPosition = {\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${dropdownMaxHeight}px`\n };\n\n if (shouldOpenAbove) {\n position.bottom = `${window.innerHeight - rect.top + offsetY}px`;\n } else {\n position.top = `${rect.bottom + offsetY}px`;\n }\n\n return position;\n }\n\n private addRepositionListeners(): void {\n // Create handlers\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n // Add scroll listener to window with capture phase to catch all scroll events\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n // Add resize listener\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private updateDropdownPosition(): void {\n if (!this.dropdownElement || !this.trigger) return;\n\n const position = this.calculatePosition();\n\n // Update position styles\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n\n // Remove old top/bottom styles\n this.renderer.removeStyle(this.dropdownElement, 'top');\n this.renderer.removeStyle(this.dropdownElement, 'bottom');\n\n // Apply new top/bottom position\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n }\n\n private createOptionElement(option: any): HTMLElement {\n const labelElement = this.renderer.createElement('label');\n this.renderer.addClass(labelElement, 'multiselect-option');\n\n const optionValue = this.getOptionValue(option);\n const optionLabel = this.getOptionLabel(option);\n const optionDisabled = this.isOptionDisabled(option);\n\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(labelElement, 'selected');\n }\n\n if (optionDisabled) {\n this.renderer.addClass(labelElement, 'disabled');\n }\n\n // Stop propagation on label click\n this.renderer.listen(labelElement, 'click', (event: Event) => {\n event.stopPropagation();\n });\n\n // Checkbox container\n const checkboxDiv = this.renderer.createElement('div');\n this.renderer.addClass(checkboxDiv, 'option-checkbox');\n\n // Hidden native checkbox\n const checkbox = this.renderer.createElement('input');\n this.renderer.setAttribute(checkbox, 'type', 'checkbox');\n this.renderer.setProperty(checkbox, 'checked', this.isSelected(optionValue));\n if (optionDisabled) {\n this.renderer.setProperty(checkbox, 'disabled', true);\n }\n\n // Custom checkbox span\n const customCheckbox = this.renderer.createElement('span');\n this.renderer.addClass(customCheckbox, 'checkbox-custom');\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(customCheckbox, 'checked');\n }\n\n // Check icon\n if (this.isSelected(optionValue)) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(customCheckbox, svg);\n }\n\n // Listen to change event\n this.renderer.listen(checkbox, 'change', (event: Event) => {\n event.stopPropagation();\n\n // Toggle the value\n this.toggleOption(option);\n\n // Update visual state\n const isNowSelected = this.isSelected(optionValue);\n this.renderer.setProperty(checkbox, 'checked', isNowSelected);\n\n if (isNowSelected) {\n this.renderer.addClass(labelElement, 'selected');\n this.renderer.addClass(customCheckbox, 'checked');\n // Add check icon if not present\n if (!customCheckbox.querySelector('.check-icon')) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(customCheckbox, svg);\n }\n } else {\n this.renderer.removeClass(labelElement, 'selected');\n this.renderer.removeClass(customCheckbox, 'checked');\n // Remove check icon\n const existingIcon = customCheckbox.querySelector('.check-icon');\n if (existingIcon) {\n this.renderer.removeChild(customCheckbox, existingIcon);\n }\n }\n });\n\n this.renderer.appendChild(checkboxDiv, checkbox);\n this.renderer.appendChild(checkboxDiv, customCheckbox);\n this.renderer.appendChild(labelElement, checkboxDiv);\n\n // Option text\n const textSpan = this.renderer.createElement('span');\n this.renderer.addClass(textSpan, 'option-text');\n const text = this.renderer.createText(optionLabel);\n this.renderer.appendChild(textSpan, text);\n this.renderer.appendChild(labelElement, textSpan);\n\n return labelElement;\n }\n\n private createCheckIcon(): SVGElement {\n const svg = this.renderer.createElement('svg', 'svg');\n this.renderer.addClass(svg, 'check-icon');\n this.renderer.setAttribute(svg, 'width', '14');\n this.renderer.setAttribute(svg, 'height', '10');\n this.renderer.setAttribute(svg, 'viewBox', '0 0 10 8');\n this.renderer.setAttribute(svg, 'fill', 'none');\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\n\n const path = this.renderer.createElement('path', 'svg');\n this.renderer.setAttribute(path, 'd', 'M9 1L3.5 6.5L1 4');\n this.renderer.setAttribute(path, 'stroke', '#F59100');\n this.renderer.setAttribute(path, 'stroke-width', '1.6666');\n this.renderer.setAttribute(path, 'stroke-linecap', 'round');\n this.renderer.setAttribute(path, 'stroke-linejoin', 'round');\n\n this.renderer.appendChild(svg, path);\n return svg;\n }\n\n closeDropdown(): void {\n this.destroyDropdown();\n this.isOpen = false;\n this.onTouched();\n }\n\n private destroyDropdown(): void {\n // Remove listeners\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n\n if (this.dropdownElement) {\n this.renderer.removeChild(this.document.body, this.dropdownElement);\n this.dropdownElement = null;\n }\n\n if (this.backdropElement) {\n this.renderer.removeChild(this.document.body, this.backdropElement);\n this.backdropElement = null;\n }\n }\n\n toggleOption(option: any): void {\n if (this.isOptionDisabled(option)) return;\n\n const optionValue = this.getOptionValue(option);\n const index = this.value.indexOf(optionValue);\n if (index > -1) {\n this.value = this.value.filter(v => v !== optionValue);\n } else {\n this.value = [...this.value, optionValue];\n }\n this.onChange(this.value);\n }\n\n isSelected(value: any): boolean {\n return this.value.includes(value);\n }\n\n getSelectedCount(): number {\n return this.value.length;\n }\n\n getSelectedLabels(): string {\n const allOptions = this.getAllOptions();\n const selectedOptions = allOptions.filter(opt => this.isSelected(this.getOptionValue(opt)));\n return selectedOptions.map(opt => this.getOptionLabel(opt)).join(', ');\n }\n\n writeValue(value: any): void {\n this.value = Array.isArray(value) ? value : [];\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from '../../atoms/input/input.component';\nimport { SelectComponent, SelectOption } from '../select/select.component';\n\nexport interface PhoneValue {\n countryCode: string;\n number: string;\n}\n\n@Component({\n selector: 'app-phone-input',\n standalone: true,\n imports: [CommonModule, InputComponent, SelectComponent],\n template: `\n <div class=\"svu-phone-input\" [class.svu-phone-input--error]=\"hasError\">\n <label *ngIf=\"label\" class=\"svu-phone-input__label\">\n {{ label }}\n </label>\n\n <div class=\"svu-phone-input__field\">\n <div class=\"svu-phone-input__country\">\n <ng-content select=\"[countrySelect]\"></ng-content>\n </div>\n\n <div class=\"svu-phone-input__number\">\n <ng-content select=\"[phoneInput]\"></ng-content>\n </div>\n </div>\n\n <span *ngIf=\"hasError && errorMessage\" class=\"svu-phone-input__error\">\n {{ errorMessage }}\n </span>\n </div>\n `,\n styleUrls: ['./phone-input.component.scss']\n})\nexport class PhoneInputComponent {\n @Input() label: string = 'Teléfono';\n @Input() hasError: boolean = false;\n @Input() errorMessage: string = '';\n}\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'copy-input',\n standalone: true,\n imports: [\n CommonModule\n ],\n templateUrl: './copy-input.component.html',\n styleUrl: './copy-input.component.scss'\n})\nexport class CopyInputComponent {\n @Input() value: string = '';\n @Input() icon: string = 'icon-copy-clipboard';\n @Input() copiedIcon: string = 'icon-done';\n @Input() ariaLabel: string = 'Copiar';\n\n @Output() copied = new EventEmitter<void>();\n\n isCopied = false;\n timeoutRef: any;\n\n async copyToClipboard() {\n try {\n await navigator.clipboard.writeText(this.value);\n\n this.isCopied = true;\n this.copied.emit();\n\n clearTimeout(this.timeoutRef);\n\n this.timeoutRef = setTimeout(() => {\n this.isCopied = false;\n }, 1200);\n\n } catch (err) {\n console.error('Error copiando:', err);\n }\n }\n}\n","<div class=\"copy-input-wrapper\">\n\n <!-- Tooltip -->\n <div\n class=\"copy-tooltip\"\n *ngIf=\"isCopied\"\n >\n Copiado\n </div>\n\n <!-- Componente -->\n <div\n class=\"copy-input\"\n (click)=\"copyToClipboard()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown.enter)=\"copyToClipboard()\"\n >\n <i\n class=\"copy-input__icon\"\n [ngClass]=\"isCopied ? copiedIcon : icon\">\n </i>\n\n <span class=\"copy-input__text\">\n {{ value }}\n </span>\n </div>\n</div>\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { SnackbarService } from '../../services/snackbar.service';\nimport { SnackbarData } from '../../models/snackbar.models';\n\n@Component({\n selector: 'app-snackbar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <!-- Top Right -->\n <div class=\"snackbar-container snackbar-container--top-right\" *ngIf=\"getSnackbarsByPosition('top-right').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-right')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.96 2.37695C13.2212 2.38797 14.4681 2.65061 15.627 3.14844C16.7858 3.64631 17.8337 4.37013 18.71 5.27734L18.7158 5.2832L18.7227 5.28906C19.63 6.1654 20.3537 7.21402 20.8516 8.37305C21.3494 9.53204 21.6111 10.7787 21.6221 12.04C21.633 13.3014 21.3927 14.5523 20.915 15.7197C20.4374 16.8872 19.7318 17.9479 18.8398 18.8398C17.9479 19.7318 16.8872 20.4374 15.7197 20.915C14.5523 21.3927 13.3014 21.633 12.04 21.6221C10.7787 21.6111 9.53204 21.3494 8.37305 20.8516C7.21402 20.3537 6.1654 19.63 5.28906 18.7227L5.2832 18.7158L5.27734 18.71L4.94531 18.374C4.19221 17.5705 3.58408 16.641 3.14844 15.627C2.65061 14.4681 2.38797 13.2212 2.37695 11.96C2.36599 10.6986 2.60632 9.44681 3.08398 8.2793C3.56165 7.11184 4.26724 6.05112 5.15918 5.15918C6.05112 4.26724 7.11184 3.56165 8.2793 3.08398C9.44681 2.60632 10.6986 2.36599 11.96 2.37695ZM13.6523 3.66797C11.7234 3.28574 9.7209 3.58451 7.9873 4.5127C6.25388 5.4409 4.89578 6.94166 4.14453 8.75879C3.39335 10.5759 3.29528 12.5973 3.86719 14.4785C4.43922 16.3599 5.64653 17.9847 7.28223 19.0762C8.91789 20.1676 10.8811 20.6587 12.8379 20.4648C14.7947 20.271 16.623 19.4038 18.0127 18.0127C18.8041 17.2243 19.4316 16.2872 19.8584 15.2549C20.2319 14.3515 20.4462 13.3914 20.4912 12.417L20.5 11.998C20.4981 10.0321 19.8148 8.12717 18.5664 6.6084C17.3178 5.08945 15.5811 4.05022 13.6523 3.66797ZM15 8.49414C15.0659 8.49416 15.1315 8.50686 15.1924 8.53223C15.2531 8.55755 15.3081 8.59493 15.3545 8.6416L15.3574 8.64453C15.4043 8.69099 15.4414 8.74672 15.4668 8.80762C15.4922 8.86855 15.5059 8.93399 15.5059 9C15.5058 9.06595 15.4922 9.1315 15.4668 9.19238C15.4414 9.25316 15.4042 9.3081 15.3574 9.35449V9.35547L13.0566 11.6455L12.7012 12L13.0566 12.3545L15.3574 14.6445C15.4043 14.691 15.4414 14.7467 15.4668 14.8076C15.4922 14.8685 15.5059 14.934 15.5059 15C15.5058 15.0659 15.4922 15.1315 15.4668 15.1924C15.4414 15.2532 15.4042 15.3081 15.3574 15.3545L15.3545 15.3574C15.3081 15.4042 15.2532 15.4414 15.1924 15.4668C15.1315 15.4922 15.0659 15.5058 15 15.5059C14.934 15.5059 14.8685 15.4922 14.8076 15.4668C14.7467 15.4414 14.691 15.4043 14.6445 15.3574L12.3545 13.0566L12 12.7012L11.6455 13.0566L9.35547 15.3574H9.35449C9.3081 15.4042 9.25316 15.4414 9.19238 15.4668C9.1315 15.4922 9.06595 15.5058 9 15.5059C8.93399 15.5059 8.86855 15.4922 8.80762 15.4668C8.74672 15.4414 8.69099 15.4043 8.64453 15.3574L8.6416 15.3545C8.59493 15.3081 8.55755 15.2531 8.53223 15.1924C8.50686 15.1315 8.49416 15.0659 8.49414 15C8.49414 14.9341 8.50688 14.8685 8.53223 14.8076C8.55761 14.7467 8.59475 14.691 8.6416 14.6445H8.64258L10.9424 12.3545L11.2988 12L10.9424 11.6455L8.64258 9.35547C8.54859 9.26105 8.49614 9.13325 8.49609 9C8.49609 8.86631 8.54902 8.73809 8.64355 8.64355C8.73809 8.54902 8.86631 8.49609 9 8.49609C9.10009 8.49613 9.1972 8.52542 9.2793 8.58008L9.35645 8.64355L11.6455 10.9424L12 11.2988L12.3545 10.9424L14.6445 8.64258V8.6416C14.691 8.59475 14.7467 8.55761 14.8076 8.53223C14.8685 8.50688 14.9341 8.49414 15 8.49414Z\" stroke=\"#F04438\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Top Left -->\n <div class=\"snackbar-container snackbar-container--top-left\" *ngIf=\"getSnackbarsByPosition('top-left').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-left')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Top Center -->\n <div class=\"snackbar-container snackbar-container--top-center\" *ngIf=\"getSnackbarsByPosition('top-center').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-center')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Right -->\n <div class=\"snackbar-container snackbar-container--bottom-right\" *ngIf=\"getSnackbarsByPosition('bottom-right').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-right')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Left -->\n <div class=\"snackbar-container snackbar-container--bottom-left\" *ngIf=\"getSnackbarsByPosition('bottom-left').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-left')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Center -->\n <div class=\"snackbar-container snackbar-container--bottom-center\" *ngIf=\"getSnackbarsByPosition('bottom-center').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-center')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n `,\n styleUrls: ['./snackbar.component.scss']\n})\nexport class SnackbarComponent implements OnInit, OnDestroy {\n snackbars: SnackbarData[] = [];\n private subscriptions: Subscription[] = [];\n\n constructor(private snackbarService: SnackbarService) {}\n\n ngOnInit(): void {\n // Subscribe to new snackbars\n const snackbarSub = this.snackbarService.snackbar$.subscribe((snackbar) => {\n this.snackbars.push(snackbar);\n });\n this.subscriptions.push(snackbarSub);\n\n // Subscribe to dismiss events\n const dismissSub = this.snackbarService.dismiss$.subscribe((id) => {\n if (id === 'all') {\n this.snackbars = [];\n } else {\n this.snackbars = this.snackbars.filter(s => s.id !== id);\n }\n });\n this.subscriptions.push(dismissSub);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n getSnackbarsByPosition(position: string): SnackbarData[] {\n return this.snackbars.filter(s => s.position === position);\n }\n\n dismiss(id: string): void {\n this.snackbars = this.snackbars.filter(s => s.id !== id);\n this.snackbarService.dismiss(id);\n }\n\n handleAction(snackbar: SnackbarData): void {\n if (snackbar.actionCallback) {\n snackbar.actionCallback();\n }\n this.dismiss(snackbar.id);\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AlertColor = 'default' | 'brand' | 'gray' | 'error' | 'warning' | 'success';\nexport type AlertSize = 'floating' | 'full-width';\nexport type AlertActionVariant = 'link' | 'button';\n\n@Component({\n selector: 'app-alert',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n @Input() color: AlertColor = 'default';\n @Input() size: AlertSize = 'floating';\n @Input() alertTitle: string = '';\n @Input() supportingText?: string;\n @Input() showIcon: boolean = true;\n @Input() showActions: boolean = true;\n @Input() actionVariant: AlertActionVariant = 'link';\n @Input() dismissLabel: string = 'Descartar';\n @Input() primaryActionLabel: string = 'Ver cambios';\n @Input() showClose: boolean = true;\n @Input() closeAriaLabel: string = 'Cerrar';\n\n @Output() dismiss = new EventEmitter<void>();\n @Output() primaryAction = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n get alertClasses(): string {\n return [\n 'sv-alert',\n `sv-alert--${this.color}`,\n this.size === 'full-width' ? 'sv-alert--full-width' : ''\n ].filter(Boolean).join(' ');\n }\n\n get actionClass(): string {\n return this.actionVariant === 'button' ? 'sv-alert__btn' : 'sv-alert__action';\n }\n\n get primaryActionClass(): string {\n return this.actionVariant === 'button'\n ? 'sv-alert__btn sv-alert__btn--primary'\n : 'sv-alert__action sv-alert__action--primary';\n }\n\n handleDismiss(): void {\n this.dismiss.emit();\n }\n\n handlePrimaryAction(): void {\n this.primaryAction.emit();\n }\n\n handleClose(): void {\n this.closed.emit();\n }\n}\n","<div [class]=\"alertClasses\" role=\"alert\">\n <div class=\"sv-alert__container\">\n <div class=\"sv-alert__icon\" *ngIf=\"showIcon\" aria-hidden=\"true\">\n <svg *ngIf=\"color === 'error'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.86 2h8.28L22 7.86v8.28L16.14 22H7.86L2 16.14V7.86L7.86 2Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 8v4M12 16h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color === 'warning'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 9v4M12 17h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 4 12 14.01l-3-3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color !== 'error' && color !== 'warning' && color !== 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 16v-4M12 8h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <div class=\"sv-alert__content\">\n <div class=\"sv-alert__body\">\n <p class=\"sv-alert__title\">{{ alertTitle }}</p>\n <p class=\"sv-alert__text\" *ngIf=\"supportingText\">{{ supportingText }}</p>\n </div>\n\n <div class=\"sv-alert__actions\" *ngIf=\"showActions\">\n <button type=\"button\" [class]=\"actionClass\" (click)=\"handleDismiss()\">{{ dismissLabel }}</button>\n <button type=\"button\" [class]=\"primaryActionClass\" (click)=\"handlePrimaryAction()\">{{ primaryActionLabel }}</button>\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"sv-alert__close\"\n *ngIf=\"showClose\"\n [attr.aria-label]=\"closeAriaLabel\"\n (click)=\"handleClose()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6 6 18M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n","/*\n * Public API Surface of @up_si_vale/sivale-componentes-angular\n */\n\n// Tokens\nexport * from './lib/tokens/asset-base-url.token';\n\n// Models\nexport * from './lib/models/snackbar.models';\n\n// Services\nexport * from './lib/services/snackbar.service';\n\n// Directives\nexport * from './lib/directives/asset-source.directive';\nexport * from './lib/directives/icon-source.directive';\nexport * from './lib/directives/only-number.directive';\nexport * from './lib/directives/only-letters.directive';\nexport * from './lib/directives/rfc.directive';\nexport * from './lib/directives/no-leading-space.directive';\nexport * from './lib/directives/tooltip.directive';\n\n// Atoms\nexport * from './lib/atoms/button/button.component';\nexport * from './lib/atoms/input/input.component';\nexport * from './lib/atoms/textarea/textarea.component';\nexport * from './lib/atoms/checkbox/checkbox.component';\nexport * from './lib/atoms/radio/radio.component';\nexport * from './lib/atoms/date-picker/date-picker.component';\nexport * from './lib/atoms/loader/loader.component';\n\n// Organisms\nexport * from './lib/organisms/sidebar/sidebar-icon.component';\nexport * from './lib/organisms/sidebar/sidebar.component';\n\n// Molecules\nexport * from './lib/molecules/option/option.component';\nexport * from './lib/molecules/select/select.component';\nexport * from './lib/molecules/multiselect/multiselect.component';\nexport * from './lib/molecules/phone-input/phone-input.component';\nexport * from './lib/molecules/copy-input/copy-input.component';\nexport * from './lib/molecules/snackbar/snackbar.component';\nexport * from './lib/molecules/alert/alert.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.SnackbarService","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"up_si_vale-sivale-componentes-angular.mjs","sources":["../../src/lib/tokens/asset-base-url.token.ts","../../src/lib/services/snackbar.service.ts","../../src/lib/directives/asset-source.directive.ts","../../src/lib/directives/icon-source.directive.ts","../../src/lib/directives/only-number.directive.ts","../../src/lib/directives/only-letters.directive.ts","../../src/lib/directives/rfc.directive.ts","../../src/lib/directives/no-leading-space.directive.ts","../../src/lib/directives/tooltip.directive.ts","../../src/lib/atoms/button/button.component.ts","../../src/lib/atoms/button/button.component.html","../../src/lib/atoms/input/input.component.ts","../../src/lib/atoms/textarea/textarea.component.ts","../../src/lib/atoms/checkbox/checkbox.component.ts","../../src/lib/atoms/radio/radio.component.ts","../../src/lib/atoms/date-picker/date-picker.component.ts","../../src/lib/atoms/date-picker/date-picker.component.html","../../src/lib/atoms/loader/loader.component.ts","../../src/lib/organisms/sidebar/sidebar-icon.component.ts","../../src/lib/organisms/sidebar/sidebar.component.ts","../../src/lib/organisms/sidebar/sidebar.component.html","../../src/lib/molecules/option/option.component.ts","../../src/lib/molecules/select/select.component.ts","../../src/lib/molecules/multiselect/multiselect.component.ts","../../src/lib/molecules/phone-input/phone-input.component.ts","../../src/lib/molecules/copy-input/copy-input.component.ts","../../src/lib/molecules/copy-input/copy-input.component.html","../../src/lib/molecules/snackbar/snackbar.component.ts","../../src/lib/molecules/alert/alert.component.ts","../../src/lib/molecules/alert/alert.component.html","../../src/public-api.ts","../../src/up_si_vale-sivale-componentes-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Base URL para los assets remotos del microfrontend (íconos, imágenes).\n * El consumidor debe proveerlo, normalmente con el valor de `environment.mfAssetsUrl`.\n */\nexport const ASSET_BASE_URL = new InjectionToken<string>('ASSET_BASE_URL', {\n providedIn: 'root',\n factory: () => ''\n});\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { SnackbarConfig, SnackbarData, SnackbarPosition } from '../models/snackbar.models';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SnackbarService {\n private snackbarSubject = new Subject<SnackbarData>();\n public snackbar$ = this.snackbarSubject.asObservable();\n\n private dismissSubject = new Subject<string>();\n public dismiss$ = this.dismissSubject.asObservable();\n\n private snackbarIdCounter = 0;\n\n constructor() {\n }\n\n /**\n * Show success snackbar\n */\n success(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'success',\n duration,\n position\n });\n }\n\n /**\n * Show error snackbar\n */\n error(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'error',\n duration,\n position\n });\n }\n\n /**\n * Show warning snackbar\n */\n warning(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'warning',\n duration,\n position\n });\n }\n\n /**\n * Show info snackbar\n */\n info(message: string, duration: number = 5000, position?: SnackbarPosition): void {\n this.show({\n message,\n type: 'info',\n duration,\n position\n });\n }\n\n /**\n * Show snackbar with custom configuration\n */\n show(config: SnackbarConfig): void {\n const id = `snackbar-${++this.snackbarIdCounter}`;\n const snackbarData: SnackbarData = {\n ...config,\n id,\n duration: config.duration ?? 5000,\n position: config.position ?? 'top-right'\n };\n\n this.snackbarSubject.next(snackbarData);\n\n // Auto dismiss after duration\n if (snackbarData.duration && snackbarData.duration > 0) {\n setTimeout(() => {\n this.dismiss(id);\n }, snackbarData.duration);\n }\n }\n\n /**\n * Dismiss specific snackbar by id\n */\n dismiss(id: string): void {\n this.dismissSubject.next(id);\n }\n\n /**\n * Dismiss all snackbars\n */\n dismissAll(): void {\n this.dismissSubject.next('all');\n }\n}\n","import { Directive, Input, ElementRef, OnInit, OnChanges, AfterViewInit, Inject, Optional } from '@angular/core';\nimport { ASSET_BASE_URL } from '../tokens/asset-base-url.token';\n\nexport type AssetSource = 'mf' | 'main';\n\n@Directive({\n selector: '[assetSource]',\n standalone: true\n})\nexport class AssetSourceDirective implements OnInit, OnChanges, AfterViewInit {\n @Input() assetSource: AssetSource = 'mf';\n @Input() assetPath?: string;\n\n private originalSrc: string | null = null;\n\n constructor(\n private el: ElementRef<HTMLImageElement>,\n @Optional() @Inject(ASSET_BASE_URL) private assetBaseUrl: string | null\n ) {}\n\n ngOnInit() {\n this.captureOriginalSrc();\n }\n\n ngAfterViewInit() {\n this.updateSrc();\n }\n\n ngOnChanges() {\n this.updateSrc();\n }\n\n private captureOriginalSrc() {\n if (this.el.nativeElement.tagName === 'IMG') {\n this.originalSrc = this.el.nativeElement.getAttribute('src');\n }\n }\n\n private updateSrc() {\n const assetPath = this.assetPath || this.originalSrc;\n\n if (!assetPath) {\n return;\n }\n\n const baseUrl = this.getBaseUrl();\n const fullPath = `${baseUrl}/${assetPath}`;\n\n if (this.el.nativeElement.tagName === 'IMG') {\n this.el.nativeElement.src = fullPath;\n }\n }\n\n private getBaseUrl(): string {\n switch (this.assetSource) {\n case 'mf':\n return this.assetBaseUrl ?? '';\n case 'main':\n return '/assets';\n default:\n return this.assetBaseUrl ?? '';\n }\n }\n}\n","import { Directive, Input, ElementRef, OnInit, OnChanges, AfterViewInit, Inject, Optional } from '@angular/core';\nimport { ASSET_BASE_URL } from '../tokens/asset-base-url.token';\n\nexport type IconName =\n 'user'\n | 'mail'\n | 'build'\n | 'map-pin'\n | 'money'\n | 'card'\n | 'nav-arrow-up'\n | 'nav-arrow-down'\n | 'car'\n | 'trash'\n | 'hand-card'\n | 'help-outlined'\n | 'edit'\n | 'shopping-cart';\n\n@Directive({\n selector: 'i[iconName]',\n standalone: true\n})\nexport class IconSourceDirective implements OnInit, OnChanges, AfterViewInit {\n @Input() iconName!: IconName;\n @Input() assetSource: 'mf' | 'main' = 'mf';\n\n constructor(\n private el: ElementRef<HTMLElement>,\n @Optional() @Inject(ASSET_BASE_URL) private assetBaseUrl: string | null\n ) {\n }\n\n ngOnInit() {\n this.addIconClass();\n }\n\n ngAfterViewInit() {\n this.setIconUrl();\n }\n\n ngOnChanges() {\n this.setIconUrl();\n }\n\n private addIconClass() {\n if (this.iconName) {\n this.el.nativeElement.classList.add(`icon-${this.iconName}`);\n }\n }\n\n private setIconUrl() {\n if (!this.iconName) {\n return;\n }\n\n const baseUrl = this.getBaseUrl();\n const iconUrl = `${baseUrl}/icons/${this.iconName}.svg`;\n\n this.el.nativeElement.style.maskImage = `url('${iconUrl}')`;\n this.el.nativeElement.style.webkitMaskImage = `url('${iconUrl}')`;\n }\n\n private getBaseUrl(): string {\n switch (this.assetSource) {\n case 'mf':\n return this.assetBaseUrl ?? '';\n case 'main':\n return '/assets';\n default:\n return this.assetBaseUrl ?? '';\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[onlyNumber]',\n standalone: true\n})\n\nexport class OnlyNumberDirective {\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value = event.target.value;\n event.target.value = value.replace(/\\D/g, '');\n }\n\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[onlyLetters]',\n standalone: true\n})\n\nexport class OnlyLettersDirective {\n\n private regex = /^[A-Za-zÁÉÍÓÚÜÑáéíóúüñ' -]*$/;\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value: string = event.target.value;\n\n event.target.value = value\n .split('')\n .filter(char => this.regex.test(char))\n .join('');\n }\n}\n","import { Directive, HostListener, Input, Optional, Self } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n selector: '[rfcValidator]',\n standalone: true\n})\nexport class RfcDirective {\n\n @Input() tipoContribuyente: string | null = null;\n\n constructor(@Optional() @Self() private ngControl: NgControl | null) {\n }\n\n // Función para obtener el límite según el tipo de contribuyente\n private getMaxLength(): number {\n if (this.tipoContribuyente === 'fisica') return 13;\n if (this.tipoContribuyente === 'moral') return 12;\n return 13; // Default por si no llega el valor\n }\n\n @HostListener('input', ['$event'])\n onInput(event: Event) {\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Solo letras y números\n value = value.replace(/[^a-zA-Z0-9]/g, '');\n\n // Mayúsculas\n value = value.toUpperCase();\n\n // Aplicar límite dinámico\n const max = this.getMaxLength();\n if (value.length > max) {\n value = value.substring(0, max);\n }\n\n this.ngControl?.control?.setValue(value, { emitEvent: false });\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent) {\n const pasted = event.clipboardData?.getData('text') || '';\n const max = this.getMaxLength();\n\n // Bloquear pegado con caracteres inválidos\n if (/[^a-zA-Z0-9]/.test(pasted)) {\n event.preventDefault();\n return;\n }\n\n // Bloquear pegado si excede el máximo\n if (pasted.length > max) {\n event.preventDefault();\n }\n }\n}\n\n\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[noLeadingSpace]',\n standalone: true\n})\nexport class NoLeadingSpaceDirective {\n\n @HostListener('input', ['$event'])\n onInput(event: any) {\n const value = event.target.value;\n\n // Elimina espacios al inicio\n if (value.startsWith(' ')) {\n event.target.value = value.trimStart();\n }\n }\n}\n","import {\n Directive,\n Input,\n ElementRef,\n HostListener,\n Renderer2,\n OnDestroy,\n HostBinding\n} from '@angular/core';\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right' | 'auto';\n\n@Directive({\n selector: '[appTooltip]',\n standalone: true\n})\nexport class TooltipDirective implements OnDestroy {\n @Input('appTooltip') tooltipText = '';\n @Input() tooltipPosition: TooltipPosition = 'auto';\n @Input() tooltipDelay = 300;\n @Input() tooltipMaxWidth = 280;\n @Input() tooltipClass = '';\n\n @HostBinding('style.cursor') cursor = 'help';\n\n private tooltipElement: HTMLElement | null = null;\n private showTimeout?: number;\n private hideTimeout?: number;\n\n constructor(\n private el: ElementRef,\n private renderer: Renderer2\n ) {}\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n }\n\n this.showTimeout = window.setTimeout(() => {\n this.showTooltip();\n }, this.tooltipDelay);\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = undefined;\n }\n\n this.hideTimeout = window.setTimeout(() => {\n this.hideTooltip();\n }, 100);\n }\n\n @HostListener('click')\n onClick(): void {\n // Allow click events to propagate\n }\n\n private showTooltip(): void {\n if (!this.tooltipText || this.tooltipElement) {\n return;\n }\n\n // Create tooltip element\n this.tooltipElement = this.renderer.createElement('div');\n this.renderer.addClass(this.tooltipElement, 'app-tooltip');\n\n if (this.tooltipClass) {\n this.renderer.addClass(this.tooltipElement, this.tooltipClass);\n }\n\n // Create tooltip content\n const tooltipContent = this.renderer.createElement('div');\n this.renderer.addClass(tooltipContent, 'app-tooltip-content');\n this.renderer.setStyle(tooltipContent, 'max-width', `${this.tooltipMaxWidth}px`);\n\n const textNode = this.renderer.createText(this.tooltipText);\n this.renderer.appendChild(tooltipContent, textNode);\n this.renderer.appendChild(this.tooltipElement, tooltipContent);\n\n // Create arrow element\n const arrow = this.renderer.createElement('div');\n this.renderer.addClass(arrow, 'app-tooltip-arrow');\n this.renderer.appendChild(this.tooltipElement, arrow);\n\n // Add to body\n this.renderer.appendChild(document.body, this.tooltipElement);\n\n // Position tooltip\n this.positionTooltip();\n\n // Trigger animation\n requestAnimationFrame(() => {\n if (this.tooltipElement) {\n this.renderer.addClass(this.tooltipElement, 'app-tooltip-show');\n }\n });\n }\n\n private hideTooltip(): void {\n if (!this.tooltipElement) {\n return;\n }\n\n this.renderer.removeClass(this.tooltipElement, 'app-tooltip-show');\n\n setTimeout(() => {\n if (this.tooltipElement) {\n this.renderer.removeChild(document.body, this.tooltipElement);\n this.tooltipElement = null;\n }\n }, 200);\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) {\n return;\n }\n\n const hostRect = this.el.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n const scrollX = window.scrollX || window.pageXOffset;\n const scrollY = window.scrollY || window.pageYOffset;\n const gap = 16; // Space between element and tooltip\n\n // Calculate available space in each direction\n const spaceTop = hostRect.top;\n const spaceBottom = window.innerHeight - hostRect.bottom;\n const spaceLeft = hostRect.left;\n const spaceRight = window.innerWidth - hostRect.right;\n\n let position = this.tooltipPosition;\n let top = 0;\n let left = 0;\n\n // Auto-detect best position\n if (position === 'auto') {\n if (spaceTop >= tooltipRect.height + gap) {\n position = 'top';\n } else if (spaceBottom >= tooltipRect.height + gap) {\n position = 'bottom';\n } else if (spaceRight >= tooltipRect.width + gap) {\n position = 'right';\n } else if (spaceLeft >= tooltipRect.width + gap) {\n position = 'left';\n } else {\n // Default to top if no space is sufficient\n position = 'top';\n }\n }\n\n // Calculate position based on detected/specified position\n switch (position) {\n case 'top':\n top = hostRect.top + scrollY - tooltipRect.height - gap;\n left = hostRect.left + scrollX + (hostRect.width / 2) - (tooltipRect.width / 2);\n break;\n\n case 'bottom':\n top = hostRect.bottom + scrollY + gap;\n left = hostRect.left + scrollX + (hostRect.width / 2) - (tooltipRect.width / 2);\n break;\n\n case 'left':\n top = hostRect.top + scrollY + (hostRect.height / 2) - (tooltipRect.height / 2);\n left = hostRect.left + scrollX - tooltipRect.width - gap;\n break;\n\n case 'right':\n top = hostRect.top + scrollY + (hostRect.height / 2) - (tooltipRect.height / 2);\n left = hostRect.right + scrollX + gap;\n break;\n }\n\n // Adjust horizontal position to keep tooltip within viewport\n if (position === 'top' || position === 'bottom') {\n const minLeft = scrollX + 10;\n const maxLeft = scrollX + window.innerWidth - tooltipRect.width - 10;\n left = Math.max(minLeft, Math.min(left, maxLeft));\n }\n\n // Adjust vertical position to keep tooltip within viewport\n if (position === 'left' || position === 'right') {\n const minTop = scrollY + 10;\n const maxTop = scrollY + window.innerHeight - tooltipRect.height - 10;\n top = Math.max(minTop, Math.min(top, maxTop));\n }\n\n // Apply position\n this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n this.renderer.setStyle(this.tooltipElement, 'left', `${left}px`);\n\n // Add position class for arrow styling\n this.renderer.addClass(this.tooltipElement, `app-tooltip-${position}`);\n }\n\n ngOnDestroy(): void {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n }\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout);\n }\n this.hideTooltip();\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success';\nexport type ButtonSize = 'small' | 'medium' | 'large';\nexport type ButtonType = 'button' | 'submit' | 'reset';\n\n@Component({\n selector: 'app-button',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss']\n})\nexport class ButtonComponent {\n @Input() variant: ButtonVariant = 'primary';\n @Input() size: ButtonSize = 'medium';\n @Input() type: ButtonType = 'button';\n @Input() disabled: boolean = false;\n @Input() loading: boolean = false;\n @Input() fullWidth: boolean = false;\n @Input() id?: string;\n @Input() ariaLabel?: string;\n\n @Output() onClick = new EventEmitter<MouseEvent>();\n\n get buttonClasses(): string {\n return [\n 'svu-btn',\n `svu-btn--${this.variant}`,\n `svu-btn--${this.size}`,\n this.fullWidth ? 'svu-btn--full-width' : '',\n this.loading ? 'svu-btn--loading' : '',\n this.disabled ? 'svu-btn--disabled' : ''\n ].filter(Boolean).join(' ');\n }\n\n handleClick(event: MouseEvent): void {\n if (!this.disabled && !this.loading) {\n this.onClick.emit(event);\n }\n }\n}","<button\n [type]=\"type\"\n [class]=\"buttonClasses\"\n [disabled]=\"disabled || loading\"\n [id]=\"id\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-busy]=\"loading\"\n (click)=\"handleClick($event)\">\n\n <!-- Loading spinner -->\n <span *ngIf=\"loading\" class=\"svu-btn__spinner\">\n <svg class=\"svu-spinner\" viewBox=\"0 0 24 24\">\n <circle class=\"svu-spinner__circle\" cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke-width=\"3\"></circle>\n </svg>\n </span>\n\n <!-- Content -->\n <span [class.svu-btn__content--hidden]=\"loading\" class=\"svu-btn__content\">\n <ng-content></ng-content>\n </span>\n</button>","import { Component, Input, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { IconSourceDirective } from '../../directives/icon-source.directive';\nimport { NoLeadingSpaceDirective } from '../../directives/no-leading-space.directive';\n\ntype InputFormat = 'alphanumeric' | 'currency' | 'numeric';\n\n@Component({\n selector: 'app-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, IconSourceDirective, NoLeadingSpaceDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"input-wrapper\" [class.input-wrapper--unstyled]=\"unstyled\">\n <label *ngIf=\"label && !unstyled\" [for]=\"id\">{{ label }}</label>\n <div class=\"input-container\" [class.error]=\"hasError && !unstyled\" [class.input-container--unstyled]=\"unstyled\">\n <div class=\"input-prefix-wrapper\">\n <ng-content select=\"[prefix]\"></ng-content>\n </div>\n <input\n noLeadingSpace\n [type]=\"type\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [attr.maxlength]=\"format === 'currency' ? null : maxLength\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n class=\"input-field\"\n [class.error]=\"hasError && !unstyled\"\n [class.input-field--unstyled]=\"unstyled\"\n [value]=\"formattedValue\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChange($event)\">\n <div class=\"input-suffix-wrapper\">\n <ng-content select=\"[suffix]\"></ng-content>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage && !unstyled\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styles: [`\n /* Solución para el sombreado azul del autocompletado del navegador */\n input:-webkit-autofill,\n input:-webkit-autofill:hover,\n input:-webkit-autofill:focus,\n input:-webkit-autofill:active {\n -webkit-box-shadow: 0 0 0 30px white inset !important;\n box-shadow: 0 0 0 30px white inset !important;\n -webkit-text-fill-color: #2E353A !important;\n transition: background-color 5000s ease-in-out 0s;\n }\n\n /* Wrappers para prefix y suffix con soporte completo de eventos */\n .input-prefix-wrapper,\n .input-suffix-wrapper {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-family: 'Quicksand', sans-serif;\n font-size: 14px;\n font-weight: 500;\n color: #969A9C;\n position: relative;\n z-index: 2;\n pointer-events: auto !important;\n }\n\n .input-prefix-wrapper {\n margin-right: 0.5rem;\n\n &:empty {\n display: none;\n margin-right: 0;\n }\n }\n\n .input-suffix-wrapper {\n margin-left: 0.5rem;\n\n &:empty {\n display: none;\n margin-left: 0;\n }\n }\n\n /* Asegurar que todos los elementos dentro de prefix/suffix sean clickeables */\n .input-prefix-wrapper *,\n .input-suffix-wrapper * {\n pointer-events: auto !important;\n }\n\n /* El input no debe cubrir los wrappers */\n .input-field {\n position: relative;\n z-index: 1;\n }\n `],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() type: 'text' | 'email' | 'tel' | 'password' | 'number' = 'text';\n @Input() maxLength?: number | null;\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() readonly = false;\n @Input() format: InputFormat = 'alphanumeric';\n @Input() unstyled = false; // Para usar dentro de componentes compuestos\n\n value: any = '';\n formattedValue = '';\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n writeValue(value: any): void {\n let processedValue = value || '';\n\n // For currency format, enforce maxLength on the raw value (without commas)\n if (this.format === 'currency' && this.maxLength) {\n const rawValue = String(processedValue).replace(/[^0-9.]/g, '');\n if (rawValue.length > this.maxLength) {\n processedValue = rawValue.slice(0, this.maxLength);\n }\n }\n\n // For number inputs, enforce maxLength on initial value\n if (this.type === 'number' && this.maxLength && String(processedValue).length > this.maxLength) {\n processedValue = String(processedValue).slice(0, this.maxLength);\n }\n\n this.value = processedValue;\n this.formattedValue = this.applyFormat(this.value);\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n let inputValue = target.value;\n\n // Parse the value first (removes formatting like commas)\n let rawValue = this.parseValue(inputValue);\n\n // For currency format, enforce maxLength on the raw value (without commas)\n if (this.format === 'currency' && this.maxLength && String(rawValue).length > this.maxLength) {\n rawValue = String(rawValue).slice(0, this.maxLength);\n }\n\n // For number inputs or numeric format, maxLength doesn't work natively, so we handle it manually\n if ((this.type === 'number' || this.format === 'numeric') && this.maxLength) {\n // Check the length of the raw value (without formatting)\n const rawString = String(rawValue);\n if (rawString.length > this.maxLength) {\n rawValue = rawString.slice(0, this.maxLength);\n // Update the input value to reflect the truncation\n target.value = rawValue;\n }\n }\n\n this.value = rawValue;\n this.formattedValue = this.applyFormat(rawValue);\n\n // Update the input display (for formatted inputs like currency)\n if (this.format === 'currency') {\n target.value = this.formattedValue;\n }\n\n this.onChange(rawValue);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n private parseValue(value: string): any {\n switch (this.format) {\n case 'currency':\n // Remove all non-numeric characters except decimal point\n return value.replace(/[^0-9.]/g, '');\n case 'numeric':\n // Remove all non-numeric characters (only digits allowed)\n return value.replace(/[^0-9]/g, '');\n case 'alphanumeric':\n default:\n return value;\n }\n }\n\n private applyFormat(value: any): string {\n if (!value && value !== 0) return '';\n\n switch (this.format) {\n case 'currency':\n return this.formatCurrency(value);\n case 'alphanumeric':\n default:\n return String(value);\n }\n }\n\n private formatCurrency(value: any): string {\n const numValue = typeof value === 'string' ? parseFloat(value.replace(/[^0-9.]/g, '')) : value;\n\n if (isNaN(numValue)) return '';\n\n // Format with thousands separator\n return numValue.toLocaleString('es-MX', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-textarea',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"textarea-wrapper\">\n <label *ngIf=\"label\" [for]=\"id\" class=\"textarea-label\">{{ label }}</label>\n <div class=\"textarea-container\" [class.error]=\"hasError\">\n <textarea\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [attr.maxlength]=\"maxLength\"\n class=\"textarea-field\"\n [class.error]=\"hasError\"\n [value]=\"value\"\n (blur)=\"onBlur()\"\n (input)=\"onInputChange($event)\"\n ></textarea>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styles: [`\n .textarea-wrapper {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n\n .textarea-label {\n font-family: 'Quicksand', sans-serif;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n color: #414651;\n }\n\n .textarea-container {\n width: 100%;\n\n &.error .textarea-field {\n border-color: #F04438;\n }\n }\n\n .textarea-field {\n width: 100%;\n padding: 10px 14px;\n background: #FFFFFF;\n border: 1px solid #D5D7DA;\n border-radius: 8px;\n font-family: 'Quicksand', sans-serif;\n font-weight: 400;\n font-size: 16px;\n line-height: 24px;\n color: #2E353A;\n resize: vertical;\n min-height: 100px;\n transition: all 0.2s ease;\n box-sizing: border-box;\n\n &::placeholder {\n color: #A4A7AE;\n }\n\n &:focus {\n outline: none;\n border-color: #F59100;\n box-shadow: 0 0 0 4px rgba(245, 145, 0, 0.1);\n }\n\n &:disabled {\n background: #F9FAFB;\n cursor: not-allowed;\n }\n\n &.error {\n border-color: #F04438;\n\n &:focus {\n box-shadow: 0 0 0 4px rgba(240, 68, 56, 0.1);\n }\n }\n }\n\n .field-error {\n color: #F04438;\n font-size: 0.875rem;\n font-family: 'Quicksand', sans-serif;\n }\n `],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextareaComponent),\n multi: true\n }\n ]\n})\nexport class TextareaComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() rows = 4;\n @Input() maxLength?: number;\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() readonly = false;\n\n value = '';\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n writeValue(value: any): void {\n this.value = value || '';\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLTextAreaElement;\n this.value = target.value;\n this.onChange(this.value);\n }\n\n onBlur(): void {\n this.onTouched();\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, Output, EventEmitter, SimpleChanges, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-checkbox',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div class=\"checkbox-wrapper\" [class.disabled]=\"disabled\">\n <div class=\"checkbox-container\">\n <label [for]=\"id\" class=\"checkbox-label-input\">\n <input\n type=\"checkbox\"\n [id]=\"id\"\n [disabled]=\"disabled\"\n [checked]=\"value\"\n (blur)=\"onTouched()\"\n (change)=\"onCheckboxChange($event)\">\n <span class=\"checkbox-custom\" [class.checked]=\"value\" [class.indeterminate]=\"indeterminate\">\n <!-- Paloma -->\n <svg *ngIf=\"value && !indeterminate\" class=\"check-icon\" width=\"14\" height=\"10\" viewBox=\"0 0 10 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 1L3.5 6.5L1 4\" stroke=\"#F59100\" stroke-width=\"1.6666\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <!-- Guion -->\n <svg *ngIf=\"indeterminate && !value\" class=\"minus-icon\" width=\"12\" height=\"2\" viewBox=\"0 0 12 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"12\" height=\"2\" rx=\"1\" fill=\"#F59100\"/>\n </svg>\n </span>\n </label>\n <span class=\"checkbox-text\" (click)=\"onTextClick($event)\">\n <ng-content></ng-content>\n <span *ngIf=\"label\" [innerHTML]=\"label\"></span>\n </span>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n </div>\n `,\n styleUrls: ['./checkbox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true\n }\n ]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() indeterminate = false;\n @Input()\n set checked(value: boolean) {\n this.value = !!value;\n this.cdr.markForCheck();\n }\n get checked(): boolean {\n return this.value;\n }\n\n @Output() changed = new EventEmitter<boolean>();\n\n value = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef, private elRef: ElementRef) {}\n\n ngAfterViewInit() {\n this.updateNativeIndeterminate();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['indeterminate']) {\n this.updateNativeIndeterminate();\n }\n }\n\n private updateNativeIndeterminate() {\n const input = this.elRef.nativeElement.querySelector('input[type=\"checkbox\"]') as HTMLInputElement;\n if (input) input.indeterminate = this.indeterminate;\n }\n\n onCheckboxChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value = target.checked;\n this.onChange(this.value);\n this.changed.emit(this.value); // ← EMITE EVENTO MANUAL PARA USO EXTERNO\n this.cdr.markForCheck();\n }\n\n onTextClick(event: Event): void {\n const target = event.target as HTMLElement;\n if (target.tagName === 'A' || target.closest('a')) {\n return;\n }\n\n if (this.disabled) {\n return;\n }\n\n this.value = !this.value;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = !!value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","import { Component, Input, forwardRef, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'app-radio',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div\n class=\"radio-wrapper\"\n [class.disabled]=\"disabled\"\n [class.radio-wrapper--selected]=\"isSelected\"\n (click)=\"onContainerClick()\"\n >\n <div class=\"radio-container\">\n <input\n type=\"radio\"\n [id]=\"id\"\n [name]=\"name\"\n [value]=\"radioValue\"\n [disabled]=\"disabled\"\n [checked]=\"isSelected\"\n (blur)=\"onTouched()\"\n (change)=\"onRadioChange($event)\"\n class=\"radio-input\"\n />\n <span class=\"radio-custom\" [class.checked]=\"isSelected\">\n <span class=\"radio-dot\" *ngIf=\"isSelected\"></span>\n </span>\n <span class=\"radio-text\">\n <ng-content></ng-content>\n <span *ngIf=\"label\">{{ label }}</span>\n </span>\n </div>\n </div>\n `,\n styleUrls: ['./radio.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true\n }\n ]\n})\nexport class RadioComponent implements ControlValueAccessor {\n @Input() label = '';\n @Input() id = '';\n @Input() name = '';\n @Input() radioValue: any = '';\n @Input() disabled = false;\n\n @Output() changed = new EventEmitter<any>();\n\n value: any = null;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get isSelected(): boolean {\n return this.value === this.radioValue;\n }\n\n onContainerClick(): void {\n if (this.disabled) return;\n\n this.value = this.radioValue;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n\n onRadioChange(event: Event): void {\n event.stopPropagation();\n const target = event.target as HTMLInputElement;\n if (target.checked) {\n this.value = this.radioValue;\n this.onChange(this.value);\n this.changed.emit(this.value);\n this.cdr.markForCheck();\n }\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cdr.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n OnDestroy,\n HostListener,\n Renderer2,\n OnInit\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Inject } from '@angular/core';\n\nexport interface DateRange {\n startDate: Date | null;\n endDate: Date | null;\n}\n\nexport type DatePickerValue = Date | null | DateRange;\n\ninterface CalendarDay {\n date: Date;\n isCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isInRange: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isDisabled: boolean;\n}\n\ntype FilterOption = 'hoy' | 'ayer' | 'esta-semana' | 'semana-pasada' | 'este-mes' | 'mes-pasado' | 'este-ano' | 'ano-pasado' | 'mostrar-todo';\n\n@Component({\n selector: 'app-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true\n }\n ]\n})\nexport class DatePickerComponent implements ControlValueAccessor, OnDestroy, OnInit {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = 'Seleccionar fecha';\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() rangeMode = false; // false = single date, true = date range\n @Input() iconPosition: 'left' | 'right' = 'left';\n\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ViewChild('dropdown', { read: ElementRef }) dropdown?: ElementRef;\n\n // Single date value\n singleValue: Date | null = null;\n // Range value\n rangeValue: DateRange = { startDate: null, endDate: null };\n\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n\n leftMonthDate: Date = new Date();\n rightMonthDate: Date = new Date();\n tempStartDate: Date | null = null;\n tempEndDate: Date | null = null;\n tempSingleDate: Date | null = null;\n hoverDate: Date | null = null;\n\n // Store original calendar positions for cancel\n originalLeftMonthDate: Date = new Date();\n originalRightMonthDate: Date = new Date();\n\n // Cached calendar days\n leftCalendarDays: CalendarDay[] = [];\n rightCalendarDays: CalendarDay[] = [];\n\n filterOptions: { value: FilterOption; label: string }[] = [\n { value: 'hoy', label: 'Hoy' },\n { value: 'ayer', label: 'Ayer' },\n { value: 'esta-semana', label: 'Esta semana' },\n { value: 'semana-pasada', label: 'Semana pasada' },\n { value: 'este-mes', label: 'Este mes' },\n { value: 'mes-pasado', label: 'Mes pasado' },\n { value: 'este-ano', label: 'Este año' },\n { value: 'ano-pasado', label: 'Año pasado' },\n { value: 'mostrar-todo', label: 'Mostrar todo' }\n ];\n\n selectedFilter: FilterOption | '' = '';\n\n weekDays = ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do'];\n months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];\n\n // Month/Year picker state\n showLeftMonthPicker = false;\n showRightMonthPicker = false;\n years: number[] = [];\n leftYearPickerPage = 0;\n rightYearPickerPage = 0;\n yearsPerPage = 12;\n\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n dropdownPosition: { top: string; left: string } = { top: '0px', left: '0px' };\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnInit(): void {\n this.initializeDates();\n }\n\n ngOnDestroy(): void {\n this.removeRepositionListeners();\n }\n\n private initializeDates(): void {\n const today = new Date();\n this.leftMonthDate = new Date(today.getFullYear(), today.getMonth(), 1);\n this.rightMonthDate = new Date(today.getFullYear(), today.getMonth() + 1, 1);\n this.updateCalendarDays();\n }\n\n private updateCalendarDays(): void {\n this.leftCalendarDays = this.generateCalendarDays(this.leftMonthDate);\n if (this.rangeMode) {\n this.rightCalendarDays = this.generateCalendarDays(this.rightMonthDate);\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen) return;\n\n const triggerElement = this.trigger?.nativeElement;\n const dropdownElement = this.document.querySelector('.date-picker-dropdown');\n const monthYearPickers = this.document.querySelectorAll('.month-year-picker');\n const monthYearButtons = this.document.querySelectorAll('.month-year');\n\n let isOnMonthYearButton = false;\n monthYearButtons.forEach(button => {\n if (button.contains(event.target as Node)) {\n isOnMonthYearButton = true;\n }\n });\n\n let isInsideMonthYearPicker = false;\n monthYearPickers.forEach(picker => {\n if (picker.contains(event.target as Node)) {\n isInsideMonthYearPicker = true;\n }\n });\n\n if (isOnMonthYearButton || isInsideMonthYearPicker) {\n return;\n }\n\n if (dropdownElement && dropdownElement.contains(event.target as Node)) {\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n return;\n }\n\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n if (dropdownElement && !dropdownElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n\n this.originalLeftMonthDate = new Date(this.leftMonthDate);\n this.originalRightMonthDate = new Date(this.rightMonthDate);\n\n this.leftYearPickerPage = 0;\n this.rightYearPickerPage = 0;\n\n this.isOpen = true;\n\n setTimeout(() => {\n this.updateDropdownPosition();\n this.addRepositionListeners();\n }, 0);\n }\n\n getDropdownStyle(): any {\n if (!this.trigger) return {};\n\n const position = this.calculatePosition();\n return {\n 'position': 'fixed',\n 'left': position.left,\n 'top': position.top,\n 'z-index': '10000'\n };\n }\n\n private calculatePosition(): { top: string; left: string } {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n let dropdownWidth = this.rangeMode ? 830 : 320;\n let dropdownHeight = this.rangeMode ? 520 : 400;\n\n if (this.dropdown) {\n const dropdownElement = this.dropdown.nativeElement;\n const dropdownRect = dropdownElement.getBoundingClientRect();\n\n if (dropdownRect.width > 0) {\n dropdownWidth = dropdownRect.width;\n } else {\n dropdownWidth = window.innerWidth < 768 ? 280 : (this.rangeMode ? 830 : 320);\n }\n\n if (dropdownRect.height > 0) {\n dropdownHeight = dropdownRect.height;\n }\n } else {\n dropdownWidth = window.innerWidth < 768 ? 280 : (this.rangeMode ? 830 : 320);\n }\n\n const spaceOnRight = window.innerWidth - rect.left;\n\n let left = rect.left;\n\n if (spaceOnRight < dropdownWidth) {\n left = rect.right - dropdownWidth;\n\n if (left < 0) {\n left = Math.max(8, window.innerWidth - dropdownWidth - 8);\n }\n }\n\n if (window.innerWidth < 768) {\n const centeredLeft = rect.left + (rect.width / 2) - (dropdownWidth / 2);\n const minLeft = 8;\n const maxLeft = window.innerWidth - dropdownWidth - 8;\n\n left = Math.max(minLeft, Math.min(centeredLeft, maxLeft));\n }\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n let top = rect.bottom + 4;\n\n if (spaceBelow < dropdownHeight && spaceAbove > spaceBelow) {\n top = rect.top - dropdownHeight - 4;\n }\n\n return {\n top: `${top}px`,\n left: `${left}px`\n };\n }\n\n closeDropdown(): void {\n this.leftMonthDate = new Date(this.originalLeftMonthDate);\n this.rightMonthDate = new Date(this.originalRightMonthDate);\n\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n\n this.updateCalendarDays();\n this.removeRepositionListeners();\n this.isOpen = false;\n this.hoverDate = null;\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n }\n\n private addRepositionListeners(): void {\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private removeRepositionListeners(): void {\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n }\n\n private updateDropdownPosition(): void {\n if (!this.trigger) return;\n this.dropdownPosition = this.calculatePosition();\n }\n\n getDisplayValue(): string {\n if (this.rangeMode) {\n if (this.rangeValue.startDate && this.rangeValue.endDate) {\n const start = this.formatDateShort(this.rangeValue.startDate);\n const end = this.formatDateShort(this.rangeValue.endDate);\n return `${start} - ${end}`;\n }\n } else {\n if (this.singleValue) {\n return this.formatDateShort(this.singleValue);\n }\n }\n return '';\n }\n\n formatDateShort(date: Date): string {\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n }\n\n generateCalendarDays(monthDate: Date): CalendarDay[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n let startDay = firstDay.getDay() - 1;\n if (startDay === -1) startDay = 6;\n\n const days: CalendarDay[] = [];\n\n const prevMonthLastDay = new Date(year, month, 0);\n for (let i = startDay - 1; i >= 0; i--) {\n const date = new Date(year, month - 1, prevMonthLastDay.getDate() - i);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, false));\n }\n\n for (let day = 1; day <= lastDay.getDate(); day++) {\n const date = new Date(year, month, day);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, true));\n }\n\n const remainingDays = 42 - days.length;\n for (let day = 1; day <= remainingDays; day++) {\n const date = new Date(year, month + 1, day);\n date.setHours(0, 0, 0, 0);\n days.push(this.createCalendarDay(date, false));\n }\n\n return days;\n }\n\n private createCalendarDay(date: Date, isCurrentMonth: boolean): CalendarDay {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n const isToday = dateOnly.getTime() === today.getTime();\n\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let isInRange = false;\n\n if (this.rangeMode) {\n const startDate = this.tempStartDate ? new Date(this.tempStartDate) : null;\n const endDate = this.tempEndDate ? new Date(this.tempEndDate) : null;\n\n if (startDate) startDate.setHours(0, 0, 0, 0);\n if (endDate) endDate.setHours(0, 0, 0, 0);\n\n isRangeStart = isCurrentMonth && startDate ? dateOnly.getTime() === startDate.getTime() : false;\n isRangeEnd = isCurrentMonth && endDate ? dateOnly.getTime() === endDate.getTime() : false;\n isSelected = isRangeStart || isRangeEnd;\n\n if (isCurrentMonth && startDate && endDate) {\n isInRange = dateOnly > startDate && dateOnly < endDate;\n } else if (isCurrentMonth && startDate && this.hoverDate && !endDate) {\n const hoverDateOnly = new Date(this.hoverDate);\n hoverDateOnly.setHours(0, 0, 0, 0);\n if (hoverDateOnly > startDate) {\n isInRange = dateOnly > startDate && dateOnly < hoverDateOnly;\n }\n }\n } else {\n const selectedDate = this.tempSingleDate ? new Date(this.tempSingleDate) : null;\n if (selectedDate) selectedDate.setHours(0, 0, 0, 0);\n isSelected = isCurrentMonth && selectedDate ? dateOnly.getTime() === selectedDate.getTime() : false;\n }\n\n const isDisabled = !isCurrentMonth || this.isDateDisabled(date);\n\n return {\n date,\n isCurrentMonth,\n isToday,\n isSelected,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isDisabled\n };\n }\n\n private isDateDisabled(date: Date): boolean {\n if (this.minDate && date < this.minDate) return true;\n if (this.maxDate && date > this.maxDate) return true;\n return false;\n }\n\n trackByDate(index: number, day: CalendarDay): string {\n return day.date.getTime().toString();\n }\n\n isInRange(date: Date): boolean {\n if (!this.rangeMode) return false;\n\n const dateOnly = new Date(date);\n dateOnly.setHours(0, 0, 0, 0);\n\n const startDate = this.tempStartDate ? new Date(this.tempStartDate) : null;\n const endDate = this.tempEndDate ? new Date(this.tempEndDate) : null;\n\n if (startDate) startDate.setHours(0, 0, 0, 0);\n if (endDate) endDate.setHours(0, 0, 0, 0);\n\n if (startDate && endDate) {\n return dateOnly > startDate && dateOnly < endDate;\n } else if (startDate && this.hoverDate && !endDate) {\n const hoverDateOnly = new Date(this.hoverDate);\n hoverDateOnly.setHours(0, 0, 0, 0);\n if (hoverDateOnly > startDate) {\n return dateOnly > startDate && dateOnly < hoverDateOnly;\n }\n }\n return false;\n }\n\n onDayClick(day: CalendarDay): void {\n if (day.isDisabled) return;\n\n const clickedDate = new Date(day.date);\n clickedDate.setHours(0, 0, 0, 0);\n\n if (this.rangeMode) {\n this.selectedFilter = '' as FilterOption;\n\n if (!this.tempStartDate || (this.tempStartDate && this.tempEndDate)) {\n this.tempStartDate = clickedDate;\n this.tempEndDate = null;\n this.hoverDate = null;\n } else if (this.tempStartDate && !this.tempEndDate) {\n const startDate = new Date(this.tempStartDate);\n startDate.setHours(0, 0, 0, 0);\n\n if (clickedDate.getTime() === startDate.getTime()) {\n this.tempEndDate = clickedDate;\n } else if (clickedDate > startDate) {\n this.tempEndDate = clickedDate;\n } else {\n this.tempEndDate = startDate;\n this.tempStartDate = clickedDate;\n }\n this.hoverDate = null;\n }\n } else {\n this.tempSingleDate = clickedDate;\n // Auto-apply for single date mode\n this.apply();\n return;\n }\n\n this.updateCalendarDays();\n }\n\n onDayHover(day: CalendarDay): void {\n if (day.isDisabled || !this.rangeMode) return;\n this.hoverDate = day.date;\n }\n\n onDayLeave(): void {\n this.hoverDate = null;\n }\n\n previousMonth(): void {\n if (!this.canNavigatePreviousMonth()) return;\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() - 1, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), this.rightMonthDate.getMonth() - 1, 1);\n }\n this.updateCalendarDays();\n }\n\n nextMonth(): void {\n if (!this.canNavigateNextMonth()) return;\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() + 1, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), this.rightMonthDate.getMonth() + 1, 1);\n }\n this.updateCalendarDays();\n }\n\n canNavigatePreviousMonth(): boolean {\n if (!this.minDate) return true;\n\n const newLeftMonth = new Date(this.leftMonthDate.getFullYear(), this.leftMonthDate.getMonth() - 1, 1);\n const minDateMonth = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\n\n return newLeftMonth >= minDateMonth;\n }\n\n canNavigateNextMonth(): boolean {\n if (!this.maxDate) return true;\n\n const checkMonth = this.rangeMode ? this.rightMonthDate : this.leftMonthDate;\n const newMonth = new Date(checkMonth.getFullYear(), checkMonth.getMonth() + 1, 1);\n const maxDateMonth = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);\n\n return newMonth <= maxDateMonth;\n }\n\n getMonthYear(date: Date): string {\n return `${this.months[date.getMonth()]} ${date.getFullYear()}`;\n }\n\n selectFilter(filter: FilterOption): void {\n this.selectedFilter = filter;\n this.applyFilter(filter);\n this.updateCalendarDays();\n }\n\n private applyFilter(filter: FilterOption): void {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n let startDate: Date | null = null;\n let endDate: Date | null = null;\n\n switch (filter) {\n case 'hoy':\n startDate = new Date(today);\n endDate = new Date(today);\n break;\n case 'ayer':\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 1);\n endDate = new Date(startDate);\n break;\n case 'esta-semana':\n startDate = this.getStartOfWeek(today);\n endDate = new Date(today);\n break;\n case 'semana-pasada':\n const lastWeekEnd = new Date(this.getStartOfWeek(today));\n lastWeekEnd.setDate(lastWeekEnd.getDate() - 1);\n startDate = this.getStartOfWeek(lastWeekEnd);\n endDate = lastWeekEnd;\n break;\n case 'este-mes':\n startDate = new Date(today.getFullYear(), today.getMonth(), 1);\n endDate = new Date(today);\n break;\n case 'mes-pasado':\n startDate = new Date(today.getFullYear(), today.getMonth() - 1, 1);\n endDate = new Date(today.getFullYear(), today.getMonth(), 0);\n break;\n case 'este-ano':\n startDate = new Date(today.getFullYear(), 0, 1);\n endDate = new Date(today);\n break;\n case 'ano-pasado':\n startDate = new Date(today.getFullYear() - 1, 0, 1);\n endDate = new Date(today.getFullYear() - 1, 11, 31);\n break;\n case 'mostrar-todo':\n startDate = null;\n endDate = null;\n break;\n }\n\n this.tempStartDate = startDate;\n this.tempEndDate = endDate;\n\n if (startDate) {\n this.leftMonthDate = new Date(startDate.getFullYear(), startDate.getMonth(), 1);\n this.rightMonthDate = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 1);\n } else {\n const currentDate = new Date();\n this.leftMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);\n this.rightMonthDate = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1);\n }\n }\n\n private getStartOfWeek(date: Date): Date {\n const day = date.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n const startOfWeek = new Date(date);\n startOfWeek.setDate(date.getDate() + diff);\n return startOfWeek;\n }\n\n cancel(): void {\n if (this.rangeMode) {\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.tempSingleDate = this.singleValue;\n }\n this.selectedFilter = '';\n\n this.leftMonthDate = new Date(this.originalLeftMonthDate);\n this.rightMonthDate = new Date(this.originalRightMonthDate);\n\n this.updateCalendarDays();\n this.closeDropdown();\n }\n\n apply(): void {\n if (this.rangeMode) {\n this.rangeValue = {\n startDate: this.tempStartDate,\n endDate: this.tempEndDate\n };\n this.onChange(this.rangeValue);\n } else {\n this.singleValue = this.tempSingleDate;\n this.onChange(this.singleValue);\n }\n\n this.originalLeftMonthDate = new Date(this.leftMonthDate);\n this.originalRightMonthDate = new Date(this.rightMonthDate);\n\n this.onTouched();\n\n this.removeRepositionListeners();\n this.isOpen = false;\n this.hoverDate = null;\n this.showLeftMonthPicker = false;\n this.showRightMonthPicker = false;\n }\n\n getStartDateDisplay(): string {\n if (this.tempStartDate) {\n return this.formatDateForInput(this.tempStartDate);\n }\n return 'Fecha inicio';\n }\n\n getEndDateDisplay(): string {\n if (this.tempEndDate) {\n return this.formatDateForInput(this.tempEndDate);\n }\n return 'Fecha fin';\n }\n\n private formatDateForInput(date: Date): string {\n const day = date.getDate();\n const month = date.toLocaleString('es-ES', { month: 'short' });\n const year = date.getFullYear();\n return `${day} ${month} ${year}`;\n }\n\n toggleLeftMonthPicker(event: Event): void {\n event.stopPropagation();\n this.showLeftMonthPicker = !this.showLeftMonthPicker;\n this.showRightMonthPicker = false;\n if (this.showLeftMonthPicker) {\n this.leftYearPickerPage = 0;\n }\n }\n\n toggleRightMonthPicker(event: Event): void {\n event.stopPropagation();\n this.showRightMonthPicker = !this.showRightMonthPicker;\n this.showLeftMonthPicker = false;\n if (this.showRightMonthPicker) {\n this.rightYearPickerPage = 0;\n }\n }\n\n getLeftYears(): number[] {\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + (this.leftYearPickerPage * this.yearsPerPage);\n const years: number[] = [];\n\n for (let i = 0; i < this.yearsPerPage; i++) {\n const year = baseYear - 5 + i;\n years.push(year);\n }\n\n return years;\n }\n\n getRightYears(): number[] {\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + (this.rightYearPickerPage * this.yearsPerPage);\n const years: number[] = [];\n\n for (let i = 0; i < this.yearsPerPage; i++) {\n const year = baseYear - 5 + i;\n years.push(year);\n }\n\n return years;\n }\n\n previousLeftYearPage(event: Event): void {\n event.stopPropagation();\n this.leftYearPickerPage--;\n }\n\n nextLeftYearPage(event: Event): void {\n event.stopPropagation();\n this.leftYearPickerPage++;\n }\n\n previousRightYearPage(event: Event): void {\n event.stopPropagation();\n this.rightYearPickerPage--;\n }\n\n nextRightYearPage(event: Event): void {\n event.stopPropagation();\n this.rightYearPickerPage++;\n }\n\n isMonthDisabled(monthIndex: number, calendarDate: Date): boolean {\n const testDate = new Date(calendarDate.getFullYear(), monthIndex, 1);\n\n if (this.minDate) {\n const minDateMonth = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);\n if (testDate < minDateMonth) return true;\n }\n\n if (this.maxDate) {\n const maxDateMonth = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);\n if (testDate > maxDateMonth) return true;\n }\n\n return false;\n }\n\n isYearDisabled(year: number): boolean {\n if (this.minDate && year < this.minDate.getFullYear()) return true;\n if (this.maxDate && year > this.maxDate.getFullYear()) return true;\n return false;\n }\n\n getLeftYearRangeLabel(): string {\n const years = this.getLeftYears();\n return `${years[0]} - ${years[years.length - 1]}`;\n }\n\n getRightYearRangeLabel(): string {\n const years = this.getRightYears();\n return `${years[0]} - ${years[years.length - 1]}`;\n }\n\n canNavigateLeftYearsPrevious(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + ((this.leftYearPickerPage - 1) * this.yearsPerPage);\n\n const previousPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n previousPageYears.push(baseYear - 5 + i);\n }\n\n return previousPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateLeftYearsNext(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.leftMonthDate.getFullYear();\n const baseYear = currentYear + ((this.leftYearPickerPage + 1) * this.yearsPerPage);\n\n const nextPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n nextPageYears.push(baseYear - 5 + i);\n }\n\n return nextPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateRightYearsPrevious(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + ((this.rightYearPickerPage - 1) * this.yearsPerPage);\n\n const previousPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n previousPageYears.push(baseYear - 5 + i);\n }\n\n return previousPageYears.some(year => !this.isYearDisabled(year));\n }\n\n canNavigateRightYearsNext(): boolean {\n if (!this.minDate && !this.maxDate) return true;\n\n const currentYear = this.rightMonthDate.getFullYear();\n const baseYear = currentYear + ((this.rightYearPickerPage + 1) * this.yearsPerPage);\n\n const nextPageYears: number[] = [];\n for (let i = 0; i < this.yearsPerPage; i++) {\n nextPageYears.push(baseYear - 5 + i);\n }\n\n return nextPageYears.some(year => !this.isYearDisabled(year));\n }\n\n selectLeftMonth(monthIndex: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.leftMonthDate = new Date(this.leftMonthDate.getFullYear(), monthIndex, 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(this.leftMonthDate.getFullYear(), monthIndex + 1, 1);\n }\n this.updateCalendarDays();\n this.showLeftMonthPicker = false;\n }\n\n selectRightMonth(monthIndex: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.rightMonthDate = new Date(this.rightMonthDate.getFullYear(), monthIndex, 1);\n this.leftMonthDate = new Date(this.rightMonthDate.getFullYear(), monthIndex - 1, 1);\n this.updateCalendarDays();\n this.showRightMonthPicker = false;\n }\n\n selectLeftYear(year: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.leftMonthDate = new Date(year, this.leftMonthDate.getMonth(), 1);\n if (this.rangeMode) {\n this.rightMonthDate = new Date(year, this.leftMonthDate.getMonth() + 1, 1);\n }\n this.updateCalendarDays();\n this.showLeftMonthPicker = false;\n }\n\n selectRightYear(year: number, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n this.rightMonthDate = new Date(year, this.rightMonthDate.getMonth(), 1);\n this.leftMonthDate = new Date(year, this.rightMonthDate.getMonth() - 1, 1);\n this.updateCalendarDays();\n this.showRightMonthPicker = false;\n }\n\n writeValue(value: DatePickerValue): void {\n if (this.rangeMode) {\n const rangeVal = value as DateRange;\n this.rangeValue = rangeVal || { startDate: null, endDate: null };\n this.tempStartDate = this.rangeValue.startDate;\n this.tempEndDate = this.rangeValue.endDate;\n } else {\n this.singleValue = value as Date | null;\n this.tempSingleDate = this.singleValue;\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public resetDatePicker(): void {\n if (this.rangeMode) {\n this.rangeValue = { startDate: null, endDate: null };\n this.tempStartDate = null;\n this.tempEndDate = null;\n this.onChange(this.rangeValue);\n } else {\n this.singleValue = null;\n this.tempSingleDate = null;\n this.onChange(this.singleValue);\n }\n this.selectedFilter = '';\n\n this.initializeDates();\n this.updateCalendarDays();\n }\n}\n","<div class=\"date-picker-wrapper\">\n <label *ngIf=\"label\" [for]=\"id\">{{ label }}</label>\n\n <div class=\"date-picker-container\">\n <div\n #trigger\n class=\"date-picker-input\"\n [class.error]=\"hasError\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.icon-right]=\"iconPosition === 'right'\"\n (click)=\"toggleDropdown($event)\">\n\n <svg *ngIf=\"iconPosition === 'left'\" class=\"calendar-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.66667 1.66667V4.16667M13.3333 1.66667V4.16667M2.5 7.5H17.5M4.16667 3.33333H15.8333C16.7538 3.33333 17.5 4.07953 17.5 5V16.6667C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6667V5C2.5 4.07953 3.24619 3.33333 4.16667 3.33333Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <span class=\"date-picker-placeholder\" *ngIf=\"!getDisplayValue()\">\n {{ placeholder }}\n </span>\n <span class=\"date-picker-value\" *ngIf=\"getDisplayValue()\">\n {{ getDisplayValue() }}\n </span>\n\n <svg *ngIf=\"iconPosition === 'right'\" class=\"calendar-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.66667 1.66667V4.16667M13.3333 1.66667V4.16667M2.5 7.5H17.5M4.16667 3.33333H15.8333C16.7538 3.33333 17.5 4.07953 17.5 5V16.6667C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6667V5C2.5 4.07953 3.24619 3.33333 4.16667 3.33333Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n</div>\n\n<!-- Dropdown content (rendered with fixed position) -->\n<div *ngIf=\"isOpen\" class=\"date-picker-overlay\">\n <div #dropdown class=\"date-picker-dropdown\" [class.open]=\"isOpen\" [class.range-mode]=\"rangeMode\" [ngStyle]=\"getDropdownStyle()\">\n <div class=\"date-picker-content\">\n <!-- Sidebar with filters (only for range mode) -->\n <div class=\"filter-sidebar\" *ngIf=\"rangeMode\">\n <div\n *ngFor=\"let option of filterOptions\"\n class=\"filter-option\"\n [class.active]=\"selectedFilter === option.value\"\n (click)=\"selectFilter(option.value)\">\n {{ option.label }}\n </div>\n </div>\n\n <!-- Main content (calendars + footer) -->\n <div class=\"date-picker-main\">\n <!-- Calendars -->\n <div class=\"calendars-container\">\n <!-- Left Calendar (or single calendar in single mode) -->\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigatePreviousMonth()\"\n [class.disabled]=\"!canNavigatePreviousMonth()\"\n (click)=\"previousMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 2L3.5 6L7.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"month-year-selector\">\n <button type=\"button\" class=\"month-year\" (click)=\"toggleLeftMonthPicker($event)\">\n {{ getMonthYear(leftMonthDate) }}\n </button>\n\n <!-- Month/Year Picker Dropdown -->\n <div class=\"month-year-picker\" *ngIf=\"showLeftMonthPicker\" (click)=\"$event.stopPropagation()\">\n <div class=\"picker-section\">\n <div class=\"picker-title\">Mes</div>\n <div class=\"months-grid\">\n <button\n type=\"button\"\n *ngFor=\"let month of months; let i = index\"\n class=\"month-option\"\n [class.active]=\"i === leftMonthDate.getMonth()\"\n [class.disabled]=\"isMonthDisabled(i, leftMonthDate)\"\n [disabled]=\"isMonthDisabled(i, leftMonthDate)\"\n (click)=\"selectLeftMonth(i, $event)\">\n {{ month.substring(0, 3) }}\n </button>\n </div>\n </div>\n <div class=\"picker-section\">\n <div class=\"picker-header\">\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateLeftYearsPrevious()\"\n [class.disabled]=\"!canNavigateLeftYearsPrevious()\"\n (click)=\"previousLeftYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.25 2.5L3.75 5L6.25 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"picker-title\">{{ getLeftYearRangeLabel() }}</div>\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateLeftYearsNext()\"\n [class.disabled]=\"!canNavigateLeftYearsNext()\"\n (click)=\"nextLeftYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.75 2.5L6.25 5L3.75 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n <div class=\"years-grid\">\n <button\n type=\"button\"\n *ngFor=\"let year of getLeftYears()\"\n class=\"year-option\"\n [class.active]=\"year === leftMonthDate.getFullYear()\"\n [class.disabled]=\"isYearDisabled(year)\"\n [disabled]=\"isYearDisabled(year)\"\n (click)=\"selectLeftYear(year, $event)\">\n {{ year }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigateNextMonth()\"\n [class.disabled]=\"!canNavigateNextMonth()\"\n (click)=\"nextMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2L8.5 6L4.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"calendar-grid\">\n <div class=\"weekday-header\" *ngFor=\"let day of weekDays\">\n {{ day }}\n </div>\n\n <div\n *ngFor=\"let day of leftCalendarDays; trackBy: trackByDate\"\n class=\"calendar-day\"\n [class.other-month]=\"!day.isCurrentMonth\"\n [class.today]=\"day.isToday\"\n [class.selected]=\"day.isSelected\"\n [class.in-range]=\"rangeMode && isInRange(day.date)\"\n [class.range-start]=\"day.isRangeStart\"\n [class.range-end]=\"day.isRangeEnd\"\n [class.disabled]=\"day.isDisabled\"\n (click)=\"onDayClick(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayLeave()\">\n <span>{{ day.date.getDate() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Right Calendar (only for range mode) -->\n <div class=\"calendar\" *ngIf=\"rangeMode\">\n <div class=\"calendar-header\">\n <div class=\"nav-button-placeholder\"></div>\n <div class=\"month-year-selector\">\n <button type=\"button\" class=\"month-year\" (click)=\"toggleRightMonthPicker($event)\">\n {{ getMonthYear(rightMonthDate) }}\n </button>\n\n <!-- Month/Year Picker Dropdown -->\n <div class=\"month-year-picker\" *ngIf=\"showRightMonthPicker\" (click)=\"$event.stopPropagation()\">\n <div class=\"picker-section\">\n <div class=\"picker-title\">Mes</div>\n <div class=\"months-grid\">\n <button\n type=\"button\"\n *ngFor=\"let month of months; let i = index\"\n class=\"month-option\"\n [class.active]=\"i === rightMonthDate.getMonth()\"\n [class.disabled]=\"isMonthDisabled(i, rightMonthDate)\"\n [disabled]=\"isMonthDisabled(i, rightMonthDate)\"\n (click)=\"selectRightMonth(i, $event)\">\n {{ month.substring(0, 3) }}\n </button>\n </div>\n </div>\n <div class=\"picker-section\">\n <div class=\"picker-header\">\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateRightYearsPrevious()\"\n [class.disabled]=\"!canNavigateRightYearsPrevious()\"\n (click)=\"previousRightYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.25 2.5L3.75 5L6.25 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <div class=\"picker-title\">{{ getRightYearRangeLabel() }}</div>\n <button\n type=\"button\"\n class=\"year-nav-button\"\n [disabled]=\"!canNavigateRightYearsNext()\"\n [class.disabled]=\"!canNavigateRightYearsNext()\"\n (click)=\"nextRightYearPage($event)\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.75 2.5L6.25 5L3.75 7.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n <div class=\"years-grid\">\n <button\n type=\"button\"\n *ngFor=\"let year of getRightYears()\"\n class=\"year-option\"\n [class.active]=\"year === rightMonthDate.getFullYear()\"\n [class.disabled]=\"isYearDisabled(year)\"\n [disabled]=\"isYearDisabled(year)\"\n (click)=\"selectRightYear(year, $event)\">\n {{ year }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <button\n type=\"button\"\n class=\"nav-button\"\n [disabled]=\"!canNavigateNextMonth()\"\n [class.disabled]=\"!canNavigateNextMonth()\"\n (click)=\"nextMonth()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2L8.5 6L4.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <div class=\"calendar-grid\">\n <div class=\"weekday-header\" *ngFor=\"let day of weekDays\">\n {{ day }}\n </div>\n\n <div\n *ngFor=\"let day of rightCalendarDays; trackBy: trackByDate\"\n class=\"calendar-day\"\n [class.other-month]=\"!day.isCurrentMonth\"\n [class.today]=\"day.isToday\"\n [class.selected]=\"day.isSelected\"\n [class.in-range]=\"isInRange(day.date)\"\n [class.range-start]=\"day.isRangeStart\"\n [class.range-end]=\"day.isRangeEnd\"\n [class.disabled]=\"day.isDisabled\"\n (click)=\"onDayClick(day)\"\n (mouseenter)=\"onDayHover(day)\"\n (mouseleave)=\"onDayLeave()\">\n <span>{{ day.date.getDate() }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer with dates and actions (only for range mode) -->\n <div class=\"footer\" *ngIf=\"rangeMode\">\n <div class=\"selected-dates\">\n <div class=\"date-display\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33333 1.33333V3.33333M10.6667 1.33333V3.33333M2 6H14M3.33333 2.66667H12.6667C13.403 2.66667 14 3.26362 14 4V13.3333C14 14.0697 13.403 14.6667 12.6667 14.6667H3.33333C2.59695 14.6667 2 14.0697 2 13.3333V4C2 3.26362 2.59695 2.66667 3.33333 2.66667Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"date-text\">{{ getStartDateDisplay() }}</span>\n </div>\n <span class=\"date-separator\">-</span>\n <div class=\"date-display\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33333 1.33333V3.33333M10.6667 1.33333V3.33333M2 6H14M3.33333 2.66667H12.6667C13.403 2.66667 14 3.26362 14 4V13.3333C14 14.0697 13.403 14.6667 12.6667 14.6667H3.33333C2.59695 14.6667 2 14.0697 2 13.3333V4C2 3.26362 2.59695 2.66667 3.33333 2.66667Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"date-text\">{{ getEndDateDisplay() }}</span>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"btn-cancel\" (click)=\"cancel()\">\n Cancelar\n </button>\n <button type=\"button\" class=\"btn-apply\" (click)=\"apply()\">\n Aplicar\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AssetSourceDirective } from '../../directives/asset-source.directive';\n\n@Component({\n selector: 'app-loader',\n standalone: true,\n imports: [CommonModule, AssetSourceDirective],\n template: `\n <div class=\"svu-loader-overlay\" *ngIf=\"show\">\n <div class=\"svu-loader-content\">\n <!-- Logo -->\n <div class=\"svu-loader-logo\" *ngIf=\"logo\">\n <img [src]=\"logo\" assetSource=\"mf\" alt=\"Logo\">\n </div>\n\n <!-- Image/Icon -->\n <div class=\"svu-loader-image\" *ngIf=\"image\">\n <img [src]=\"image\" assetSource=\"mf\" [alt]=\"imageAlt\">\n </div>\n\n <!-- Loading Dots Animation -->\n <div class=\"svu-loader-dots\">\n <span class=\"svu-loader-dot\"></span>\n <span class=\"svu-loader-dot\"></span>\n <span class=\"svu-loader-dot\"></span>\n </div>\n\n <!-- Message -->\n <div class=\"svu-loader-message\" *ngIf=\"message\">\n <span [innerHTML]=\"message\"></span>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent {\n @Input() show: boolean = false;\n @Input() message?: string;\n @Input() logo?: string;\n @Input() image?: string;\n @Input() imageAlt: string = 'Loading';\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type SidebarIconName =\n | 'dashboard'\n | 'file-users'\n | 'card'\n | 'logout'\n | 'chevron-down'\n | 'settings'\n | 'user'\n | 'home';\n\n@Component({\n selector: 'svu-sidebar-icon',\n standalone: true,\n imports: [CommonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-container [ngSwitch]=\"name\">\n <svg *ngSwitchCase=\"'dashboard'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 17h8M11.018 2.764L4.235 8.039c-.453.353-.68.53-.843.75a2 2 0 00-.318.65C3 9.704 3 9.991 3 10.565V17.8c0 1.12 0 1.68.218 2.108a2 2 0 00.874.874C4.52 21 5.08 21 6.2 21h11.6c1.12 0 1.68 0 2.108-.218a2 2 0 00.874-.874C21 19.48 21 18.92 21 17.8v-7.235c0-.574 0-.861-.074-1.126a2 2 0 00-.318-.65c-.163-.22-.39-.397-.843-.75l-6.783-5.275c-.351-.273-.527-.41-.72-.462a1 1 0 00-.508 0c-.193.052-.369.189-.72.462z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'file-users'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2.27V6.4c0 .56 0 .84.109 1.054a1 1 0 00.437.437C14.76 8 15.04 8 15.6 8h4.13M8 15h8M8 11h4M14 2H8.8c-1.68 0-2.52 0-3.162.327a3 3 0 00-1.311 1.311C4 4.28 4 5.12 4 6.8v10.4c0 1.68 0 2.52.327 3.162a3 3 0 001.311 1.311C6.28 22 7.12 22 8.8 22h6.4c1.68 0 2.52 0 3.162-.327a3 3 0 001.311-1.311C20 19.72 20 18.88 20 17.2V8l-6-6z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'card'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 10H2M22 11V8.2C22 7.08 22 6.52 21.782 6.092a2 2 0 00-.874-.874C20.48 5 19.92 5 18.8 5H5.2C4.08 5 3.52 5 3.092 5.218a2 2 0 00-.874.874C2 6.52 2 7.08 2 8.2V15.8c0 1.12 0 1.68.218 2.108a2 2 0 00.874.874C3.52 19 4.08 19 5.2 19H18.8c1.12 0 1.68 0 2.108-.218a2 2 0 00.874-.874C22 17.48 22 16.92 22 15.8V11z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'logout'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16 17l5-5m0 0l-5-5m5 5H9m0-9H7.8c-1.68 0-2.52 0-3.162.327a3 3 0 00-1.311 1.311C3 5.28 3 6.12 3 7.8v8.4c0 1.68 0 2.52.327 3.162a3 3 0 001.311 1.311C5.28 21 6.12 21 7.8 21H9\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'chevron-down'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5l5 5 5-5\" stroke=\"currentColor\" stroke-width=\"1.667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'settings'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 15a3 3 0 100-6 3 3 0 000 6z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19.622 10.395l-1.097-2.65L20 6l-2-2-1.735 1.483-2.707-1.113L12.935 2h-1.954l-.632 2.401-2.645 1.115L6 4 4 6l1.453 1.789-1.08 2.657L2 11v2l2.401.655L5.516 16.3 4 18l2 2 1.791-1.46 2.606 1.072L11 22h2l.604-2.387 2.651-1.098C16.697 18.831 18 20 18 20l2-2-1.484-1.75 1.098-2.652 2.386-.62V11l-2.378-.605z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'user'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2M12 11a4 4 0 100-8 4 4 0 000 8z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n\n <svg *ngSwitchCase=\"'home'\" [attr.width]=\"size\" [attr.height]=\"size\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9 22V12h6v10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </ng-container>\n `,\n styles: [`\n :host {\n display: inline-flex;\n line-height: 0;\n color: currentColor;\n }\n svg {\n display: block;\n }\n `]\n})\nexport class SidebarIconComponent {\n @Input() name!: SidebarIconName;\n @Input() size = 24;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n HostListener,\n ContentChild,\n TemplateRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterLink, RouterLinkActive, IsActiveMatchOptions } from '@angular/router';\nimport { SidebarIconComponent, SidebarIconName } from './sidebar-icon.component';\n\nexport interface SidebarItem {\n label: string;\n icon?: SidebarIconName;\n route?: string;\n /** Subset match para que el padre se marque activo aunque la ruta hija no esté exacta. */\n exact?: boolean;\n children?: SidebarItem[];\n}\n\n@Component({\n selector: 'svu-sidebar',\n standalone: true,\n imports: [CommonModule, RouterLink, RouterLinkActive, SidebarIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss']\n})\nexport class SidebarComponent {\n /** Items del menú (datos-driven). Soporta children para sub-navegación. */\n @Input() items: SidebarItem[] = [];\n\n /** Logo: si se pasa la URL se renderiza; alternativamente proyecta contenido con `[sidebarLogo]`. */\n @Input() logoSrc?: string;\n @Input() logoAlt = 'Logo';\n\n /** Footer hibrido: si se pasan los inputs se usa el footer por defecto.\n * Para footer custom, proyectar con `[sidebarFooter]` (gana sobre los inputs). */\n @Input() userName?: string;\n @Input() userEmail?: string;\n /** Si no se pasa, se usa la primera letra de userName. */\n @Input() userInitial?: string;\n /** Mostrar/ocultar el botón de logout en el menú de cuenta. */\n @Input() showLogout = true;\n @Input() logoutLabel = 'Cerrar sesión';\n\n /** Click en un item (incluye expandibles y hojas). */\n @Output() itemClick = new EventEmitter<SidebarItem>();\n @Output() logout = new EventEmitter<void>();\n\n @ContentChild('sidebarLogo', { read: TemplateRef }) logoTpl?: TemplateRef<unknown>;\n @ContentChild('sidebarFooter', { read: TemplateRef }) footerTpl?: TemplateRef<unknown>;\n\n expandedKeys = new Set<string>();\n accountMenuOpen = false;\n\n readonly subsetMatch: IsActiveMatchOptions = {\n paths: 'subset',\n queryParams: 'ignored',\n fragment: 'ignored',\n matrixParams: 'ignored'\n };\n\n readonly exactMatch: IsActiveMatchOptions = {\n paths: 'exact',\n queryParams: 'ignored',\n fragment: 'ignored',\n matrixParams: 'ignored'\n };\n\n constructor(private hostRef: ElementRef<HTMLElement>) {}\n\n get computedInitial(): string {\n if (this.userInitial) return this.userInitial;\n return (this.userName?.trim().charAt(0) || '').toUpperCase();\n }\n\n isExpanded(item: SidebarItem): boolean {\n return this.expandedKeys.has(item.label);\n }\n\n onItemClick(item: SidebarItem): void {\n if (item.children?.length) {\n if (this.expandedKeys.has(item.label)) {\n this.expandedKeys.delete(item.label);\n } else {\n this.expandedKeys.add(item.label);\n }\n }\n this.itemClick.emit(item);\n }\n\n toggleAccountMenu(): void {\n this.accountMenuOpen = !this.accountMenuOpen;\n }\n\n onLogoutClick(): void {\n this.accountMenuOpen = false;\n this.logout.emit();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this.accountMenuOpen) return;\n const footer = this.hostRef.nativeElement.querySelector('.svu-sidebar__footer');\n if (footer && !footer.contains(event.target as Node)) {\n this.accountMenuOpen = false;\n }\n }\n}\n","<aside class=\"svu-sidebar\">\n <div class=\"svu-sidebar__content\">\n <div class=\"svu-sidebar__top\">\n <!-- Logo: slot proyectable o input -->\n <div class=\"svu-sidebar__logo\">\n <ng-container *ngIf=\"logoTpl; else defaultLogo\" [ngTemplateOutlet]=\"logoTpl\"></ng-container>\n <ng-template #defaultLogo>\n <img *ngIf=\"logoSrc\" [src]=\"logoSrc\" [alt]=\"logoAlt\" class=\"svu-sidebar__logo-img\" />\n </ng-template>\n </div>\n\n <!-- Navigation -->\n <nav class=\"svu-sidebar__nav\">\n <ng-container *ngFor=\"let item of items\">\n <!-- Item con children (expandible) -->\n <ng-container *ngIf=\"item.children?.length; else leafItem\">\n <div\n class=\"svu-sidebar__nav-item\"\n [class.svu-sidebar__nav-item--active]=\"parentActive.isActive\"\n (click)=\"onItemClick(item)\"\n [routerLink]=\"item.route || null\"\n routerLinkActive\n #parentActive=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"subsetMatch\">\n <div class=\"svu-sidebar__nav-item-content\">\n <svu-sidebar-icon *ngIf=\"item.icon\" [name]=\"item.icon\" class=\"svu-sidebar__nav-icon\"></svu-sidebar-icon>\n <span class=\"svu-sidebar__nav-text\">{{ item.label }}</span>\n </div>\n <svu-sidebar-icon\n name=\"chevron-down\"\n [size]=\"20\"\n class=\"svu-sidebar__nav-chevron\"\n [class.svu-sidebar__nav-chevron--open]=\"isExpanded(item)\">\n </svu-sidebar-icon>\n </div>\n\n <div class=\"svu-sidebar__subnav\" *ngIf=\"isExpanded(item)\">\n <a\n *ngFor=\"let child of item.children\"\n class=\"svu-sidebar__subnav-item\"\n [routerLink]=\"child.route\"\n routerLinkActive=\"svu-sidebar__subnav-item--active\"\n [routerLinkActiveOptions]=\"child.exact ? exactMatch : subsetMatch\"\n (click)=\"onItemClick(child)\">\n {{ child.label }}\n </a>\n </div>\n </ng-container>\n\n <!-- Item simple (hoja) -->\n <ng-template #leafItem>\n <a\n class=\"svu-sidebar__nav-item\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"svu-sidebar__nav-item--active\"\n [routerLinkActiveOptions]=\"item.exact ? exactMatch : subsetMatch\"\n (click)=\"onItemClick(item)\">\n <div class=\"svu-sidebar__nav-item-content\">\n <svu-sidebar-icon *ngIf=\"item.icon\" [name]=\"item.icon\" class=\"svu-sidebar__nav-icon\"></svu-sidebar-icon>\n <span class=\"svu-sidebar__nav-text\">{{ item.label }}</span>\n </div>\n </a>\n </ng-template>\n </ng-container>\n </nav>\n </div>\n\n <!-- Footer: slot custom o default (user + logout) -->\n <div class=\"svu-sidebar__footer\">\n <div class=\"svu-sidebar__divider\"></div>\n\n <ng-container *ngIf=\"footerTpl; else defaultFooter\" [ngTemplateOutlet]=\"footerTpl\"></ng-container>\n\n <ng-template #defaultFooter>\n <div class=\"svu-sidebar__account-wrapper\" *ngIf=\"userName\">\n <div class=\"svu-sidebar__account\" (click)=\"toggleAccountMenu()\">\n <div class=\"svu-sidebar__avatar\">\n <span class=\"svu-sidebar__avatar-text\">{{ computedInitial }}</span>\n </div>\n <div class=\"svu-sidebar__user-info\">\n <span class=\"svu-sidebar__user-name\">{{ userName }}</span>\n <span class=\"svu-sidebar__user-email\" *ngIf=\"userEmail\">{{ userEmail }}</span>\n </div>\n </div>\n\n <div *ngIf=\"accountMenuOpen && showLogout\" class=\"svu-sidebar__account-menu\">\n <button type=\"button\" class=\"svu-sidebar__account-menu-item\" (click)=\"onLogoutClick()\">\n <svu-sidebar-icon name=\"logout\" [size]=\"20\"></svu-sidebar-icon>\n <span>{{ logoutLabel }}</span>\n </button>\n </div>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"svu-sidebar__border\"></div>\n</aside>\n","import { Component, Input, HostBinding, ChangeDetectionStrategy, ElementRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'app-option',\n standalone: true,\n imports: [CommonModule],\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'app-option',\n '[class.disabled]': 'disabled',\n '[class.selected]': 'selected'\n }\n})\nexport class OptionComponent {\n @Input() value: any;\n @Input() disabled: boolean = false;\n\n @HostBinding('class.selected')\n selected: boolean = false;\n\n @HostBinding('class.app-option')\n readonly optionClass = true;\n\n // Internal property to store text content\n private _viewValue: string = '';\n\n get viewValue(): string {\n return this._viewValue || this.getTextContent();\n }\n\n set viewValue(value: string) {\n this._viewValue = value;\n }\n\n constructor(private elementRef: ElementRef) {}\n\n /**\n * Get the text content from the element\n */\n getTextContent(): string {\n return this.elementRef.nativeElement.textContent?.trim() || '';\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n OnDestroy,\n HostListener,\n Renderer2,\n ContentChildren,\n ContentChild,\n QueryList,\n AfterContentInit,\n RendererStyleFlags2,\n TemplateRef\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { Inject } from '@angular/core';\nimport { OptionComponent } from '../option/option.component';\n\n// Directive markers for prefix/suffix\nimport { Directive } from '@angular/core';\n\n@Directive({\n selector: '[prefix]',\n standalone: true\n})\nexport class SelectPrefixDirective {}\n\n@Directive({\n selector: '[suffix]',\n standalone: true\n})\nexport class SelectSuffixDirective {}\n\nexport interface SelectOption {\n value: any;\n label: string;\n disabled?: boolean;\n}\n\ninterface DropdownPosition {\n top?: string;\n bottom?: string;\n left: string;\n width: string;\n maxHeight: string;\n}\n\n@Component({\n selector: 'app-select',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule, SelectPrefixDirective, SelectSuffixDirective],\n template: `\n <div class=\"select-wrapper\" [class.select-wrapper--unstyled]=\"unstyled\" [ngClass]=\"customClass\">\n <label *ngIf=\"label && !unstyled\" [for]=\"id\">{{ label }}</label>\n <div class=\"select-container\" [class.select-container--unstyled]=\"unstyled\">\n <div\n #trigger\n class=\"select-header\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [class.error]=\"hasError && !unstyled\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.select-header--unstyled]=\"unstyled\"\n [class.select-header--has-prefix]=\"hasPrefix\"\n (blur)=\"handleBlur()\"\n (click)=\"!disabled && toggleDropdown($event)\">\n <span class=\"select-prefix\" *ngIf=\"hasPrefix\">\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n <span class=\"select-placeholder\" *ngIf=\"!getSelectedLabel()\">\n {{ placeholder }}\n </span>\n <span class=\"select-selected\" *ngIf=\"getSelectedLabel()\">\n {{ getSelectedLabel() }}\n </span>\n <span class=\"select-suffix\" *ngIf=\"hasSuffix\">\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n <svg class=\"select-arrow\" [class.open]=\"isOpen\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1.5L6 6.5L11 1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage && !unstyled\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n\n <!-- Hidden container for projected options -->\n <div style=\"display: none;\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true\n }\n ]\n})\nexport class SelectComponent implements ControlValueAccessor, OnDestroy, AfterContentInit {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() options: SelectOption[] | any[] = [];\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() unstyled = false;\n @Input() displayKey: string = 'label'; // Property to display as label\n @Input() valueKey: string = 'value'; // Property to use as value\n @Input() customClass: string = ''; // Custom CSS class for styling\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ContentChildren(OptionComponent) contentOptions!: QueryList<OptionComponent>;\n @ContentChild(SelectPrefixDirective) prefixDirective!: SelectPrefixDirective;\n @ContentChild(SelectSuffixDirective) suffixDirective!: SelectSuffixDirective;\n\n get hasPrefix(): boolean {\n return !!this.prefixDirective;\n }\n\n get hasSuffix(): boolean {\n return !!this.suffixDirective;\n }\n\n value: any = '';\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n private _usingContentOptions = false;\n\n private dropdownElement: HTMLElement | null = null;\n private backdropElement: HTMLElement | null = null;\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngAfterContentInit(): void {\n // Determine if using content projection or input options\n this._usingContentOptions = this.contentOptions && this.contentOptions.length > 0;\n\n // Subscribe to changes in content options\n if (this.contentOptions) {\n this.contentOptions.changes.subscribe(() => {\n this._usingContentOptions = this.contentOptions.length > 0;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyDropdown();\n }\n\n @HostListener('keydown.escape')\nonEsc() {\n this.closeDropdown();\n this.onTouched();\n}\n\n handleBlur() {\n this.onTouched();\n }\n\n /**\n * Get all options (from content or input)\n */\n private getAllOptions(): any[] {\n if (this._usingContentOptions && this.contentOptions) {\n return this.contentOptions.toArray();\n }\n return this.options || [];\n }\n\n /**\n * Get display label from option\n */\n getOptionLabel(option: any): string {\n if (option instanceof OptionComponent) {\n return option.viewValue;\n }\n return option?.[this.displayKey] || '';\n }\n\n /**\n * Get value from option\n */\n getOptionValue(option: any): any {\n if (option instanceof OptionComponent) {\n return option.value;\n }\n return option?.[this.valueKey];\n }\n\n /**\n * Check if option is disabled\n */\n isOptionDisabled(option: any): boolean {\n if (option instanceof OptionComponent) {\n return option.disabled;\n }\n return option?.disabled || false;\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Close dropdown if click is outside\n if (this.isOpen && this.dropdownElement && !this.dropdownElement.contains(event.target as Node)) {\n const triggerElement = this.trigger?.nativeElement;\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n // Create backdrop\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'select-custom-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.closeDropdown());\n this.renderer.appendChild(this.document.body, this.backdropElement);\n\n // Create dropdown\n this.dropdownElement = this.renderer.createElement('div');\n this.renderer.addClass(this.dropdownElement, 'select-custom-dropdown');\n this.renderer.addClass(this.dropdownElement, 'select-overlay-pane');\n\n // Calculate position\n const position = this.calculatePosition();\n\n // Apply positioning styles\n this.renderer.setStyle(this.dropdownElement, 'position', 'fixed');\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n this.renderer.setStyle(this.dropdownElement, 'max-height', position.maxHeight);\n this.renderer.setStyle(this.dropdownElement, 'z-index', '100000', RendererStyleFlags2.Important);\n\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n\n // Create dropdown content wrapper\n const dropdownContent = this.renderer.createElement('div');\n this.renderer.addClass(dropdownContent, 'select-dropdown');\n\n // Add options\n const allOptions = this.getAllOptions();\n allOptions.forEach(option => {\n const optionElement = this.createOptionElement(option);\n this.renderer.appendChild(dropdownContent, optionElement);\n });\n\n this.renderer.appendChild(this.dropdownElement, dropdownContent);\n this.renderer.appendChild(this.document.body, this.dropdownElement);\n\n this.isOpen = true;\n\n // Add scroll and resize listeners to reposition dropdown\n this.addRepositionListeners();\n\n // Trigger animation\n setTimeout(() => {\n if (this.dropdownElement) {\n this.renderer.addClass(this.dropdownElement, 'select-dropdown-open');\n }\n }, 10);\n }\n\n private calculatePosition(): DropdownPosition {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const dropdownMaxHeight = 300;\n const offsetY = 4;\n\n const shouldOpenAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n const position: DropdownPosition = {\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${dropdownMaxHeight}px`\n };\n\n if (shouldOpenAbove) {\n position.bottom = `${window.innerHeight - rect.top + offsetY}px`;\n } else {\n position.top = `${rect.bottom + offsetY}px`;\n }\n\n return position;\n }\n\n private addRepositionListeners(): void {\n // Create handlers\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n // Add scroll listener to window with capture phase to catch all scroll events\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n // Add resize listener\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private updateDropdownPosition(): void {\n if (!this.dropdownElement || !this.trigger) return;\n\n const position = this.calculatePosition();\n\n // Update position styles\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n\n // Remove old top/bottom styles\n this.renderer.removeStyle(this.dropdownElement, 'top');\n this.renderer.removeStyle(this.dropdownElement, 'bottom');\n\n // Apply new top/bottom position\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n }\n\n private createOptionElement(option: any): HTMLElement {\n const optionElement = this.renderer.createElement('div');\n this.renderer.addClass(optionElement, 'select-option');\n\n const optionValue = this.getOptionValue(option);\n const optionLabel = this.getOptionLabel(option);\n const optionDisabled = this.isOptionDisabled(option);\n\n if (this.isEmptyValue(optionValue)) {\n this.renderer.addClass(optionElement, 'select-option-placeholder');\n }\n\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(optionElement, 'selected');\n }\n\n if (optionDisabled) {\n this.renderer.addClass(optionElement, 'disabled');\n }\n\n // Option text\n const textSpan = this.renderer.createElement('span');\n this.renderer.addClass(textSpan, 'option-text');\n const text = this.renderer.createText(optionLabel);\n this.renderer.appendChild(textSpan, text);\n this.renderer.appendChild(optionElement, textSpan);\n\n // Check icon for selected option\n if (this.isSelected(optionValue)) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(optionElement, svg);\n }\n\n // Click handler\n if (!optionDisabled) {\n this.renderer.listen(optionElement, 'click', (event: Event) => {\n event.stopPropagation();\n this.selectOption(option);\n });\n }\n\n return optionElement;\n }\n\n private createCheckIcon(): SVGElement {\n const svg = this.renderer.createElement('svg', 'svg');\n this.renderer.addClass(svg, 'check-icon');\n this.renderer.setAttribute(svg, 'width', '14');\n this.renderer.setAttribute(svg, 'height', '10');\n this.renderer.setAttribute(svg, 'viewBox', '0 0 10 8');\n this.renderer.setAttribute(svg, 'fill', 'none');\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\n\n const path = this.renderer.createElement('path', 'svg');\n this.renderer.setAttribute(path, 'd', 'M9 1L3.5 6.5L1 4');\n this.renderer.setAttribute(path, 'stroke', '#F59100');\n this.renderer.setAttribute(path, 'stroke-width', '1.6666');\n this.renderer.setAttribute(path, 'stroke-linecap', 'round');\n this.renderer.setAttribute(path, 'stroke-linejoin', 'round');\n\n this.renderer.appendChild(svg, path);\n return svg;\n }\n\n closeDropdown(): void {\n this.destroyDropdown();\n this.isOpen = false;\n }\n\n private destroyDropdown(): void {\n // Remove listeners\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n\n if (this.dropdownElement) {\n this.renderer.removeChild(this.document.body, this.dropdownElement);\n this.dropdownElement = null;\n }\n\n if (this.backdropElement) {\n this.renderer.removeChild(this.document.body, this.backdropElement);\n this.backdropElement = null;\n }\n }\n\n selectOption(option: any): void {\n if (this.isOptionDisabled(option)) return;\n\n this.value = this.getOptionValue(option);\n this.onChange(this.value);\n this.onTouched();\n this.closeDropdown();\n }\n\n isSelected(value: any): boolean {\n return this.value === value;\n }\n\n isEmptyValue(value: any): boolean {\n return value === '' || value === null || value === undefined;\n }\n\n getSelectedLabel(): string {\n const allOptions = this.getAllOptions();\n const selectedOption = allOptions.find(opt => this.getOptionValue(opt) === this.value);\n return selectedOption ? this.getOptionLabel(selectedOption) : '';\n }\n\n writeValue(value: any): void {\n this.value = value || '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import {\n Component,\n Input,\n forwardRef,\n ViewChild,\n ElementRef,\n HostListener,\n ContentChildren,\n QueryList,\n AfterContentInit,\n OnDestroy,\n Renderer2,\n Inject,\n RendererStyleFlags2\n} from '@angular/core';\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { OptionComponent } from '../option/option.component';\n\nexport interface MultiselectOption {\n value: any;\n label: string;\n icon?: string;\n disabled?: boolean;\n}\n\ninterface DropdownPosition {\n top?: string;\n bottom?: string;\n left: string;\n width: string;\n maxHeight: string;\n}\n\n@Component({\n selector: 'app-multiselect',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, FormsModule],\n template: `\n <div class=\"multiselect-wrapper\" [ngClass]=\"customClass\">\n <label *ngIf=\"label\" [for]=\"id\">{{ label }}</label>\n <div class=\"multiselect-container\">\n <div\n #trigger\n class=\"multiselect-header\"\n (click)=\"toggleDropdown($event)\"\n [class.disabled]=\"disabled\"\n [class.open]=\"isOpen\"\n [class.error]=\"hasError\">\n <span class=\"multiselect-placeholder\" *ngIf=\"getSelectedCount() === 0\">\n {{ placeholder || 'Selecciona uno o más...' }}\n </span>\n <span class=\"multiselect-selected\" *ngIf=\"getSelectedCount() > 0\">\n {{ getSelectedLabels() }}\n </span>\n <svg class=\"multiselect-arrow\" [class.open]=\"isOpen\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1.5L6 6.5L11 1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n <div *ngIf=\"hasError && errorMessage\" class=\"field-error\">\n {{ errorMessage }}\n </div>\n\n <!-- Hidden container for projected options -->\n <div style=\"display: none;\">\n <ng-content></ng-content>\n </div>\n </div>\n `,\n styleUrls: ['./multiselect.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiselectComponent),\n multi: true\n }\n ]\n})\nexport class MultiselectComponent implements ControlValueAccessor, AfterContentInit, OnDestroy {\n @Input() label = '';\n @Input() id = '';\n @Input() placeholder = '';\n @Input() options: MultiselectOption[] | any[] = [];\n @Input() hasError = false;\n @Input() errorMessage = '';\n @Input() disabled = false;\n @Input() displayKey: string = 'label'; // Property to display as label\n @Input() valueKey: string = 'value'; // Property to use as value\n @Input() customClass: string = ''; // Custom CSS class for styling\n @ViewChild('trigger', { read: ElementRef }) trigger!: ElementRef;\n @ContentChildren(OptionComponent) contentOptions!: QueryList<OptionComponent>;\n\n value: any[] = [];\n isOpen = false;\n onChange: any = () => {};\n onTouched: any = () => {};\n private _usingContentOptions = false;\n\n private dropdownElement: HTMLElement | null = null;\n private backdropElement: HTMLElement | null = null;\n private scrollHandler: (() => void) | null = null;\n private resizeHandler: (() => void) | null = null;\n\n constructor(\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngAfterContentInit(): void {\n // Determine if using content projection or input options\n this._usingContentOptions = this.contentOptions && this.contentOptions.length > 0;\n\n // Subscribe to changes in content options\n if (this.contentOptions) {\n this.contentOptions.changes.subscribe(() => {\n this._usingContentOptions = this.contentOptions.length > 0;\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyDropdown();\n }\n\n /**\n * Get all options (from content or input)\n */\n getAllOptions(): any[] {\n if (this._usingContentOptions && this.contentOptions) {\n return this.contentOptions.toArray();\n }\n return this.options || [];\n }\n\n /**\n * Get display label from option\n */\n getOptionLabel(option: any): string {\n if (option instanceof OptionComponent) {\n return option.viewValue;\n }\n return option?.[this.displayKey] || '';\n }\n\n /**\n * Get value from option\n */\n getOptionValue(option: any): any {\n if (option instanceof OptionComponent) {\n return option.value;\n }\n return option?.[this.valueKey];\n }\n\n /**\n * Check if option is disabled\n */\n isOptionDisabled(option: any): boolean {\n if (option instanceof OptionComponent) {\n return option.disabled;\n }\n return option?.disabled || false;\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n // Close dropdown if click is outside\n if (this.isOpen && this.dropdownElement && !this.dropdownElement.contains(event.target as Node)) {\n const triggerElement = this.trigger?.nativeElement;\n if (triggerElement && !triggerElement.contains(event.target as Node)) {\n this.closeDropdown();\n }\n }\n }\n\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n if (this.disabled) return;\n\n if (this.isOpen) {\n this.closeDropdown();\n } else {\n this.openDropdown();\n }\n }\n\n private openDropdown(): void {\n if (!this.trigger) return;\n\n // Create backdrop\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'multiselect-custom-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.closeDropdown());\n this.renderer.appendChild(this.document.body, this.backdropElement);\n\n // Create dropdown\n this.dropdownElement = this.renderer.createElement('div');\n this.renderer.addClass(this.dropdownElement, 'multiselect-custom-dropdown');\n this.renderer.addClass(this.dropdownElement, 'multiselect-overlay-pane');\n\n // Calculate position\n const position = this.calculatePosition();\n\n // Apply positioning styles\n this.renderer.setStyle(this.dropdownElement, 'position', 'fixed');\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n this.renderer.setStyle(this.dropdownElement, 'max-height', position.maxHeight);\n this.renderer.setStyle(this.dropdownElement, 'z-index', '100000', RendererStyleFlags2.Important);\n\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n\n // Create dropdown content wrapper\n const dropdownContent = this.renderer.createElement('div');\n this.renderer.addClass(dropdownContent, 'multiselect-dropdown');\n\n // Add options\n const allOptions = this.getAllOptions();\n allOptions.forEach(option => {\n const optionElement = this.createOptionElement(option);\n this.renderer.appendChild(dropdownContent, optionElement);\n });\n\n this.renderer.appendChild(this.dropdownElement, dropdownContent);\n this.renderer.appendChild(this.document.body, this.dropdownElement);\n\n this.isOpen = true;\n\n // Add scroll and resize listeners to reposition dropdown\n this.addRepositionListeners();\n\n // Trigger animation\n setTimeout(() => {\n if (this.dropdownElement) {\n this.renderer.addClass(this.dropdownElement, 'multiselect-dropdown-open');\n }\n }, 10);\n }\n\n private calculatePosition(): DropdownPosition {\n const triggerElement = this.trigger.nativeElement;\n const rect = triggerElement.getBoundingClientRect();\n\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n const dropdownMaxHeight = 300;\n const offsetY = 4;\n\n const shouldOpenAbove = spaceBelow < 200 && spaceAbove > spaceBelow;\n\n const position: DropdownPosition = {\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n maxHeight: `${dropdownMaxHeight}px`\n };\n\n if (shouldOpenAbove) {\n position.bottom = `${window.innerHeight - rect.top + offsetY}px`;\n } else {\n position.top = `${rect.bottom + offsetY}px`;\n }\n\n return position;\n }\n\n private addRepositionListeners(): void {\n // Create handlers\n const scrollHandler = () => this.updateDropdownPosition();\n const resizeHandler = () => this.updateDropdownPosition();\n\n // Add scroll listener to window with capture phase to catch all scroll events\n window.addEventListener('scroll', scrollHandler, true);\n this.scrollHandler = () => window.removeEventListener('scroll', scrollHandler, true);\n\n // Add resize listener\n window.addEventListener('resize', resizeHandler);\n this.resizeHandler = () => window.removeEventListener('resize', resizeHandler);\n }\n\n private updateDropdownPosition(): void {\n if (!this.dropdownElement || !this.trigger) return;\n\n const position = this.calculatePosition();\n\n // Update position styles\n this.renderer.setStyle(this.dropdownElement, 'left', position.left);\n this.renderer.setStyle(this.dropdownElement, 'width', position.width);\n\n // Remove old top/bottom styles\n this.renderer.removeStyle(this.dropdownElement, 'top');\n this.renderer.removeStyle(this.dropdownElement, 'bottom');\n\n // Apply new top/bottom position\n if (position.top) {\n this.renderer.setStyle(this.dropdownElement, 'top', position.top);\n } else if (position.bottom) {\n this.renderer.setStyle(this.dropdownElement, 'bottom', position.bottom);\n }\n }\n\n private createOptionElement(option: any): HTMLElement {\n const labelElement = this.renderer.createElement('label');\n this.renderer.addClass(labelElement, 'multiselect-option');\n\n const optionValue = this.getOptionValue(option);\n const optionLabel = this.getOptionLabel(option);\n const optionDisabled = this.isOptionDisabled(option);\n\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(labelElement, 'selected');\n }\n\n if (optionDisabled) {\n this.renderer.addClass(labelElement, 'disabled');\n }\n\n // Stop propagation on label click\n this.renderer.listen(labelElement, 'click', (event: Event) => {\n event.stopPropagation();\n });\n\n // Checkbox container\n const checkboxDiv = this.renderer.createElement('div');\n this.renderer.addClass(checkboxDiv, 'option-checkbox');\n\n // Hidden native checkbox\n const checkbox = this.renderer.createElement('input');\n this.renderer.setAttribute(checkbox, 'type', 'checkbox');\n this.renderer.setProperty(checkbox, 'checked', this.isSelected(optionValue));\n if (optionDisabled) {\n this.renderer.setProperty(checkbox, 'disabled', true);\n }\n\n // Custom checkbox span\n const customCheckbox = this.renderer.createElement('span');\n this.renderer.addClass(customCheckbox, 'checkbox-custom');\n if (this.isSelected(optionValue)) {\n this.renderer.addClass(customCheckbox, 'checked');\n }\n\n // Check icon\n if (this.isSelected(optionValue)) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(customCheckbox, svg);\n }\n\n // Listen to change event\n this.renderer.listen(checkbox, 'change', (event: Event) => {\n event.stopPropagation();\n\n // Toggle the value\n this.toggleOption(option);\n\n // Update visual state\n const isNowSelected = this.isSelected(optionValue);\n this.renderer.setProperty(checkbox, 'checked', isNowSelected);\n\n if (isNowSelected) {\n this.renderer.addClass(labelElement, 'selected');\n this.renderer.addClass(customCheckbox, 'checked');\n // Add check icon if not present\n if (!customCheckbox.querySelector('.check-icon')) {\n const svg = this.createCheckIcon();\n this.renderer.appendChild(customCheckbox, svg);\n }\n } else {\n this.renderer.removeClass(labelElement, 'selected');\n this.renderer.removeClass(customCheckbox, 'checked');\n // Remove check icon\n const existingIcon = customCheckbox.querySelector('.check-icon');\n if (existingIcon) {\n this.renderer.removeChild(customCheckbox, existingIcon);\n }\n }\n });\n\n this.renderer.appendChild(checkboxDiv, checkbox);\n this.renderer.appendChild(checkboxDiv, customCheckbox);\n this.renderer.appendChild(labelElement, checkboxDiv);\n\n // Option text\n const textSpan = this.renderer.createElement('span');\n this.renderer.addClass(textSpan, 'option-text');\n const text = this.renderer.createText(optionLabel);\n this.renderer.appendChild(textSpan, text);\n this.renderer.appendChild(labelElement, textSpan);\n\n return labelElement;\n }\n\n private createCheckIcon(): SVGElement {\n const svg = this.renderer.createElement('svg', 'svg');\n this.renderer.addClass(svg, 'check-icon');\n this.renderer.setAttribute(svg, 'width', '14');\n this.renderer.setAttribute(svg, 'height', '10');\n this.renderer.setAttribute(svg, 'viewBox', '0 0 10 8');\n this.renderer.setAttribute(svg, 'fill', 'none');\n this.renderer.setAttribute(svg, 'xmlns', 'http://www.w3.org/2000/svg');\n\n const path = this.renderer.createElement('path', 'svg');\n this.renderer.setAttribute(path, 'd', 'M9 1L3.5 6.5L1 4');\n this.renderer.setAttribute(path, 'stroke', '#F59100');\n this.renderer.setAttribute(path, 'stroke-width', '1.6666');\n this.renderer.setAttribute(path, 'stroke-linecap', 'round');\n this.renderer.setAttribute(path, 'stroke-linejoin', 'round');\n\n this.renderer.appendChild(svg, path);\n return svg;\n }\n\n closeDropdown(): void {\n this.destroyDropdown();\n this.isOpen = false;\n this.onTouched();\n }\n\n private destroyDropdown(): void {\n // Remove listeners\n if (this.scrollHandler) {\n this.scrollHandler();\n this.scrollHandler = null;\n }\n\n if (this.resizeHandler) {\n this.resizeHandler();\n this.resizeHandler = null;\n }\n\n if (this.dropdownElement) {\n this.renderer.removeChild(this.document.body, this.dropdownElement);\n this.dropdownElement = null;\n }\n\n if (this.backdropElement) {\n this.renderer.removeChild(this.document.body, this.backdropElement);\n this.backdropElement = null;\n }\n }\n\n toggleOption(option: any): void {\n if (this.isOptionDisabled(option)) return;\n\n const optionValue = this.getOptionValue(option);\n const index = this.value.indexOf(optionValue);\n if (index > -1) {\n this.value = this.value.filter(v => v !== optionValue);\n } else {\n this.value = [...this.value, optionValue];\n }\n this.onChange(this.value);\n }\n\n isSelected(value: any): boolean {\n return this.value.includes(value);\n }\n\n getSelectedCount(): number {\n return this.value.length;\n }\n\n getSelectedLabels(): string {\n const allOptions = this.getAllOptions();\n const selectedOptions = allOptions.filter(opt => this.isSelected(this.getOptionValue(opt)));\n return selectedOptions.map(opt => this.getOptionLabel(opt)).join(', ');\n }\n\n writeValue(value: any): void {\n this.value = Array.isArray(value) ? value : [];\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from '../../atoms/input/input.component';\nimport { SelectComponent, SelectOption } from '../select/select.component';\n\nexport interface PhoneValue {\n countryCode: string;\n number: string;\n}\n\n@Component({\n selector: 'app-phone-input',\n standalone: true,\n imports: [CommonModule, InputComponent, SelectComponent],\n template: `\n <div class=\"svu-phone-input\" [class.svu-phone-input--error]=\"hasError\">\n <label *ngIf=\"label\" class=\"svu-phone-input__label\">\n {{ label }}\n </label>\n\n <div class=\"svu-phone-input__field\">\n <div class=\"svu-phone-input__country\">\n <ng-content select=\"[countrySelect]\"></ng-content>\n </div>\n\n <div class=\"svu-phone-input__number\">\n <ng-content select=\"[phoneInput]\"></ng-content>\n </div>\n </div>\n\n <span *ngIf=\"hasError && errorMessage\" class=\"svu-phone-input__error\">\n {{ errorMessage }}\n </span>\n </div>\n `,\n styleUrls: ['./phone-input.component.scss']\n})\nexport class PhoneInputComponent {\n @Input() label: string = 'Teléfono';\n @Input() hasError: boolean = false;\n @Input() errorMessage: string = '';\n}\n\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'copy-input',\n standalone: true,\n imports: [\n CommonModule\n ],\n templateUrl: './copy-input.component.html',\n styleUrl: './copy-input.component.scss'\n})\nexport class CopyInputComponent {\n @Input() value: string = '';\n @Input() icon: string = 'icon-copy-clipboard';\n @Input() copiedIcon: string = 'icon-done';\n @Input() ariaLabel: string = 'Copiar';\n\n @Output() copied = new EventEmitter<void>();\n\n isCopied = false;\n timeoutRef: any;\n\n async copyToClipboard() {\n try {\n await navigator.clipboard.writeText(this.value);\n\n this.isCopied = true;\n this.copied.emit();\n\n clearTimeout(this.timeoutRef);\n\n this.timeoutRef = setTimeout(() => {\n this.isCopied = false;\n }, 1200);\n\n } catch (err) {\n console.error('Error copiando:', err);\n }\n }\n}\n","<div class=\"copy-input-wrapper\">\n\n <!-- Tooltip -->\n <div\n class=\"copy-tooltip\"\n *ngIf=\"isCopied\"\n >\n Copiado\n </div>\n\n <!-- Componente -->\n <div\n class=\"copy-input\"\n (click)=\"copyToClipboard()\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"ariaLabel\"\n (keydown.enter)=\"copyToClipboard()\"\n >\n <i\n class=\"copy-input__icon\"\n [ngClass]=\"isCopied ? copiedIcon : icon\">\n </i>\n\n <span class=\"copy-input__text\">\n {{ value }}\n </span>\n </div>\n</div>\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { SnackbarService } from '../../services/snackbar.service';\nimport { SnackbarData } from '../../models/snackbar.models';\n\n@Component({\n selector: 'app-snackbar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <!-- Top Right -->\n <div class=\"snackbar-container snackbar-container--top-right\" *ngIf=\"getSnackbarsByPosition('top-right').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-right')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.96 2.37695C13.2212 2.38797 14.4681 2.65061 15.627 3.14844C16.7858 3.64631 17.8337 4.37013 18.71 5.27734L18.7158 5.2832L18.7227 5.28906C19.63 6.1654 20.3537 7.21402 20.8516 8.37305C21.3494 9.53204 21.6111 10.7787 21.6221 12.04C21.633 13.3014 21.3927 14.5523 20.915 15.7197C20.4374 16.8872 19.7318 17.9479 18.8398 18.8398C17.9479 19.7318 16.8872 20.4374 15.7197 20.915C14.5523 21.3927 13.3014 21.633 12.04 21.6221C10.7787 21.6111 9.53204 21.3494 8.37305 20.8516C7.21402 20.3537 6.1654 19.63 5.28906 18.7227L5.2832 18.7158L5.27734 18.71L4.94531 18.374C4.19221 17.5705 3.58408 16.641 3.14844 15.627C2.65061 14.4681 2.38797 13.2212 2.37695 11.96C2.36599 10.6986 2.60632 9.44681 3.08398 8.2793C3.56165 7.11184 4.26724 6.05112 5.15918 5.15918C6.05112 4.26724 7.11184 3.56165 8.2793 3.08398C9.44681 2.60632 10.6986 2.36599 11.96 2.37695ZM13.6523 3.66797C11.7234 3.28574 9.7209 3.58451 7.9873 4.5127C6.25388 5.4409 4.89578 6.94166 4.14453 8.75879C3.39335 10.5759 3.29528 12.5973 3.86719 14.4785C4.43922 16.3599 5.64653 17.9847 7.28223 19.0762C8.91789 20.1676 10.8811 20.6587 12.8379 20.4648C14.7947 20.271 16.623 19.4038 18.0127 18.0127C18.8041 17.2243 19.4316 16.2872 19.8584 15.2549C20.2319 14.3515 20.4462 13.3914 20.4912 12.417L20.5 11.998C20.4981 10.0321 19.8148 8.12717 18.5664 6.6084C17.3178 5.08945 15.5811 4.05022 13.6523 3.66797ZM15 8.49414C15.0659 8.49416 15.1315 8.50686 15.1924 8.53223C15.2531 8.55755 15.3081 8.59493 15.3545 8.6416L15.3574 8.64453C15.4043 8.69099 15.4414 8.74672 15.4668 8.80762C15.4922 8.86855 15.5059 8.93399 15.5059 9C15.5058 9.06595 15.4922 9.1315 15.4668 9.19238C15.4414 9.25316 15.4042 9.3081 15.3574 9.35449V9.35547L13.0566 11.6455L12.7012 12L13.0566 12.3545L15.3574 14.6445C15.4043 14.691 15.4414 14.7467 15.4668 14.8076C15.4922 14.8685 15.5059 14.934 15.5059 15C15.5058 15.0659 15.4922 15.1315 15.4668 15.1924C15.4414 15.2532 15.4042 15.3081 15.3574 15.3545L15.3545 15.3574C15.3081 15.4042 15.2532 15.4414 15.1924 15.4668C15.1315 15.4922 15.0659 15.5058 15 15.5059C14.934 15.5059 14.8685 15.4922 14.8076 15.4668C14.7467 15.4414 14.691 15.4043 14.6445 15.3574L12.3545 13.0566L12 12.7012L11.6455 13.0566L9.35547 15.3574H9.35449C9.3081 15.4042 9.25316 15.4414 9.19238 15.4668C9.1315 15.4922 9.06595 15.5058 9 15.5059C8.93399 15.5059 8.86855 15.4922 8.80762 15.4668C8.74672 15.4414 8.69099 15.4043 8.64453 15.3574L8.6416 15.3545C8.59493 15.3081 8.55755 15.2531 8.53223 15.1924C8.50686 15.1315 8.49416 15.0659 8.49414 15C8.49414 14.9341 8.50688 14.8685 8.53223 14.8076C8.55761 14.7467 8.59475 14.691 8.6416 14.6445H8.64258L10.9424 12.3545L11.2988 12L10.9424 11.6455L8.64258 9.35547C8.54859 9.26105 8.49614 9.13325 8.49609 9C8.49609 8.86631 8.54902 8.73809 8.64355 8.64355C8.73809 8.54902 8.86631 8.49609 9 8.49609C9.10009 8.49613 9.1972 8.52542 9.2793 8.58008L9.35645 8.64355L11.6455 10.9424L12 11.2988L12.3545 10.9424L14.6445 8.64258V8.6416C14.691 8.59475 14.7467 8.55761 14.8076 8.53223C14.8685 8.50688 14.9341 8.49414 15 8.49414Z\" stroke=\"#F04438\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Top Left -->\n <div class=\"snackbar-container snackbar-container--top-left\" *ngIf=\"getSnackbarsByPosition('top-left').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-left')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Top Center -->\n <div class=\"snackbar-container snackbar-container--top-center\" *ngIf=\"getSnackbarsByPosition('top-center').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('top-center')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Right -->\n <div class=\"snackbar-container snackbar-container--bottom-right\" *ngIf=\"getSnackbarsByPosition('bottom-right').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-right')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Left -->\n <div class=\"snackbar-container snackbar-container--bottom-left\" *ngIf=\"getSnackbarsByPosition('bottom-left').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-left')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Bottom Center -->\n <div class=\"snackbar-container snackbar-container--bottom-center\" *ngIf=\"getSnackbarsByPosition('bottom-center').length > 0\">\n <div\n *ngFor=\"let snackbar of getSnackbarsByPosition('bottom-center')\"\n class=\"snackbar\"\n [class.snackbar--success]=\"snackbar.type === 'success'\"\n [class.snackbar--error]=\"snackbar.type === 'error'\"\n [class.snackbar--warning]=\"snackbar.type === 'warning'\"\n [class.snackbar--info]=\"snackbar.type === 'info'\"\n >\n <div class=\"snackbar__icon\">\n <svg *ngIf=\"snackbar.type === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M16.6667 5L7.50004 14.1667L3.33337 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'error'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 6V10M10 14H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'warning'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 7V11M10 15H10.01M8.60001 3.5L1.95001 15C1.69137 15.4584 1.55396 15.9753 1.55189 16.5015C1.54982 17.0277 1.68317 17.5456 1.93827 18.006C2.19337 18.4663 2.56117 18.8535 3.00616 19.1305C3.45115 19.4075 3.95928 19.5648 4.48001 19.5882H17.52C18.0407 19.5648 18.5489 19.4075 18.9939 19.1305C19.4388 18.8535 19.8066 18.4663 20.0617 18.006C20.3168 17.5456 20.4502 17.0277 20.4481 16.5015C20.446 15.9753 20.3086 15.4584 20.05 15L13.4 3.5C13.1332 3.05942 12.7619 2.69355 12.3198 2.43406C11.8777 2.17458 11.3783 2.02954 10.87 2.00967C10.3617 1.98981 9.85362 2.09565 9.39278 2.31848C8.93194 2.5413 8.53223 2.87461 8.23001 3.29L8.60001 3.5Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"snackbar.type === 'info'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 14V10M10 6H10.01M18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"snackbar__content\">\n <p class=\"snackbar__message\">{{ snackbar.message }}</p>\n </div>\n <button\n *ngIf=\"snackbar.action\"\n class=\"snackbar__action\"\n (click)=\"handleAction(snackbar)\">\n {{ snackbar.action }}\n </button>\n <button\n class=\"snackbar__close\"\n (click)=\"dismiss(snackbar.id)\"\n aria-label=\"Cerrar\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 1L1 13M1 1L13 13\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n `,\n styleUrls: ['./snackbar.component.scss']\n})\nexport class SnackbarComponent implements OnInit, OnDestroy {\n snackbars: SnackbarData[] = [];\n private subscriptions: Subscription[] = [];\n\n constructor(private snackbarService: SnackbarService) {}\n\n ngOnInit(): void {\n // Subscribe to new snackbars\n const snackbarSub = this.snackbarService.snackbar$.subscribe((snackbar) => {\n this.snackbars.push(snackbar);\n });\n this.subscriptions.push(snackbarSub);\n\n // Subscribe to dismiss events\n const dismissSub = this.snackbarService.dismiss$.subscribe((id) => {\n if (id === 'all') {\n this.snackbars = [];\n } else {\n this.snackbars = this.snackbars.filter(s => s.id !== id);\n }\n });\n this.subscriptions.push(dismissSub);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n getSnackbarsByPosition(position: string): SnackbarData[] {\n return this.snackbars.filter(s => s.position === position);\n }\n\n dismiss(id: string): void {\n this.snackbars = this.snackbars.filter(s => s.id !== id);\n this.snackbarService.dismiss(id);\n }\n\n handleAction(snackbar: SnackbarData): void {\n if (snackbar.actionCallback) {\n snackbar.actionCallback();\n }\n this.dismiss(snackbar.id);\n }\n}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type AlertColor = 'default' | 'brand' | 'gray' | 'error' | 'warning' | 'success';\nexport type AlertSize = 'floating' | 'full-width';\nexport type AlertActionVariant = 'link' | 'button';\n\n@Component({\n selector: 'app-alert',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss']\n})\nexport class AlertComponent {\n @Input() color: AlertColor = 'default';\n @Input() size: AlertSize = 'floating';\n @Input() alertTitle: string = '';\n @Input() supportingText?: string;\n @Input() showIcon: boolean = true;\n @Input() showActions: boolean = true;\n @Input() actionVariant: AlertActionVariant = 'link';\n @Input() dismissLabel: string = 'Descartar';\n @Input() primaryActionLabel: string = 'Ver cambios';\n @Input() showClose: boolean = true;\n @Input() closeAriaLabel: string = 'Cerrar';\n\n @Output() dismiss = new EventEmitter<void>();\n @Output() primaryAction = new EventEmitter<void>();\n @Output() closed = new EventEmitter<void>();\n\n get alertClasses(): string {\n return [\n 'sv-alert',\n `sv-alert--${this.color}`,\n this.size === 'full-width' ? 'sv-alert--full-width' : ''\n ].filter(Boolean).join(' ');\n }\n\n get actionClass(): string {\n return this.actionVariant === 'button' ? 'sv-alert__btn' : 'sv-alert__action';\n }\n\n get primaryActionClass(): string {\n return this.actionVariant === 'button'\n ? 'sv-alert__btn sv-alert__btn--primary'\n : 'sv-alert__action sv-alert__action--primary';\n }\n\n handleDismiss(): void {\n this.dismiss.emit();\n }\n\n handlePrimaryAction(): void {\n this.primaryAction.emit();\n }\n\n handleClose(): void {\n this.closed.emit();\n }\n}\n","<div [class]=\"alertClasses\" role=\"alert\">\n <div class=\"sv-alert__container\">\n <div class=\"sv-alert__icon\" *ngIf=\"showIcon\" aria-hidden=\"true\">\n <svg *ngIf=\"color === 'error'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.86 2h8.28L22 7.86v8.28L16.14 22H7.86L2 16.14V7.86L7.86 2Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 8v4M12 16h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color === 'warning'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 9v4M12 17h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color === 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M22 4 12 14.01l-3-3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"color !== 'error' && color !== 'warning' && color !== 'success'\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 16v-4M12 8h.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <div class=\"sv-alert__content\">\n <div class=\"sv-alert__body\">\n <p class=\"sv-alert__title\">{{ alertTitle }}</p>\n <p class=\"sv-alert__text\" *ngIf=\"supportingText\">{{ supportingText }}</p>\n </div>\n\n <div class=\"sv-alert__actions\" *ngIf=\"showActions\">\n <button type=\"button\" [class]=\"actionClass\" (click)=\"handleDismiss()\">{{ dismissLabel }}</button>\n <button type=\"button\" [class]=\"primaryActionClass\" (click)=\"handlePrimaryAction()\">{{ primaryActionLabel }}</button>\n </div>\n </div>\n\n <button\n type=\"button\"\n class=\"sv-alert__close\"\n *ngIf=\"showClose\"\n [attr.aria-label]=\"closeAriaLabel\"\n (click)=\"handleClose()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M18 6 6 18M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n","/*\n * Public API Surface of @up_si_vale/sivale-componentes-angular\n */\n\n// Tokens\nexport * from './lib/tokens/asset-base-url.token';\n\n// Models\nexport * from './lib/models/snackbar.models';\n\n// Services\nexport * from './lib/services/snackbar.service';\n\n// Directives\nexport * from './lib/directives/asset-source.directive';\nexport * from './lib/directives/icon-source.directive';\nexport * from './lib/directives/only-number.directive';\nexport * from './lib/directives/only-letters.directive';\nexport * from './lib/directives/rfc.directive';\nexport * from './lib/directives/no-leading-space.directive';\nexport * from './lib/directives/tooltip.directive';\n\n// Atoms\nexport * from './lib/atoms/button/button.component';\nexport * from './lib/atoms/input/input.component';\nexport * from './lib/atoms/textarea/textarea.component';\nexport * from './lib/atoms/checkbox/checkbox.component';\nexport * from './lib/atoms/radio/radio.component';\nexport * from './lib/atoms/date-picker/date-picker.component';\nexport * from './lib/atoms/loader/loader.component';\n\n// Organisms\nexport * from './lib/organisms/sidebar/sidebar-icon.component';\nexport * from './lib/organisms/sidebar/sidebar.component';\n\n// Molecules\nexport * from './lib/molecules/option/option.component';\nexport * from './lib/molecules/select/select.component';\nexport * from './lib/molecules/multiselect/multiselect.component';\nexport * from './lib/molecules/phone-input/phone-input.component';\nexport * from './lib/molecules/copy-input/copy-input.component';\nexport * from './lib/molecules/snackbar/snackbar.component';\nexport * from './lib/molecules/alert/alert.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.SnackbarService","i2"],"mappings":"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"}
|