shirkasoft-ui-components 1.1.2 → 1.2.0

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":"shirkasoft-ui-components.mjs","sources":["../../../projects/ui-components/src/lib/text-field/text-field.component.ts","../../../projects/ui-components/src/lib/text-field/text-field.component.html","../../../projects/ui-components/src/lib/notification/notification.service.ts","../../../projects/ui-components/src/lib/notification/notification.component.ts","../../../projects/ui-components/src/lib/notification/notification.component.html","../../../projects/ui-components/src/lib/toggle/toggle.component.ts","../../../projects/ui-components/src/lib/price-input/price-input.component.ts","../../../projects/ui-components/src/lib/price-input/price-input.component.html","../../../projects/ui-components/src/lib/date-picker/date-picker.component.ts","../../../projects/ui-components/src/lib/date-picker/date-picker.component.html","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.component.ts","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.component.html","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.service.ts","../../../projects/ui-components/src/lib/modal/modal.service.ts","../../../projects/ui-components/src/lib/modal/modal.component.ts","../../../projects/ui-components/src/lib/modal/modal.component.html","../../../projects/ui-components/src/lib/select/select.component.ts","../../../projects/ui-components/src/lib/select/select.component.html","../../../projects/ui-components/src/lib/file-upload/file-upload.component.ts","../../../projects/ui-components/src/lib/file-upload/file-upload.component.html","../../../projects/ui-components/src/lib/table/table.component.ts","../../../projects/ui-components/src/lib/table/table.component.html","../../../projects/ui-components/src/lib/tooltip/tooltip.component.ts","../../../projects/ui-components/src/lib/sidebar/sidebar.component.ts","../../../projects/ui-components/src/lib/sidebar/sidebar.component.html","../../../projects/ui-components/src/lib/rail-sidebar/rail-sidebar.component.ts","../../../projects/ui-components/src/lib/rail-sidebar/rail-sidebar.component.html","../../../projects/ui-components/src/lib/chart/chart.component.ts","../../../projects/ui-components/src/lib/chart/chart.utils.ts","../../../projects/ui-components/src/lib/timeline/timeline.component.ts","../../../projects/ui-components/src/lib/timeline/timeline.component.html","../../../projects/ui-components/src/lib/fieldset/fieldset.component.ts","../../../projects/ui-components/src/lib/fieldset/fieldset.component.html","../../../projects/ui-components/src/lib/wizard/wizard.component.ts","../../../projects/ui-components/src/lib/wizard/wizard.component.html","../../../projects/ui-components/src/index.ts","../../../projects/ui-components/src/shirkasoft-ui-components.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n forwardRef,\n signal,\n computed,\n effect,\n viewChild,\n ElementRef,\n ChangeDetectionStrategy,\n DestroyRef,\n inject,\n output,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\nimport {\n LucideDynamicIcon,\n LucideSearch,\n LucideEye,\n LucideEyeOff,\n} from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n search: LucideSearch,\n eye: LucideEye,\n 'eye-off': LucideEyeOff,\n};\n\n@Component({\n selector: 'shk-text-field',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, LucideDynamicIcon],\n templateUrl: './text-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFieldComponent),\n multi: true,\n },\n ],\n})\nexport class TextFieldComponent implements ControlValueAccessor {\n private cdr = inject(ChangeDetectorRef);\n\n id = input<string>('');\n formatCard = input<boolean>(false);\n preventNegative = input<boolean>(false);\n label = input<string>('');\n type = input<string>('text');\n numbersOnly = input<boolean>(false);\n allowDecimals = input<boolean>(false);\n maxLength = input<number | undefined>(undefined);\n placeholder = input<string>('');\n errorMessages = input<{ [key: string]: string }>({});\n formGroup = input<FormGroup | undefined>(undefined);\n control = input<FormControl | undefined>(undefined);\n disabled = input<boolean>(false);\n errorMessage = input<string>('');\n isTextArea = input<boolean>(false);\n textAreaHeight = input<string>('h-28');\n searchMode = input<boolean>(false);\n displayValue = input<string>('');\n autocomplete = input<string>('new-password');\n searchButtonClick = output<void>();\n protected readonly getIcon = (name: string) => icons[name] ?? LucideEye;\n\n inputElement = viewChild<ElementRef<HTMLInputElement>>('input');\n textareaElement = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n\n private _value = signal<any>('');\n private _disabledState = signal<boolean>(false);\n showPassword = signal<boolean>(false);\n hadError = signal<boolean>(false);\n private errorTracker = signal<number>(0);\n\n displayLabel = computed(() => {\n if (this.searchMode() && this.displayValue()) {\n return this.displayValue();\n }\n return '';\n });\n private subscribed = signal<boolean>(false);\n\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n value = computed(() => this._value());\n\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) {\n return fg.get(lbl) as FormControl;\n }\n return undefined;\n });\n\n shouldShowError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n wasFixedError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n getErrorMessages = computed(() => {\n this.errorTracker();\n\n const customError = this.errorMessage();\n if (customError) {\n return [customError];\n }\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((errorKey) => {\n if (customErrors[errorKey]) return customErrors[errorKey];\n\n switch (errorKey) {\n case 'required':\n return t.translate('validation.required');\n case 'email':\n return t.translate('validation.email');\n case 'minlength':\n return t.translate('validation.minlength', {\n min: ctrl.errors!['minlength'].requiredLength,\n });\n case 'maxlength':\n return t.translate('validation.maxlength', {\n max: ctrl.errors!['maxlength'].requiredLength,\n });\n case 'pattern':\n return t.translate('validation.pattern');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n effectiveType = computed(() => {\n if (this.isTextArea()) return 'text';\n if (this.type() === 'password' && this.showPassword()) return 'text';\n return this.type();\n });\n\n private transloco = inject(TranslocoService);\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => {\n const ctrl = this.actualControl();\n const shouldDisable = this.isDisabled();\n\n if (ctrl && shouldDisable) {\n Promise.resolve().then(() => {\n ctrl.disable();\n });\n }\n });\n\n effect(() => {\n const ctrl = this.actualControl();\n\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n\n ctrl.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n });\n\n ctrl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n this.subscribed.set(true);\n });\n\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n }\n\n numberValidation(event: KeyboardEvent) {\n const allowedKeys = [\n 'Backspace',\n 'Tab',\n 'End',\n 'Home',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n ];\n\n if (this.numbersOnly()) {\n const isNumber = /^\\d$/.test(event.key);\n if (!isNumber && !allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n return;\n }\n\n if (this.allowDecimals() || this.type() === 'number') {\n allowedKeys.push('.');\n }\n\n const isDecimal = event.key === '.' || event.key === ',';\n const isNumber = !isNaN(Number(event.key));\n\n if (allowedKeys.includes(event.key)) {\n if (isDecimal) {\n const input = event.target as HTMLInputElement;\n const currentValue = input.value;\n\n const hasDecimalSeparator =\n currentValue.includes('.') || currentValue.includes(',');\n\n if (hasDecimalSeparator) {\n event.preventDefault();\n }\n }\n return;\n }\n\n if (isNumber) {\n return;\n }\n\n event.preventDefault();\n }\n\n onBlur(): void {\n this.onTouched();\n\n this.errorTracker.update((v) => v + 1);\n\n const ctrl = this.actualControl();\n if (ctrl?.invalid && ctrl?.touched) {\n this.hadError.set(true);\n }\n }\n\n onCardInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n let value = input.value.replace(/[^0-9]/g, '');\n\n if (value.length > 16) {\n value = value.substring(0, 16);\n }\n\n let formatted = '';\n for (let i = 0; i < value.length; i++) {\n if (i > 0 && i % 4 === 0) {\n formatted += '-';\n }\n formatted += value[i];\n }\n\n input.value = formatted;\n this.onChange(formatted);\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement | HTMLTextAreaElement;\n let newValue = input.value;\n\n if (this.allowDecimals()) {\n newValue = newValue.replace(/,/g, '.');\n\n const parts = newValue.split('.');\n if (parts.length > 2) {\n newValue = parts[0] + '.' + parts.slice(1).join('');\n }\n\n if (parts.length > 1 && parts[1].length > 2) {\n newValue = parts[0] + '.' + parts[1].substring(0, 2);\n }\n }\n\n if (this.numbersOnly()) {\n newValue = newValue.replace(/[^0-9]/g, '');\n }\n\n const maxLen = this.maxLength();\n if (maxLen && newValue.length > maxLen) {\n newValue = newValue.substring(0, maxLen);\n input.value = newValue;\n\n const ctrl = this.actualControl();\n setTimeout(() => {\n ctrl?.updateValueAndValidity();\n this.errorTracker.update((v) => v + 1);\n });\n }\n\n if (this.formatCard()) {\n this.onCardInput(event);\n } else {\n this.onChange(newValue);\n }\n }\n\n togglePasswordVisibility(): void {\n this.showPassword.update((v) => !v);\n }\n\n writeValue(value: any): void {\n let processedValue = value;\n\n if (this.allowDecimals() && value) {\n processedValue = String(value).replace(/,/g, '.');\n }\n\n if (this.numbersOnly() && value) {\n processedValue = value.toString().replace(/[^0-9]/g, '');\n }\n\n const maxLen = this.maxLength();\n if (maxLen && processedValue?.length > maxLen) {\n processedValue = processedValue.substring(0, maxLen);\n }\n\n if (this.formatCard() && processedValue) {\n const cleaned = processedValue.replace(/[^0-9]/g, '');\n let formatted = '';\n for (let i = 0; i < cleaned.length; i++) {\n if (i > 0 && i % 4 === 0) formatted += '-';\n formatted += cleaned[i];\n }\n this._value.set(formatted);\n } else {\n this._value.set(processedValue);\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._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n @if (!isTextArea()) {\n <div class=\"flex\">\n @if (searchMode()) {\n @let isDisabledSearch = actualControl()?.disabled || isDisabled();\n <input\n #input\n [id]=\"id()\"\n type=\"text\"\n [value]=\"displayValue() || ''\"\n [placeholder]=\"placeholder() || label()\"\n [readOnly]=\"true\"\n [disabled]=\"isDisabledSearch\"\n (click)=\"!isDisabledSearch && searchButtonClick.emit()\"\n (keydown.enter)=\"!isDisabledSearch && searchButtonClick.emit()\"\n (blur)=\"onBlur()\"\n autocomplete=\"off\"\n [class.cursor-pointer]=\"!isDisabledSearch\"\n [class.cursor-not-allowed]=\"isDisabledSearch\"\n [class._shk-bg-surface-50]=\"isDisabledSearch\"\n [class.dark:[background-color:var(--shk-surface-100)]]=\"isDisabledSearch\"\n [class._shk-text-surface-400]=\"isDisabledSearch\"\n [class.dark:[color:var(--shk-surface-400)]]=\"isDisabledSearch\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-l-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500': shouldShowError() && !isDisabledSearch,\n '_shk-border': !shouldShowError() || isDisabledSearch,\n 'cursor-pointer': !isDisabledSearch,\n 'cursor-not-allowed _shk-text-surface-400 dark:[color:var(--shk-surface-400)]': isDisabledSearch\n }\"\n />\n <button\n type=\"button\"\n (click)=\"searchButtonClick.emit()\"\n tabindex=\"-1\"\n [disabled]=\"isDisabledSearch\"\n class=\"px-3 flex items-center justify-center shrink-0 _shk-bg-primary hover:[background-color:var(--shk-primary-700)] text-white border _shk-border-primary rounded-r-lg transition-colors duration-200 disabled:[background-color:var(--shk-surface-300)] dark:disabled:[background-color:var(--shk-surface-200)] disabled:[border-color:var(--shk-surface-300)] dark:disabled:[border-color:var(--shk-surface-200)] disabled:cursor-not-allowed\"\n >\n <svg [lucideIcon]=\"getIcon('search')\" class=\"w-4 h-4\"></svg>\n </button>\n }\n\n @if (!searchMode()) {\n <input\n #input\n [id]=\"id()\"\n [maxlength]=\"maxLength() || (formatCard() ? 19 : null)\"\n [min]=\"type() === 'number' && preventNegative() ? '0' : null\"\n (keypress)=\"type() === 'number' || numbersOnly() ? numberValidation($event) : null\"\n [type]=\"effectiveType()\"\n [formControl]=\"$any(actualControl())\"\n [placeholder]=\"placeholder() || label()\"\n (input)=\"onInput($event)\"\n [autocomplete]=\"autocomplete()\"\n (blur)=\"onBlur()\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError()\n }\"\n [class.pr-8]=\"type() === 'password' && actualControl()?.value?.length > 0\"\n [class.pr-3]=\"type() !== 'password' || !actualControl()?.value?.length\"\n />\n\n @if (type() === 'password' && actualControl()?.value?.length > 0) {\n <button\n type=\"button\"\n (click)=\"togglePasswordVisibility()\"\n [disabled]=\"actualControl()?.disabled\"\n class=\"absolute right-3 top-1/2 -translate-y-1/2 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-600)] focus:outline-none\"\n >\n @if (showPassword()) {\n <svg [lucideIcon]=\"getIcon('eye-off')\" class=\"w-4 h-4\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('eye')\" class=\"w-4 h-4\"></svg>\n }\n </button>\n }\n }\n </div>\n }\n\n @if (isTextArea()) {\n <textarea\n #textarea\n [id]=\"id()\"\n [formControl]=\"$any(actualControl())\"\n [placeholder]=\"placeholder() || label()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [class]=\"isTextArea() ? textAreaHeight() : 'h-28'\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 resize-none disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed disabled:[color:var(--shk-surface-400)] dark:disabled:[color:var(--shk-surface-400)] sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError()\n }\"\n ></textarea>\n }\n </div>\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\" tabindex=\"-1\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\n\nexport interface Notification {\n id: string;\n message: string;\n type: 'success' | 'error' | 'warning' | 'info';\n progress?: number;\n showProgress?: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n private notificationsSignal = signal<Notification[]>([]);\n private currentId = 0;\n\n notifications = this.notificationsSignal.asReadonly();\n\n addNotification(\n message: string,\n type: Notification['type'] = 'info',\n showProgress: boolean = false,\n duration: number = 5000\n ): string {\n const id = (++this.currentId).toString();\n const notification: Notification = {\n id,\n message,\n type,\n progress: showProgress ? 0 : undefined,\n showProgress,\n };\n\n this.notificationsSignal.update((notifications) => [\n ...notifications,\n notification,\n ]);\n\n if (duration > 0 && !showProgress) {\n setTimeout(() => this.removeNotificationById(id), duration);\n }\n\n return id;\n }\n\n updateProgress(notificationId: string, progress: number) {\n const currentNotifications = this.notificationsSignal();\n const index = currentNotifications.findIndex(\n (n) => n.id === notificationId\n );\n\n if (index > -1 && currentNotifications[index].showProgress) {\n const updatedProgress = Math.min(100, Math.max(0, progress));\n\n this.notificationsSignal.update((notifications) =>\n notifications.map((n, i) =>\n i === index ? { ...n, progress: updatedProgress } : n\n )\n );\n\n if (progress >= 100) {\n setTimeout(() => this.removeNotificationById(notificationId), 2000);\n }\n }\n }\n\n removeNotification(notification: Notification): void {\n this.removeNotificationById(notification.id);\n }\n\n removeNotificationById(notificationId: string): void {\n this.notificationsSignal.update((notifications) =>\n notifications.filter((n) => n.id !== notificationId)\n );\n }\n\n clearAll(): void {\n this.notificationsSignal.set([]);\n }\n}\n","import {\n Component,\n input,\n inject,\n ChangeDetectionStrategy,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NotificationService,\n Notification,\n} from './notification.service';\nimport {\n LucideDynamicIcon,\n LucideCheck,\n LucideCircleX,\n LucideInfo,\n LucideTriangleAlert,\n LucideX,\n} from '@lucide/angular';\n\nexport type NotificationPosition = 'center-top' | 'right-top' | 'left-top';\n\nconst icons: Record<string, any> = {\n check: LucideCheck,\n 'circle-x': LucideCircleX,\n info: LucideInfo,\n 'triangle-alert': LucideTriangleAlert,\n x: LucideX,\n};\n\n@Component({\n selector: 'shk-notification',\n templateUrl: './notification.component.html',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationComponent {\n position = input<NotificationPosition>('center-top');\n\n private notificationService = inject(NotificationService);\n protected getIcon = (name: string) => icons[name] ?? LucideInfo;\n\n private readonly iconMap: Record<string, string> = {\n success: 'check',\n error: 'circle-x',\n info: 'info',\n warning: 'triangle-alert',\n };\n\n getNotificationIcon(type: string): string {\n return this.iconMap[type] || 'info';\n }\n\n notifications = this.notificationService.notifications;\n\n sortedNotifications = computed(\n () => [...this.notifications()].reverse(),\n );\n\n removeNotification(notification: Notification): void {\n this.notificationService.removeNotification(notification);\n }\n\n roundProgress(progress: number | undefined): number {\n return Math.round(progress || 0);\n }\n\n hasNotifications = computed(() => this.notifications().length > 0);\n\n positionClass = computed(() => {\n const base = 'fixed top-4 z-[9999] space-y-4 sm:space-y-6 sm:top-6 lg:top-8';\n switch (this.position()) {\n case 'right-top':\n return `${base} right-4`;\n case 'left-top':\n return `${base} left-4`;\n default:\n return `${base} left-1/2 -translate-x-1/2`;\n }\n });\n}\n","<div [class]=\"positionClass()\">\n @for (notification of sortedNotifications(); track notification.id) {\n <div\n [ngClass]=\"{\n 'bg-green-50/80 dark:bg-green-900/30 border-green-400 dark:border-green-600 text-green-800 dark:text-green-200':\n notification.type === 'success',\n 'bg-red-50/80 dark:bg-red-900/30 border-red-400 dark:border-red-600 text-red-800 dark:text-red-200':\n notification.type === 'error',\n 'bg-blue-50/80 dark:bg-blue-900/30 border-blue-400 dark:border-blue-600 text-blue-800 dark:text-blue-200':\n notification.type === 'info',\n 'bg-yellow-50/80 dark:bg-yellow-900/30 border-yellow-400 dark:border-yellow-500 text-yellow-800 dark:text-yellow-200':\n notification.type === 'warning',\n }\"\n class=\"flex items-center w-full min-w-[320px] max-w-xs sm:max-w-sm lg:max-w-md p-4 mb-4 border-l-4 rounded-lg shadow-lg backdrop-blur-sm transition-all duration-300 transform hover:scale-105 hover:shadow-xl\"\n role=\"alert\"\n >\n <div\n [ngClass]=\"{\n 'text-green-600': notification.type === 'success',\n 'text-red-600': notification.type === 'error',\n 'text-blue-600': notification.type === 'info',\n 'text-yellow-600': notification.type === 'warning',\n }\"\n class=\"inline-flex items-center justify-center flex-shrink-0 w-10 h-10 rounded-lg bg-opacity-10\"\n >\n <svg [lucideIcon]=\"getIcon(getNotificationIcon(notification.type))\" class=\"w-6 h-6\"></svg>\n </div>\n <div class=\"ms-4 flex-1 text-sm font-medium break-words\">\n {{ notification.message }}\n </div>\n <button\n type=\"button\"\n (click)=\"removeNotification(notification)\"\n aria-label=\"Close\"\n [ngClass]=\"{\n 'text-green-600 hover:text-green-800':\n notification.type === 'success',\n 'text-red-600 hover:text-red-800': notification.type === 'error',\n 'text-blue-600 hover:text-blue-800': notification.type === 'info',\n 'text-yellow-600 hover:text-yellow-800':\n notification.type === 'warning',\n }\"\n class=\"mx-2 -my-1.5 bg-transparent focus:outline-none\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n }\n</div>\n","import { Component, forwardRef, input, output, signal, effect } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'shk-toggle',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"relative\">\n <label\n class=\"inline-flex items-center gap-3 cursor-pointer select-none\"\n [class.opacity-50]=\"_disabled()\"\n [class.cursor-not-allowed]=\"_disabled()\"\n >\n @if (mode() === 'toggle') {\n <div class=\"relative flex-shrink-0\" (click)=\"toggle()\">\n <div\n class=\"w-10 h-6 rounded-full transition-colors duration-200\"\n [class._shk-bg-primary]=\"_value()\"\n [class._shk-bg-surface-300]=\"!_value()\"\n [class._shk-dark-bg-surface-600]=\"!_value()\"\n ></div>\n <div\n class=\"absolute top-0.5 left-0.5 w-5 h-5 _shk-bg-white rounded-full shadow transition-transform duration-200\"\n [class.translate-x-4]=\"_value()\"\n ></div>\n </div>\n } @else {\n <div\n class=\"flex-shrink-0 w-4 h-4 rounded border-2 transition-colors duration-200 flex items-center justify-center\"\n [class._shk-bg-primary]=\"_value()\"\n [class._shk-border-primary]=\"_value()\"\n [class._shk-border-surface-300]=\"!_value()\"\n [class._shk-dark-border-surface-600]=\"!_value()\"\n (click)=\"toggle()\"\n >\n @if (_value()) {\n <svg class=\"w-3 h-3 text-white\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </div>\n }\n @if (label()) {\n <span class=\"text-sm _shk-text-surface-700 _shk-dark-text-surface-300\">\n {{ label() }}\n </span>\n }\n </label>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor {\n label = input<string>('');\n mode = input<'toggle' | 'checkbox'>('toggle');\n checked = input<boolean | undefined>(undefined);\n checkedChange = output<boolean>();\n\n _value = signal(false);\n _disabled = signal(false);\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n const manual = this.checked();\n if (manual !== undefined) {\n this._value.set(manual);\n }\n });\n }\n\n writeValue(value: any): void {\n this._value.set(!!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.set(isDisabled);\n }\n\n toggle(): void {\n if (this._disabled()) return;\n const newValue = !this._value();\n this._value.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.checkedChange.emit(newValue);\n }\n}\n","import { Component, model, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'shk-price-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './price-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PriceInputComponent {\n value = model.required<number>();\n isPercentage = model<boolean>(false);\n label = input<string>('');\n inputId = input<string>('');\n required = input<boolean>(false);\n disabled = input<boolean>(false);\n min = input<number>(0);\n max = input<number>(Infinity);\n showError = input<boolean>(false);\n errorMessage = input<string>('');\n\n toggleMode(): void {\n if (this.disabled()) return;\n this.isPercentage.update(v => !v);\n }\n\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value.set(parseFloat(input.value) || 0);\n }\n}\n","<div>\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n @if (required()) {\n <span class=\"text-red-400\">*</span>\n }\n </div>\n }\n <div class=\"flex\">\n <input\n [id]=\"inputId()\"\n type=\"number\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"value.set($event ?? 0)\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n step=\"0.01\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-l-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': showError(),\n '_shk-border dark:[border-color:var(--shk-surface-200)] focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !showError()\n }\"\n />\n <button\n type=\"button\"\n (click)=\"toggleMode()\"\n [disabled]=\"disabled()\"\n class=\"px-3 py-2 text-sm font-medium border rounded-r-lg transition-colors shrink-0\"\n [ngClass]=\"{\n '_shk-bg-primary-soft _shk-border-primary-200 _shk-text-primary-700 dark:[background-color:var(--shk-primary-900)] dark:[border-color:var(--shk-primary-700)] dark:[color:var(--shk-primary-300)]': isPercentage(),\n '_shk-bg-white _shk-border _shk-text-surface-500 dark:[background-color:var(--shk-surface-100)] dark:[border-color:var(--shk-surface-200)] dark:[color:var(--shk-surface-400)]': !isPercentage(),\n 'cursor-not-allowed opacity-50': disabled()\n }\"\n >\n {{ isPercentage() ? '%' : '$' }}\n </button>\n </div>\n @if (showError()) {\n <div class=\"text-xs _shk-text-red-500 mt-1\">\n {{ errorMessage() }}\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n DestroyRef,\n HostListener,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\n\nexport type DatePickerView = 'date' | 'month' | 'year';\n\n@Component({\n selector: 'shk-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './date-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n private transloco = inject(TranslocoService);\n\n id = input<string>('');\n view = input<DatePickerView>('date');\n label = input<string>('');\n placeholder = input<string>('');\n formGroup = input<FormGroup | undefined>(undefined);\n control = input<FormControl | undefined>(undefined);\n disabled = input<boolean>(false);\n errorMessage = input<string>('');\n errorMessages = input<{ [key: string]: string }>({});\n minValue = input<string>('');\n maxValue = input<string>('');\n locale = input<string>('es');\n\n isOpen = signal(false);\n viewYear = signal(new Date().getFullYear());\n viewMonth = signal(new Date().getMonth());\n viewDecade = signal(Math.floor(new Date().getFullYear() / 10) * 10);\n\n private _value = signal<string | null>(null);\n private _disabledState = signal<boolean>(false);\n private subscribed = signal(false);\n private valueSubscribed = signal(false);\n private errorTracker = signal(0);\n hadError = signal(false);\n\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n value = computed(() => this._value());\n\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) return fg.get(lbl) as FormControl;\n return undefined;\n });\n\n shouldShowError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n wasFixedError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n getErrorMessages = computed(() => {\n this.errorTracker();\n const customError = this.errorMessage();\n if (customError) return [customError];\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((key) => {\n if (customErrors[key]) return customErrors[key];\n switch (key) {\n case 'required':\n return t.translate('validation.required');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n displayLabel = computed(() => {\n const value = this._value();\n if (!value) return '';\n const v = this.view();\n\n if (v === 'year') {\n return value;\n }\n\n if (v === 'month') {\n const [y, m] = value.split('-').map(Number);\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n });\n const label = fmt.format(new Date(y, m - 1, 1));\n return label.charAt(0).toUpperCase() + label.slice(1);\n }\n\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'long',\n });\n return fmt.format(new Date(value + 'T12:00:00'));\n });\n\n monthNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n return Array.from({ length: 12 }, (_, i) => {\n const name = fmt.format(new Date(2000, i, 1)).replace('.', '');\n return name.charAt(0).toUpperCase() + name.slice(1);\n });\n });\n\n dayNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n return Array.from({ length: 7 }, (_, i) => {\n const name = fmt.format(new Date(2024, 0, i + 1));\n return name.charAt(0).toUpperCase() + name.slice(1, 3);\n });\n });\n\n daysInMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth() + 1, 0).getDate();\n });\n\n firstDayOfMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth(), 1).getDay();\n });\n\n calendarDays = computed(() => {\n const totalDays = this.daysInMonth();\n const firstDay = this.firstDayOfMonth();\n const days: (number | null)[] = [];\n for (let i = 0; i < firstDay; i++) days.push(null);\n for (let i = 1; i <= totalDays; i++) days.push(i);\n return days;\n });\n\n canGoPrev = computed(() => {\n const v = this.view();\n const min = this.minValue();\n if (v === 'date') {\n if (!min) return true;\n const prev = new Date(this.viewYear(), this.viewMonth() - 1, 1);\n return prev >= new Date(min + 'T12:00:00');\n }\n if (v === 'month') {\n const minY = min ? Number(min.split('-')[0]) : undefined;\n return minY === undefined || this.viewYear() > minY;\n }\n const minY = min ? Number(min) : undefined;\n return minY === undefined || this.viewYear() > minY;\n });\n\n canGoNext = computed(() => {\n const v = this.view();\n const max = this.maxValue();\n if (v === 'date') {\n if (!max) return true;\n const next = new Date(this.viewYear(), this.viewMonth() + 1, 1);\n return next <= new Date(max + 'T12:00:00');\n }\n if (v === 'month') {\n const maxY = max ? Number(max.split('-')[0]) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n }\n const maxY = max ? Number(max) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n });\n\n selectedYear = computed(() => {\n const value = this._value();\n return value ? Number(value.split('-')[0]) : null;\n });\n\n selectedMonth = computed(() => {\n const value = this._value();\n return value ? Number(value.split('-')[1]) - 1 : null;\n });\n\n selectedDay = computed(() => {\n const value = this._value();\n return value && this.view() === 'date' ? Number(value.split('-')[2]) : null;\n });\n\n decadeYears = computed(() => {\n const start = this.viewDecade();\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n years: number[] = [];\n\n constructor() {\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n });\n\n this.subscribed.set(true);\n });\n\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.close();\n }\n\n toggle(): void {\n if (this.isDisabled()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.syncViewToValue();\n this.isOpen.set(true);\n }\n }\n\n private syncViewToValue(): void {\n const val = this._value();\n const v = this.view();\n if (!val) {\n const now = new Date();\n this.viewYear.set(now.getFullYear());\n this.viewMonth.set(now.getMonth());\n this.viewDecade.set(Math.floor(now.getFullYear() / 10) * 10);\n return;\n }\n if (v === 'year') {\n this.viewYear.set(Number(val));\n } else if (v === 'month') {\n this.viewYear.set(Number(val.split('-')[0]));\n } else {\n const d = new Date(val + 'T12:00:00');\n this.viewYear.set(d.getFullYear());\n this.viewMonth.set(d.getMonth());\n }\n }\n\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n const ctrl = this.actualControl();\n if (ctrl) ctrl.markAsTouched();\n this.errorTracker.update((v) => v + 1);\n if (ctrl?.invalid && ctrl?.touched) this.hadError.set(true);\n }\n\n prev(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d - 12);\n this.viewYear.update((y) => y - 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y - 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 0) {\n this.viewYear.update((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }\n }\n\n next(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d + 12);\n this.viewYear.update((y) => y + 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y + 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 11) {\n this.viewYear.update((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }\n }\n\n selectDay(day: number): void {\n const y = this.viewYear();\n const m = String(this.viewMonth() + 1).padStart(2, '0');\n const d = String(day).padStart(2, '0');\n const value = `${y}-${m}-${d}`;\n this.setValue(value);\n }\n\n selectMonth(monthIndex: number): void {\n const value = `${this.viewYear()}-${String(monthIndex + 1).padStart(2, '0')}`;\n this.setValue(value);\n }\n\n selectYear(year: number): void {\n const value = String(year);\n this.setValue(value);\n }\n\n private setValue(value: string): void {\n this._value.set(value);\n this.onChange(value);\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(value);\n ctrl.markAsDirty();\n }\n this.close();\n }\n\n isSelectedDay(day: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === this.viewMonth() &&\n this.selectedDay() === day\n );\n }\n\n isToday(day: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() &&\n this.viewMonth() === now.getMonth() &&\n day === now.getDate()\n );\n }\n\n isSelectedMonth(monthIndex: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === monthIndex\n );\n }\n\n isCurrentMonth(monthIndex: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() && monthIndex === now.getMonth()\n );\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedYear() === year;\n }\n\n isCurrentYear(year: number): boolean {\n return new Date().getFullYear() === year;\n }\n\n writeValue(value: any): void {\n this._value.set(value || null);\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._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n <button\n type=\"button\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n class=\"flex items-center justify-between w-full px-3 py-2 text-left _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors sm:text-sm focus:outline-none focus:ring-1 disabled:cursor-not-allowed disabled:[color:var(--shk-surface-400)] dark:disabled:[color:var(--shk-surface-500)]\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border dark:[border-color:var(--shk-surface-200)] focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError(),\n }\"\n >\n <span\n [ngClass]=\"value() ? '_shk-text-surface-700 dark:[color:var(--shk-surface-700)]' : '_shk-text-surface-400 dark:[color:var(--shk-surface-400)]'\"\n >\n {{ displayLabel() || placeholder() || label() }}\n </span>\n <svg\n class=\"w-4 h-4 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"></rect>\n <path d=\"M16 2v4M8 2v4M3 10h18\"></path>\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"fixed inset-0 z-40 bg-black/30\" (click)=\"close()\"></div>\n <div\n class=\"fixed z-50 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-72 p-4 bg-white dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-lg shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (view() === 'date') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ monthNames()[viewMonth()] }} {{ viewYear() }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0 mb-1\">\n @for (name of dayNames(); track $index) {\n <div class=\"text-center text-xs font-medium _shk-text-surface-400 dark:[color:var(--shk-surface-400)] py-1\">\n {{ name }}\n </div>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-0\">\n @for (day of calendarDays(); track $index) {\n @if (day !== null) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"py-1.5 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedDay(day),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isToday(day) && !isSelectedDay(day),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedDay(day) && !isToday(day),\n }\"\n >\n {{ day }}\n </button>\n } @else {\n <div></div>\n }\n }\n </div>\n }\n\n @if (view() === 'month') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">{{ viewYear() }}</span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n (click)=\"selectMonth($index)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedMonth($index),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentMonth($index) && !isSelectedMonth($index),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedMonth($index) && !isCurrentMonth($index),\n }\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n\n @if (view() === 'year') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ viewDecade() }} - {{ viewDecade() + 11 }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (year of decadeYears(); track year) {\n <button\n type=\"button\"\n (click)=\"selectYear(year)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedYear(year),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentYear(year) && !isSelectedYear(year),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedYear(year) && !isCurrentYear(year),\n }\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","import { Component, input, signal, output, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon, LucideInfo, LucideTriangleAlert, LucideX, LucideTrash2, LucideLoader } from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n info: LucideInfo,\n 'triangle-alert': LucideTriangleAlert,\n x: LucideX,\n 'trash-2': LucideTrash2,\n loader: LucideLoader,\n};\n\n@Component({\n selector: 'shk-confirm-dialog',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './confirm-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent implements OnDestroy {\n protected getIcon = (name: string) => icons[name] ?? LucideTriangleAlert;\n\n title = input<string>('Confirmar acción');\n message = input<string>('¿Está seguro de realizar esta acción?');\n confirmLabel = input<string>('Confirmar');\n cancelLabel = input<string>('Cancelar');\n loadingText = input<string>('Procesando…');\n type = input<'danger' | 'info' | 'warning'>('danger');\n loading = input<boolean>(false);\n showCancel = input<boolean>(true);\n\n visible = signal<boolean>(false);\n private resolveRef = signal<((value: boolean) => void) | null>(null);\n\n closed = output<void>();\n\n show(): Promise<boolean> {\n this.visible.set(true);\n return new Promise((resolve) => {\n this.resolveRef.set(resolve);\n });\n }\n\n onConfirm() {\n this.visible.set(false);\n const resolve = this.resolveRef();\n if (resolve) {\n resolve(true);\n this.resolveRef.set(null);\n }\n this.closed.emit();\n }\n\n onCancel() {\n this.visible.set(false);\n const resolve = this.resolveRef();\n if (resolve) {\n resolve(false);\n this.resolveRef.set(null);\n }\n this.closed.emit();\n }\n\n ngOnDestroy() {\n this.resolveRef.set(null);\n }\n}\n","@if (visible()) {\n <div\n class=\"fixed inset-0 bg-black/40 backdrop-blur-sm flex items-center justify-center z-[9999] p-4\"\n (click)=\"onCancel()\"\n >\n <div\n class=\"bg-white dark:[background-color:var(--shk-surface-100)] rounded-2xl shadow-2xl max-w-sm w-full animate-in fade-in zoom-in duration-200 overflow-hidden\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"h-1.5 w-full\"\n [class.bg-gradient-to-r]=\"type() !== 'warning'\"\n [class.from-red-400]=\"type() === 'danger'\"\n [class.to-red-600]=\"type() === 'danger'\"\n [class.from-blue-400]=\"type() === 'info'\"\n [class.to-blue-600]=\"type() === 'info'\"\n [class.bg-amber-400]=\"type() === 'warning'\"\n ></div>\n <div class=\"p-6\">\n <div class=\"flex items-start gap-4 mb-4\">\n <div\n class=\"w-12 h-12 rounded-full flex items-center justify-center shrink-0\"\n [ngClass]=\"{\n 'bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400': type() === 'danger',\n 'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400': type() === 'info',\n 'bg-amber-50 dark:bg-amber-900/30 text-amber-600 dark:text-amber-400': type() === 'warning',\n }\"\n >\n @if (type() === 'info') {\n <svg [lucideIcon]=\"getIcon('info')\" class=\"w-6 h-6\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('triangle-alert')\" class=\"w-6 h-6\"></svg>\n }\n </div>\n <div>\n <h3 class=\"text-lg font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">{{ title() }}</h3>\n <p class=\"_shk-text-surface-500 dark:[color:var(--shk-surface-400)] text-sm leading-relaxed mb-6\">{{ message() }}</p>\n </div>\n </div>\n <div class=\"flex gap-3\">\n @if (showCancel()) {\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n [disabled]=\"loading()\"\n class=\"flex-1 px-4 py-2 text-sm font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-600)] _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] hover:[background-color:var(--shk-surface-200)] dark:hover:[background-color:var(--shk-surface-300)] rounded-lg transition-colors flex items-center justify-center gap-2\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n {{ cancelLabel() }}\n </button>\n }\n <button\n type=\"button\"\n (click)=\"onConfirm()\"\n [disabled]=\"loading()\"\n class=\"flex-1 px-4 py-2 text-sm font-semibold text-white rounded-lg shadow-md transition-all flex items-center justify-center gap-2\"\n [class.bg-red-600]=\"type() === 'danger'\"\n [class.hover:bg-red-700]=\"type() === 'danger'\"\n [class.shadow-red-500/20]=\"type() === 'danger'\"\n [class.bg-primary-600]=\"type() === 'info'\"\n [class.hover:bg-primary-700]=\"type() === 'info'\"\n [class.shadow-primary-500/20]=\"type() === 'info'\"\n [class.bg-amber-600]=\"type() === 'warning'\"\n [class.hover:bg-amber-700]=\"type() === 'warning'\"\n [class.shadow-amber-500/20]=\"type() === 'warning'\"\n >\n @if (loading()) {\n <svg [lucideIcon]=\"getIcon('loader')\" class=\"w-4 h-4 animate-spin\"></svg>\n } @else if (type() === 'danger') {\n <svg [lucideIcon]=\"getIcon('trash-2')\" class=\"w-4 h-4\"></svg>\n }\n {{ loading() ? loadingText() : confirmLabel() }}\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n","import {\n Injectable,\n ComponentRef,\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n DestroyRef,\n inject,\n} from '@angular/core';\nimport { ConfirmDialogComponent } from './confirm-dialog.component';\n\nexport interface ConfirmConfig {\n title?: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n loadingText?: string;\n type?: 'danger' | 'info' | 'warning';\n showCancel?: boolean;\n loading?: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ConfirmDialogService {\n private dialogRef: ComponentRef<ConfirmDialogComponent> | null = null;\n\n private destroyRef = inject(DestroyRef);\n private appRef = inject(ApplicationRef);\n private injector = inject(EnvironmentInjector);\n\n constructor() {\n this.destroyRef.onDestroy(() => this.cleanupDialog());\n }\n\n async confirm(config: ConfirmConfig): Promise<boolean> {\n if (this.dialogRef) this.cleanupDialog();\n\n this.dialogRef = createComponent(ConfirmDialogComponent, {\n environmentInjector: this.injector,\n });\n\n this.dialogRef.setInput('title', config.title ?? 'Confirmar acción');\n this.dialogRef.setInput('message', config.message);\n this.dialogRef.setInput('confirmLabel', config.confirmLabel ?? 'Confirmar');\n this.dialogRef.setInput('cancelLabel', config.cancelLabel ?? 'Cancelar');\n this.dialogRef.setInput('loadingText', config.loadingText ?? 'Procesando…');\n this.dialogRef.setInput('type', config.type ?? 'danger');\n this.dialogRef.setInput('showCancel', config.showCancel ?? true);\n this.dialogRef.setInput('loading', config.loading ?? false);\n\n document.body.appendChild(this.dialogRef.location.nativeElement);\n this.appRef.attachView(this.dialogRef.hostView);\n try {\n return await this.dialogRef.instance.show();\n } finally {\n this.cleanupDialog();\n }\n }\n\n private cleanupDialog(): void {\n if (this.dialogRef) {\n this.appRef.detachView(this.dialogRef.hostView);\n this.dialogRef.destroy();\n this.dialogRef = null;\n }\n }\n}\n","import { Injectable, Type, signal, computed, inject, DestroyRef } from '@angular/core';\nimport { Router } from '@angular/router';\n\nexport interface ModalConfig {\n title: string;\n component: Type<any>;\n data?: Record<string, any>;\n width?: string;\n showButtons?: boolean;\n showExpandButton?: boolean;\n acceptLabel?: string;\n cancelLabel?: string;\n onClose?: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n private stackSignal = signal<ModalConfig[]>([]);\n private closeRequestSignal = signal<number>(0);\n private router = inject(Router);\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n this.router.events.subscribe(() => {\n this.stackSignal.set([]);\n });\n this.destroyRef.onDestroy(() => this.stackSignal.set([]));\n }\n\n modalStack = computed(() => this.stackSignal());\n currentModal = computed<ModalConfig | null>(() => {\n const stack = this.stackSignal();\n return stack.length > 0 ? stack[stack.length - 1] : null;\n });\n closeRequest = computed(() => this.closeRequestSignal());\n\n open(config: ModalConfig) {\n this.stackSignal.update((stack) => [...stack, config]);\n }\n\n accept() {\n this.close();\n }\n\n close() {\n const stack = this.stackSignal();\n if (stack.length > 0) {\n stack[stack.length - 1]?.onClose?.();\n this.stackSignal.set(stack.slice(0, -1));\n this.closeRequestSignal.update((v) => v + 1);\n }\n }\n\n clear() {\n this.stackSignal.set([]);\n }\n}\n","import {\n Component,\n viewChild,\n ViewContainerRef,\n ComponentRef,\n inject,\n effect,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n signal,\n DestroyRef,\n computed,\n untracked,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucideX,\n LucideCheck,\n LucideMaximize2,\n LucideMinimize2,\n LucideLoaderCircle,\n} from '@lucide/angular';\nimport { Subscription } from 'rxjs';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { ModalService, ModalConfig } from './modal.service';\nimport { NotificationService } from '../notification/notification.service';\n\nconst icons: Record<string, any> = {\n x: LucideX,\n check: LucideCheck,\n 'maximize-2': LucideMaximize2,\n 'minimize-2': LucideMinimize2,\n 'loader-circle': LucideLoaderCircle,\n};\n\n@Component({\n selector: 'shk-modal',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent {\n protected getIcon = (name: string) => icons[name] ?? LucideX;\n\n private notificationSrv = inject(NotificationService);\n private destroyRef = inject(DestroyRef);\n private modalSrv = inject(ModalService);\n private transloco = inject(TranslocoService);\n private cdr = inject(ChangeDetectorRef);\n\n container = viewChild('dynamicContent', { read: ViewContainerRef });\n\n currentConfig = signal<ModalConfig | null>(null);\n title = signal('');\n visible = signal(false);\n loading = signal(false);\n isProcessing = signal(false);\n isExpanded = signal(false);\n isFormValid = signal(false);\n\n componentRef: ComponentRef<any> | null = null;\n private subscriptions: Subscription[] = [];\n\n computedModalWidth = computed(() => {\n return this.isExpanded() ? '100vw' : (this.currentConfig()?.width ?? '560px');\n });\n\n modalButtonsVisible = computed(() => this.currentConfig()?.showButtons ?? true);\n showExpandButton = computed(() => this.currentConfig()?.showExpandButton ?? false);\n cancelLabel = computed(() => this.currentConfig()?.cancelLabel || 'Cancelar');\n acceptLabel = computed(() => this.currentConfig()?.acceptLabel || 'Aceptar');\n\n constructor() {\n effect(() => {\n const config = this.modalSrv.currentModal();\n if (config) {\n this.currentConfig.set(config);\n this.title.set(config.title);\n this.isExpanded.set(false);\n this.visible.set(true);\n this.isProcessing.set(false);\n this.loading.set(false);\n this.cdr.markForCheck();\n setTimeout(() => {\n untracked(() => this.loadComponent(config));\n });\n } else {\n this.visible.set(false);\n this.currentConfig.set(null);\n this.cdr.markForCheck();\n }\n });\n\n this.destroyRef.onDestroy(() => this.cleanup());\n }\n\n onVisibleChange(show: boolean) {\n this.visible.set(show);\n if (!show) {\n this.closeModal();\n }\n this.cdr.markForCheck();\n }\n\n private loadComponent(config: ModalConfig) {\n const containerRef = this.container();\n if (!containerRef) return;\n\n this.cleanup();\n containerRef.clear();\n\n this.componentRef = containerRef.createComponent(config.component);\n\n if (config.data) {\n Object.entries(config.data).forEach(([key, value]) => {\n this.componentRef?.setInput(key, value);\n });\n }\n\n const instance = this.componentRef.instance;\n\n this.subscribeToOutput(instance.formValid, (valid: boolean) => {\n this.isFormValid.set(valid);\n this.cdr.markForCheck();\n });\n this.subscribeToOutput(instance.submitSuccess, () =>\n this.handleSubmit(true),\n );\n this.subscribeToOutput(instance.submitError, () =>\n this.handleSubmit(false),\n );\n\n this.componentRef.changeDetectorRef.markForCheck();\n this.cdr.markForCheck();\n }\n\n private subscribeToOutput(output: any, callback: (value: any) => void) {\n if (output?.subscribe) {\n this.subscriptions.push(output.subscribe(callback));\n }\n }\n\n private handleSubmit(success: boolean) {\n this.isProcessing.set(false);\n this.loading.set(false);\n this.cdr.markForCheck();\n if (success) {\n untracked(() => this.modalSrv.accept());\n }\n }\n\n closeModal() {\n if (this.componentRef?.instance?.handleCancel) {\n this.componentRef.instance.handleCancel();\n }\n this.doClose();\n }\n\n doClose() {\n this.visible.set(false);\n this.isProcessing.set(false);\n this.loading.set(false);\n if (this.isExpanded()) {\n this.isExpanded.set(false);\n }\n this.cdr.markForCheck();\n setTimeout(() => {\n this.cleanup();\n this.modalSrv.close();\n }, 100);\n }\n\n toggleExpand() {\n this.isExpanded.update((v) => !v);\n this.cdr.markForCheck();\n }\n\n onAccept() {\n if (!this.componentRef || !this.isDynamicComponent(this.componentRef.instance)) return;\n\n if (this.isProcessing()) return;\n\n const instance = this.componentRef.instance;\n const form = this.getForm(instance);\n\n if (form) {\n this.markAllAsTouched(form);\n this.componentRef.changeDetectorRef.markForCheck();\n this.cdr.markForCheck();\n\n if (this.hasRealErrors(form)) {\n this.notificationSrv.addNotification(\n this.transloco.translate('modal.formInvalid'),\n 'warning',\n );\n return;\n }\n }\n\n this.isProcessing.set(true);\n this.loading.set(true);\n this.cdr.markForCheck();\n instance.onSubmit();\n }\n\n private getForm(instance: any): FormGroup | null {\n if (!instance['form']) return null;\n return typeof instance['form'] === 'function'\n ? instance['form']()\n : instance['form'];\n }\n\n private hasRealErrors(control: FormGroup | FormControl): boolean {\n if (control instanceof FormControl) {\n const errors = control.errors;\n return errors\n ? Object.keys(errors).some((key) => key !== 'warning')\n : false;\n }\n\n const groupErrors = control.errors;\n if (\n groupErrors &&\n Object.keys(groupErrors).some((key) => key !== 'warning')\n ) {\n return true;\n }\n\n return Object.values(control.controls).some((child) =>\n this.hasRealErrors(child as any),\n );\n }\n\n private markAllAsTouched(control: FormGroup | FormControl): void {\n control.markAsTouched();\n control.updateValueAndValidity({ onlySelf: true, emitEvent: true });\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((child) =>\n this.markAllAsTouched(child as any),\n );\n }\n }\n\n private isDynamicComponent(instance: any): boolean {\n return typeof instance?.onSubmit === 'function' && instance?.form !== undefined;\n }\n\n private cleanup() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n this.subscriptions = [];\n\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","@if (visible()) {\n <div\n class=\"fixed inset-0 bg-black/40 backdrop-blur-sm flex items-center justify-center z-40 p-4 pt-4 overflow-y-auto _shk-scrollbar\"\n (click)=\"closeModal()\"\n >\n <div\n class=\"bg-white dark:[background-color:var(--shk-surface-100)] rounded-xl shadow-2xl overflow-hidden flex flex-col animate-in fade-in zoom-in duration-200\"\n [class.w-[95vw]]=\"isExpanded()\"\n [class.h-[90vh]]=\"isExpanded()\"\n [class.w-full]=\"!isExpanded()\"\n [style.max-width]=\"isExpanded() ? undefined : computedModalWidth()\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"h-1.5 w-full _shk-gradient-emerald shrink-0\"></div>\n\n <div class=\"flex items-center justify-between px-6 pt-4 pb-2 shrink-0\">\n <span class=\"font-semibold text-lg _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">{{ title() }}</span>\n <div class=\"flex items-center gap-2\">\n @if (showExpandButton()) {\n <button\n type=\"button\"\n (click)=\"toggleExpand()\"\n class=\"p-1.5 rounded-lg hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] _shk-text-surface-500 dark:[color:var(--shk-surface-500)] transition-colors\"\n >\n @if (isExpanded()) {\n <svg [lucideIcon]=\"getIcon('minimize-2')\" class=\"w-4 h-4\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('maximize-2')\" class=\"w-4 h-4\"></svg>\n }\n </button>\n }\n <button\n type=\"button\"\n (click)=\"closeModal()\"\n class=\"p-1.5 rounded-lg hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] _shk-text-surface-500 dark:[color:var(--shk-surface-500)] transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-y-auto px-6 py-4 flex-1 max-h-[70vh] _shk-scrollbar\">\n <ng-container #dynamicContent></ng-container>\n </div>\n\n @if (modalButtonsVisible()) {\n <hr class=\"border-t _shk-border dark:[border-color:var(--shk-surface-200)] shrink-0\" />\n <div class=\"flex justify-end gap-3 px-6 py-4 shrink-0\">\n <button\n type=\"button\"\n (click)=\"closeModal()\"\n [disabled]=\"loading()\"\n class=\"px-4 py-2 text-sm font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-600)] _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] hover:[background-color:var(--shk-surface-200)] dark:hover:[background-color:var(--shk-surface-300)] rounded-lg transition-colors flex items-center gap-2 disabled:opacity-50\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n {{ cancelLabel() }}\n </button>\n <button\n type=\"button\"\n (click)=\"onAccept()\"\n [disabled]=\"loading()\"\n class=\"px-4 py-2 text-sm font-semibold _shk-text-white _shk-bg-emerald hover:[background-color:var(--shk-emerald-700)] rounded-lg shadow-md transition-all flex items-center gap-2 disabled:opacity-50\"\n >\n @if (loading()) {\n <svg [lucideIcon]=\"getIcon('loader-circle')\" class=\"w-4 h-4 animate-spin\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('check')\" class=\"w-4 h-4\"></svg>\n }\n {{ acceptLabel() }}\n </button>\n </div>\n }\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n output,\n viewChild,\n forwardRef,\n signal,\n computed,\n effect,\n HostListener,\n ElementRef,\n ChangeDetectionStrategy,\n inject,\n DestroyRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\nimport { LucideDynamicIcon, LucideChevronDown, LucideChevronLeft, LucideChevronRight } from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n 'chevron-down': LucideChevronDown,\n 'chevron-left': LucideChevronLeft,\n 'chevron-right': LucideChevronRight,\n};\n\nexport interface SelectOption {\n label: string;\n value: any;\n custom?: boolean;\n}\n\n@Component({\n selector: 'shk-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslocoModule,\n LucideDynamicIcon,\n ],\n templateUrl: './select.component.html',\n styles: [`\n .select-option-active {\n background-color: var(--shk-primary-50);\n outline: 2px solid var(--shk-primary-500);\n outline-offset: -2px;\n color: var(--shk-primary-700);\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n ],\n})\nexport class SelectComponent implements ControlValueAccessor {\n protected getIcon = (name: string) => icons[name] ?? LucideChevronDown;\n\n options = input<SelectOption[]>([]);\n multiple = input<boolean>(false);\n validCombinations = input<string[][] | undefined>(undefined);\n placeholder = input<string>('Seleccionar...');\n label = input<string | undefined>(undefined);\n isLoading = input<boolean>(false);\n isAllDataLoaded = input<boolean>(false);\n allowCustomEntries = input<boolean>(false);\n formGroup = input<FormGroup | undefined>(undefined);\n isSearchable = input<boolean>(false);\n itemsPerPage = input<number>(10);\n control = input<FormControl | undefined>(undefined);\n usePagination = input<boolean>(false);\n disabled = input<boolean>(false);\n errorMessages = input<{ [key: string]: string }>({\n required: 'Este campo es requerido',\n });\n preserveSearchOnLoad = input<boolean>(false);\n emptyMessageKey = input<string>('common.no_records');\n dropdownUpward = input<boolean>(false);\n showEmptyOption = input<boolean>(true);\n\n selectionChange = output<any>();\n search = output<string>();\n\n filterInput = viewChild<ElementRef>('filterInput');\n private selectContainer = viewChild<ElementRef>('selectContainer');\n private selectTrigger = viewChild<ElementRef>('selectTrigger');\n private dropdownContainer = viewChild<ElementRef>('dropdownContainer');\n\n private _value = signal<any>(null);\n isOpen = signal<boolean>(false);\n focusedIndex = signal<number>(-1);\n searchTerm = signal<string>('');\n currentPage = signal<number>(1);\n private searchTermChanged = signal<boolean>(false);\n private _isDisabled = signal<boolean>(false);\n\n private debounceTimer: any = null;\n\n private errorTracker = signal<number>(0);\n hadError = signal<boolean>(false);\n private subscribed = signal<boolean>(false);\n private valueSubscribed = signal<boolean>(false);\n\n value = computed(() => this._value());\n\n isDisabled = computed(() => this.disabled() || this._isDisabled());\n\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) {\n return fg.get(lbl) as FormControl;\n }\n return undefined;\n });\n\n shouldShowError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n wasFixedError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n displayValue = computed(() => {\n const val = this._value();\n const opts = this.options();\n const isMultiple = this.multiple();\n const ph = this.placeholder();\n\n if (!val || (Array.isArray(val) && val.length === 0)) {\n return ph;\n }\n\n if (isMultiple) {\n const values = Array.isArray(val) ? val : [];\n const selectedLabels = opts\n .filter((option) => values.includes(option.value))\n .map((option) => option.label);\n\n if (selectedLabels.length === 0) {\n return values.toString();\n }\n return selectedLabels.join(', ');\n }\n\n const selectedOption = opts.find((opt) => opt.value === val);\n return selectedOption ? selectedOption.label : val;\n });\n\n getErrorMessages = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((errorKey) => {\n if (customErrors[errorKey]) return customErrors[errorKey];\n\n switch (errorKey) {\n case 'required':\n return t.translate('validation.required');\n case 'email':\n return t.translate('validation.email');\n case 'minlength':\n return t.translate('validation.minlength', {\n min: ctrl.errors!['minlength'].requiredLength,\n });\n case 'maxlength':\n return t.translate('validation.maxlength', {\n max: ctrl.errors!['maxlength'].requiredLength,\n });\n case 'pattern':\n return t.translate('validation.pattern');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n filteredOptions = computed(() => {\n const opts = this.options();\n const term = this.searchTerm();\n\n if (!term) return opts;\n\n const normalizedSearchTerm = this.normalizeText(term);\n\n const matched = opts.filter((option) =>\n this.normalizeText(option.label).includes(normalizedSearchTerm),\n );\n\n return matched.sort((a, b) => {\n const aLbl = this.normalizeText(a.label);\n const bLbl = this.normalizeText(b.label);\n\n const aStarts = aLbl.startsWith(normalizedSearchTerm);\n const bStarts = bLbl.startsWith(normalizedSearchTerm);\n\n if (aStarts && !bStarts) return -1;\n if (!aStarts && bStarts) return 1;\n return 0;\n });\n });\n\n paginatedOptions = computed(() => {\n let filtered = this.filteredOptions();\n const term = this.searchTerm();\n const allowCustom = this.allowCustomEntries();\n\n if (allowCustom && term && !filtered.some((o) => o.value === term)) {\n filtered = [\n {\n label: `${term} (nuevo)`,\n value: term,\n custom: true,\n },\n ...filtered,\n ];\n }\n\n if (!this.usePagination()) {\n return filtered;\n }\n\n const page = this.currentPage();\n const perPage = this.itemsPerPage();\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return filtered.slice(startIndex, endIndex);\n });\n\n regularOptions = computed(() => {\n const opts = this.paginatedOptions().filter((option) => !option.custom);\n\n if (!this.multiple() && this.showEmptyOption()) {\n return [{ label: '- Sin selección -', value: null } as SelectOption, ...opts];\n }\n\n return opts;\n });\n\n totalPages = computed(() => {\n if (!this.usePagination()) {\n return 1;\n }\n\n const filtered = this.filteredOptions();\n const perPage = this.itemsPerPage();\n return Math.ceil(filtered.length / perPage);\n });\n\n hasSelectedValues = computed(() => {\n const val = this._value();\n if (this.multiple()) {\n return val && val.length > 0;\n }\n return !!val;\n });\n\n showCustomOption = computed(() => {\n const term = this.searchTerm();\n const opts = this.options();\n return (\n this.allowCustomEntries() &&\n term !== '' &&\n !opts.some((o) => o.value === term)\n );\n });\n\n private transloco = inject(TranslocoService);\n private onChange = (_: any) => {};\n private onTouched = () => {};\n private destroyRef = inject(DestroyRef);\n\n constructor(private elementRef: ElementRef) {\n effect(() => {\n const term = this.searchTerm();\n\n if (term !== '' && this.isSearchable()) {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n this.debounceTimer = setTimeout(() => {\n this.search.emit(term);\n }, 300);\n }\n });\n\n effect(() => {\n const isMultiple = this.multiple();\n if (this._value() === null || this._value() === undefined) {\n this._value.set(isMultiple ? [] : null);\n }\n });\n\n effect(() => {\n this.options();\n this.currentPage.set(1);\n\n if (!this.preserveSearchOnLoad() || !this.searchTermChanged()) {\n this.searchTerm.set('');\n }\n });\n\n effect(() => {\n const ctrl = this.actualControl();\n\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n });\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n this.subscribed.set(true);\n });\n\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n }\n\n private markAsTouchedAndUpdate(): void {\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n\n this.onTouched();\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl?.invalid) {\n this.hadError.set(true);\n }\n }\n\n normalizeText(text: string): string {\n return text\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n if (this.focusedIndex() >= 0) {\n const options = this.regularOptions();\n const selectedOption = options[this.focusedIndex()];\n if (selectedOption && !this.isOptionDisabled(selectedOption)) {\n this.selectOption(selectedOption);\n }\n }\n } else {\n this.toggleDropdown();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.toggleDropdown();\n } else {\n this.moveFocus(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n case 'Tab':\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n }\n break;\n }\n }\n\n handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n event.stopPropagation();\n if (this.focusedIndex() >= 0) {\n const options = this.regularOptions();\n const option = options[this.focusedIndex()];\n if (option && !this.isOptionDisabled(option)) {\n this.selectOption(option);\n }\n } else {\n const filtered = this.filteredOptions();\n if (filtered.length > 0) {\n this.selectOption(filtered[0]);\n }\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n event.stopPropagation();\n this.moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n event.stopPropagation();\n this.moveFocus(-1);\n break;\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n break;\n }\n }\n\n private moveFocus(direction: number) {\n const options = this.regularOptions();\n if (!options.length) return;\n\n let newIndex = this.focusedIndex();\n do {\n newIndex = newIndex + direction;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n } while (this.isOptionDisabled(options[newIndex]) && options.length > 1);\n\n this.focusedIndex.set(newIndex);\n\n setTimeout(() => {\n const container = this.dropdownContainer()?.nativeElement;\n const activeItem = container?.querySelector('.select-option-active');\n if (activeItem && container) {\n const itemTop = activeItem.offsetTop;\n const itemBottom = itemTop + activeItem.offsetHeight;\n const containerScrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n\n if (itemTop < containerScrollTop) {\n container.scrollTop = itemTop;\n } else if (itemBottom > containerScrollTop + containerHeight) {\n container.scrollTop = itemBottom - containerHeight;\n }\n }\n });\n }\n\n private getSelectedIndex(): number {\n const currentVal = this._value();\n const options = this.regularOptions();\n if (currentVal === null || currentVal === undefined) return -1;\n const index = options.findIndex((opt) => opt.value === currentVal);\n return index >= 0 ? index : -1;\n }\n\n isOptionDisabled(option: SelectOption): boolean {\n if (option.value === null) return false;\n\n const validCombos = this.validCombinations();\n if (!validCombos || !this.multiple()) {\n return false;\n }\n\n const currentSelection = Array.isArray(this._value()) ? this._value() : [];\n\n if (currentSelection.length === 0) {\n return false;\n }\n\n if (currentSelection.includes(option.value)) {\n return false;\n }\n\n const hypotheticalSelection = [...currentSelection, option.value];\n\n return !validCombos.some((combination) => {\n const allSelected = hypotheticalSelection.every((selected) =>\n combination.includes(selected),\n );\n const withinLimit = hypotheticalSelection.length <= combination.length;\n return allSelected && withinLimit;\n });\n }\n\n isSelected(option: SelectOption): boolean {\n const val = this._value();\n if (this.multiple()) {\n return Array.isArray(val) && val.includes(option.value);\n }\n return val === option.value;\n }\n\n nextPage() {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current < total) {\n this.currentPage.set(current + 1);\n }\n }\n\n previousPage() {\n const current = this.currentPage();\n if (current > 1) {\n this.currentPage.set(current - 1);\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onClickOutside(event: MouseEvent): void {\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\n if (!clickedInside && this.isOpen()) {\n this.markAsTouchedAndUpdate();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n }\n }\n\n onCustomOptionClick() {\n const term = this.searchTerm();\n const customOption: SelectOption = {\n label: term,\n value: term,\n };\n\n this._value.set(customOption.value);\n this.onChange(customOption.value);\n this.selectionChange.emit(customOption.value);\n this.isOpen.set(false);\n this.searchTerm.set('');\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(customOption.value);\n }\n\n this.markAsTouchedAndUpdate();\n }\n\n onInputChange(event: Event) {\n const previousSearch = this.searchTerm();\n const target = event.target as HTMLInputElement;\n this.searchTerm.set(target.value);\n this.searchTermChanged.set(true);\n\n if (previousSearch !== this.searchTerm()) {\n this.search.emit(this.searchTerm());\n\n if (this.allowCustomEntries() && this.searchTerm()) {\n this._value.set(this.searchTerm());\n this.onChange(this.searchTerm());\n this.selectionChange.emit(this.searchTerm());\n }\n }\n\n this.currentPage.set(1);\n }\n\n onOptionClick(option: SelectOption) {\n if (this.isDisabled()) return;\n\n if (this.allowCustomEntries() && option.value === this.searchTerm()) {\n const customOption: SelectOption = {\n label: this.searchTerm(),\n value: this.searchTerm(),\n };\n\n this._value.set(customOption.value);\n this.onChange(customOption.value);\n this.selectionChange.emit(customOption.value);\n this.isOpen.set(false);\n this.searchTerm.set('');\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(customOption.value);\n }\n\n this.markAsTouchedAndUpdate();\n return;\n }\n\n if (this.multiple()) {\n this.toggleOption(option);\n } else {\n this.selectOption(option);\n }\n }\n\n selectOption(option: SelectOption) {\n if (this.multiple()) {\n this.toggleOption(option);\n return;\n }\n this._value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n this.selectionChange.emit(option.value);\n this.isOpen.set(false);\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(option.value);\n }\n\n this.markAsTouchedAndUpdate();\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n\n toggleOption(option: SelectOption) {\n if (this.isOptionDisabled(option)) return;\n if (!this.multiple()) return;\n\n let currentValue = this._value();\n if (!Array.isArray(currentValue)) {\n currentValue = [];\n }\n\n const index = currentValue.indexOf(option.value);\n let newValue: any[];\n\n if (index === -1) {\n newValue = [...currentValue, option.value];\n } else {\n newValue = currentValue.filter((v: any) => v !== option.value);\n }\n\n this._value.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.selectionChange.emit(newValue);\n\n this.markAsTouchedAndUpdate();\n }\n\n toggleDropdown() {\n if (this.isDisabled()) return;\n\n const wasOpen = this.isOpen();\n this.isOpen.update((v) => !v);\n\n if (!wasOpen && this.isOpen()) {\n const selectedIdx = this.getSelectedIndex();\n this.focusedIndex.set(selectedIdx);\n } else if (wasOpen && !this.isOpen()) {\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n\n if (this.isOpen() && this.isSearchable()) {\n setTimeout(() => {\n this.filterInput()?.nativeElement?.focus();\n });\n }\n this.onTouched();\n }\n\n trackByFn(index: number, option: SelectOption): any {\n return option.value;\n }\n\n writeValue(value: any): void {\n if (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n this._value.set(this.multiple() ? [] : null);\n } else {\n this._value.set(value);\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}","<div\n #selectContainer\n class=\"relative w-full font-sans outline-none\"\n>\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div\n #selectTrigger\n class=\"flex justify-between items-center w-full px-3 py-2 border _shk-border rounded-lg _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] transition-colors duration-150 cursor-pointer min-h-[2.5rem] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus-within:outline-none focus-within:[background-color:var(--shk-surface-50)] dark:focus-within:[background-color:var(--shk-surface-100)] focus-within:ring-1 focus-within:[--tw-ring-color:var(--shk-primary-500)] focus-within:[border-color:var(--shk-primary-500)] focus:outline-none focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] focus:[border-color:var(--shk-primary-500)] sm:text-sm\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeydown($event)\"\n (click)=\"toggleDropdown()\"\n [class.open]=\"isOpen()\"\n [class.disabled-select]=\"isDisabled()\"\n [class._shk-border-red]=\"shouldShowError()\"\n >\n <div class=\"selected-value truncate\">\n @if (isSearchable() && isOpen()) {\n <input\n #filterInput\n type=\"text\"\n class=\"w-full bg-transparent border-0 outline-none p-0 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n placeholder=\"Buscar...\"\n [value]=\"searchTerm()\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <span\n [class._shk-text-surface-400]=\"!hasSelectedValues()\"\n [class._shk-text-surface-800]=\"hasSelectedValues()\"\n >\n {{ displayValue() }}\n </span>\n }\n </div>\n <div\n class=\"text-xs transition-transform duration-200 shrink-0 ml-2\"\n [class.rotate-180]=\"isOpen()\"\n >\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 _shk-text-surface-400 dark:[color:var(--shk-surface-400)]\"\n ></svg>\n </div>\n </div>\n\n @if (isOpen()) {\n <div\n #dropdownContainer\n (keydown)=\"onKeydown($event)\"\n class=\"absolute left-0 right-0 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border _shk-border rounded-lg max-h-[240px] overflow-y-auto z-50 shadow-lg _shk-scrollbar\"\n [class.top-full]=\"!dropdownUpward()\"\n [class.bottom-full]=\"dropdownUpward()\"\n [class.mt-1]=\"!dropdownUpward()\"\n [class.mb-1]=\"dropdownUpward()\"\n >\n @if (showCustomOption()) {\n <div\n class=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:[background-color:var(--shk-surface-50)] dark:hover:[background-color:var(--shk-surface-200)] text-sm\"\n (click)=\"onCustomOptionClick()\"\n >\n <span class=\"font-semibold _shk-text-primary\">Crear nuevo:</span>\n <span class=\"_shk-text-surface-700 dark:[color:var(--shk-surface-700)] ml-1\">{{ searchTerm() }}</span>\n </div>\n }\n\n @for (option of regularOptions(); track trackByFn($index, option); let i = $index) {\n <div\n class=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:[background-color:var(--shk-surface-50)] dark:hover:[background-color:var(--shk-surface-200)] text-sm _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n [class.opacity-50]=\"isOptionDisabled(option)\"\n [class.select-option-active]=\"focusedIndex() === i\"\n [class._shk-text-surface-400]=\"option.value === null\"\n (click)=\"!isOptionDisabled(option) && onOptionClick(option)\"\n >\n @if (multiple()) {\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"!isOptionDisabled(option) && toggleOption(option)\"\n class=\"flex-shrink-0 [accent-color:var(--shk-primary-600)]\"\n />\n {{ option.label }}\n } @else {\n {{ option.label }}\n }\n </div>\n }\n\n <div class=\"px-3 py-2 text-center\">\n @if (isLoading() && regularOptions().length === 0) {\n <div class=\"flex items-center justify-center gap-2 text-sm _shk-text-surface-500\">\n <svg class=\"spinner\" viewBox=\"0 0 50 50\">\n <circle\n class=\"path\"\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke-width=\"5\"\n ></circle>\n </svg>\n Cargando más resultados...\n </div>\n }\n\n @if (!isLoading() && isAllDataLoaded() && regularOptions().length === 0) {\n <div class=\"text-sm _shk-text-surface-400 italic\">\n No se encontraron coincidencias\n </div>\n }\n\n @if (options().length === 0) {\n <div class=\"text-sm _shk-text-surface-400 italic\">\n {{ emptyMessageKey() | transloco }}\n </div>\n }\n </div>\n\n @if (usePagination() && totalPages() > 1) {\n <div class=\"flex justify-between items-center px-3 py-2 border-t _shk-border\">\n <button\n class=\"bg-transparent border-0 cursor-pointer px-2 py-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-50 disabled:cursor-not-allowed _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"$event.stopPropagation(); previousPage()\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <span class=\"text-sm _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\">\n {{ currentPage() }} de {{ totalPages() }}\n </span>\n <button\n class=\"bg-transparent border-0 cursor-pointer px-2 py-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-50 disabled:cursor-not-allowed _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"$event.stopPropagation(); nextPage()\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n }\n </div>\n }\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\" tabindex=\"-1\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>","import { Component, input, output, signal, computed, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { LucideDynamicIcon, LucideUpload, LucideFile, LucideX } from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n upload: LucideUpload,\n file: LucideFile,\n x: LucideX,\n};\n\nexport interface FileUploadError {\n type: 'size' | 'type';\n message: string;\n file: File;\n}\n\n@Component({\n selector: 'shk-file-upload',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './file-upload.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadComponent {\n protected getIcon = (name: string) => icons[name] ?? LucideUpload;\n private transloco = inject(TranslocoService);\n\n label = input<string>('Cargar archivo');\n accept = input<string>('image/*');\n maxFileSize = input<number>(2 * 1024 * 1024);\n maxFiles = input<number>(0);\n fileUploadText = input<string>('Seleccionar archivo');\n fileRecommendation = input<string>('');\n changeFilesText = input<string>('Cambiar archivos');\n multiple = input<boolean>(false);\n\n fileSelected = output<File[]>();\n fileRemoved = output<void>();\n fileError = output<FileUploadError>();\n fileWarning = output<FileUploadError>();\n\n selectedFiles = signal<File[]>([]);\n errorMessage = signal<string>('');\n isDragOver = signal<boolean>(false);\n\n private previewUrls = new Map<File, string>();\n\n canAddMore = computed(() => {\n if (!this.multiple()) return this.selectedFiles().length === 0;\n const max = this.maxFiles();\n if (max <= 0) return true;\n return this.selectedFiles().length < max;\n });\n\n maxReached = computed(() => {\n const max = this.maxFiles();\n if (max <= 0) return false;\n return this.selectedFiles().length >= max;\n });\n\n isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n }\n\n previewUrl(file: File): string {\n if (!this.previewUrls.has(file)) {\n this.previewUrls.set(file, URL.createObjectURL(file));\n }\n return this.previewUrls.get(file) ?? '';\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n onFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n input.value = '';\n }\n\n private processFiles(files: File[]): void {\n this.errorMessage.set('');\n const validFiles: File[] = [];\n\n for (const file of files) {\n const error = this.validateFile(file);\n if (error) {\n this.fileError.emit(error);\n this.errorMessage.set(error.message);\n return;\n }\n\n const warning = this.checkSizeWarning(file);\n if (warning) {\n this.fileWarning.emit(warning);\n }\n\n validFiles.push(file);\n }\n\n const max = this.maxFiles();\n if (max > 0) {\n const currentCount = this.selectedFiles().length;\n const allowed = max - currentCount;\n if (validFiles.length > allowed) {\n const errorMsg = this.transloco.translate('fileUpload.maxFiles', undefined, `Máximo ${max} archivos permitidos`);\n this.errorMessage.set(errorMsg);\n return;\n }\n }\n\n if (this.multiple()) {\n this.selectedFiles.set([...this.selectedFiles(), ...validFiles]);\n } else {\n this.clearPreviews();\n this.selectedFiles.set(validFiles);\n }\n\n this.fileSelected.emit(this.selectedFiles());\n }\n\n private validateFile(file: File): FileUploadError | null {\n const acceptStr = this.accept();\n if (acceptStr && acceptStr !== '*') {\n const acceptTypes = acceptStr.split(',').map((t) => t.trim());\n const valid = acceptTypes.some((type) => {\n if (type.endsWith('/*')) {\n const category = type.replace('/*', '');\n return file.type.startsWith(category);\n }\n if (type.startsWith('.')) {\n const ext = type.slice(1).toLowerCase();\n return file.name.toLowerCase().endsWith('.' + ext);\n }\n if (type.includes('/')) {\n return file.type === type;\n }\n return false;\n });\n\n if (!valid) {\n return {\n type: 'type',\n message: this.transloco.translate('fileUpload.invalidType', { accept: acceptStr }, `Tipo de archivo no válido. Formatos aceptados: ${acceptStr}`),\n file,\n };\n }\n }\n\n if (this.maxFileSize() > 0 && file.size > this.maxFileSize()) {\n return {\n type: 'size',\n message: this.transloco.translate('fileUpload.fileTooLarge', { size: this.formatFileSize(this.maxFileSize()) }, `El archivo excede el tamaño máximo de ${this.formatFileSize(this.maxFileSize())}`),\n file,\n };\n }\n\n return null;\n }\n\n private checkSizeWarning(file: File): FileUploadError | null {\n if (this.maxFileSize() > 0 && file.size > this.maxFileSize() * 0.9) {\n return {\n type: 'size',\n message: this.transloco.translate('fileUpload.sizeWarning', { size: this.formatFileSize(this.maxFileSize()) }, `El archivo está cerca del límite de tamaño (${this.formatFileSize(this.maxFileSize())})`),\n file,\n };\n }\n return null;\n }\n\n removeFile(file: File): void {\n const url = this.previewUrls.get(file);\n if (url) {\n URL.revokeObjectURL(url);\n this.previewUrls.delete(file);\n }\n\n this.selectedFiles.update((files) => files.filter((f) => f !== file));\n this.errorMessage.set('');\n\n if (this.selectedFiles().length === 0) {\n this.fileRemoved.emit();\n }\n }\n\n changeFiles(): void {\n this.clearPreviews();\n this.selectedFiles.set([]);\n this.errorMessage.set('');\n }\n\n private clearPreviews(): void {\n for (const [file, url] of this.previewUrls) {\n URL.revokeObjectURL(url);\n }\n this.previewUrls.clear();\n }\n\n private formatFileSize(bytes: number): string {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n}","<div class=\"flex flex-col gap-2\">\n @if (label()) {\n <label class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-300)]\">\n {{ label() }}\n </label>\n }\n\n @if (canAddMore()) {\n <div\n class=\"relative border-2 border-dashed _shk-border dark:[border-color:var(--shk-surface-700)] rounded-lg p-4 transition-colors hover:[border-color:var(--shk-primary-400)] dark:hover:[border-color:var(--shk-primary-500)]\"\n [class.border-red-400]=\"errorMessage()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n (change)=\"onFileChange($event)\"\n class=\"hidden\"\n />\n\n <div\n class=\"flex flex-col items-center gap-2 cursor-pointer\"\n (click)=\"fileInput.click()\"\n [class.drag-over]=\"isDragOver()\"\n >\n <svg [lucideIcon]=\"getIcon('upload')\" class=\"w-8 h-8 _shk-icon-subtle dark:[color:var(--shk-surface-600)]\"></svg>\n <span class=\"text-sm _shk-text-surface-700 dark:[color:var(--shk-surface-300)]\">\n {{ fileUploadText() }}\n </span>\n @if (fileRecommendation()) {\n <span class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">\n {{ fileRecommendation() }}\n </span>\n }\n </div>\n </div>\n }\n\n @if (maxReached()) {\n <div class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] text-center py-2\">\n Máximo {{ maxFiles() }} archivos alcanzado\n </div>\n }\n\n @if (selectedFiles().length > 0) {\n <div class=\"flex flex-wrap gap-3\">\n @for (file of selectedFiles(); track file.name + file.size + file.lastModified) {\n <div class=\"relative group\">\n @if (isImageFile(file)) {\n <img\n [src]=\"previewUrl(file)\"\n [alt]=\"file.name\"\n class=\"w-20 h-20 object-cover rounded-lg _shk-border dark:[border-color:var(--shk-surface-700)]\"\n />\n } @else {\n <div class=\"w-20 h-20 rounded-lg _shk-border dark:[border-color:var(--shk-surface-700)] flex flex-col items-center justify-center _shk-bg-surface-50 dark:[background-color:var(--shk-surface-800)] gap-1\">\n <svg [lucideIcon]=\"getIcon('file')\" class=\"w-6 h-6 _shk-text-surface-400\"></svg>\n <span class=\"text-[10px] _shk-text-surface-400 truncate max-w-[70px] px-1 text-center\">{{ file.name }}</span>\n </div>\n }\n <button\n type=\"button\"\n (click)=\"removeFile(file)\"\n class=\"absolute -top-1.5 -right-1.5 w-5 h-5 bg-red-500 text-white rounded-full text-xs flex items-center justify-center opacity-0 group-hover:opacity-100 transition shadow\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-3 h-3\"></svg>\n </button>\n </div>\n }\n </div>\n @if (!multiple()) {\n <button\n type=\"button\"\n (click)=\"changeFiles()\"\n class=\"text-xs _shk-text-primary hover:[color:var(--shk-primary-700)] dark:[color:var(--shk-primary-400)] dark:hover:[color:var(--shk-primary-300)] underline cursor-pointer bg-transparent border-0\"\n >\n {{ changeFilesText() }}\n </button>\n }\n }\n\n @if (errorMessage()) {\n <p class=\"text-xs _shk-text-red-500\">{{ errorMessage() }}</p>\n }\n</div>","import {\n Component,\n input,\n output,\n inject,\n signal,\n computed,\n effect,\n ChangeDetectionStrategy,\n untracked,\n ChangeDetectorRef,\n DestroyRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\nimport {\n LucideDynamicIcon,\n LucideArrowUp,\n LucideArrowDown,\n LucideArrowUpDown,\n LucideChevronLeft,\n LucideChevronRight,\n LucideChevronsLeft,\n LucideChevronsRight,\n LucideSearch,\n LucideX,\n LucideLoader,\n LucideInbox,\n LucideFunnel,\n LucidePencil,\n LucideTrash2,\n LucideEye,\n LucideKey,\n LucideUserPen,\n LucideToggleRight,\n LucideToggleLeft,\n LucideDownload,\n LucideUpload,\n LucidePlus,\n LucideEyeOff,\n LucideRefreshCw,\n LucideCirclePlus,\n LucideFileSpreadsheet,\n LucidePresentation,\n LucideFile,\n LucideFileText,\n LucideArchive,\n LucideCircleCheck,\n LucideCircleX,\n LucideCheck,\n LucideCopy,\n LucideShare2,\n LucidePlay,\n LucideVideo,\n LucideStar,\n LucideClock,\n LucideSettings,\n LucideLogOut,\n LucideUser,\n LucideUserCheck,\n LucideUserRoundX,\n LucideUserPlus,\n LucideBuilding,\n LucideLandmark,\n LucidePackage,\n LucideBox,\n LucideTags,\n LucideTag,\n LucideTruck,\n LucideUsers,\n LucideReceipt,\n LucideBot,\n LucideLineChart,\n LucideDollarSign,\n LucidePercent,\n LucideCalculator,\n LucideShieldCheck,\n LucideUserCog,\n LucideWarehouse,\n LucideList,\n} from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n 'chevrons-left': LucideChevronsLeft,\n 'chevrons-right': LucideChevronsRight,\n 'chevron-left': LucideChevronLeft,\n 'chevron-right': LucideChevronRight,\n 'arrow-up': LucideArrowUp,\n 'arrow-down': LucideArrowDown,\n 'arrow-up-down': LucideArrowUpDown,\n search: LucideSearch,\n x: LucideX,\n loader: LucideLoader,\n inbox: LucideInbox,\n filter: LucideFunnel,\n funnel: LucideFunnel,\n pencil: LucidePencil,\n edit: LucidePencil,\n 'trash-2': LucideTrash2,\n delete: LucideTrash2,\n eye: LucideEye,\n view: LucideEye,\n key: LucideKey,\n 'change-password': LucideKey,\n 'user-pen': LucideUserPen,\n 'edit-user': LucideUserPen,\n 'toggle-right': LucideToggleRight,\n activate: LucideToggleRight,\n 'toggle-left': LucideToggleLeft,\n deactivate: LucideToggleLeft,\n download: LucideDownload,\n export: LucideDownload,\n upload: LucideUpload,\n import: LucideUpload,\n plus: LucidePlus,\n add: LucidePlus,\n 'circle-plus': LucideCirclePlus,\n 'eye-off': LucideEyeOff,\n 'refresh-cw': LucideRefreshCw,\n 'file-spreadsheet': LucideFileSpreadsheet,\n presentation: LucidePresentation,\n file: LucideFile,\n 'file-text': LucideFileText,\n archive: LucideArchive,\n 'circle-check': LucideCircleCheck,\n 'circle-x': LucideCircleX,\n check: LucideCheck,\n copy: LucideCopy,\n 'share-2': LucideShare2,\n play: LucidePlay,\n video: LucideVideo,\n star: LucideStar,\n clock: LucideClock,\n settings: LucideSettings,\n 'log-out': LucideLogOut,\n logout: LucideLogOut,\n user: LucideUser,\n 'user-check': LucideUserCheck,\n 'user-round-x': LucideUserRoundX,\n 'user-plus': LucideUserPlus,\n building: LucideBuilding,\n landmark: LucideLandmark,\n package: LucidePackage,\n box: LucideBox,\n tags: LucideTags,\n tag: LucideTag,\n truck: LucideTruck,\n users: LucideUsers,\n receipt: LucideReceipt,\n bot: LucideBot,\n 'line-chart': LucideLineChart,\n 'dollar-sign': LucideDollarSign,\n percent: LucidePercent,\n calculator: LucideCalculator,\n 'shield-check': LucideShieldCheck,\n 'user-cog': LucideUserCog,\n warehouse: LucideWarehouse,\n list: LucideList,\n};\n\nfunction getIcon(name: string): any {\n return icons[name] ?? LucidePlus;\n}\n\nexport interface Column {\n field: string;\n header: string;\n sortable?: boolean;\n filter?: boolean;\n filterPlaceholder?: string;\n width?: string;\n defaultSort?: true;\n filterType?: 'text' | 'exact' | 'select';\n filterOptions?: { label: string; value: any }[];\n template?: 'text' | 'tag';\n format?: (row: any) => string;\n tagValue?: (row: any) => string;\n tagSeverity?: (row: any) => 'success' | 'danger' | 'warn' | 'info' | undefined;\n tagStyle?: (row: any) => { [key: string]: string } | undefined;\n}\n\nexport interface TableAction {\n label: string;\n icon: string;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\nexport interface RowAction {\n label: string | ((data: any) => string);\n icon: string | ((data: any) => string);\n onClick: (rowData: any) => void;\n class?: string | ((data: any) => string);\n isVisible?: (rowData: any) => boolean;\n isDisabled?: (rowData: any) => boolean;\n}\n\nexport interface PageChangeEvent {\n first: number;\n rows: number;\n page: number;\n pageCount: number;\n}\n\nexport interface FilterChangeEvent {\n filters: { [key: string]: any };\n}\n\n@Component({\n selector: 'shk-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, ReactiveFormsModule, TranslocoModule, LucideDynamicIcon],\n templateUrl: './table.component.html',\n styles: [\n `\n input:focus {\n outline: none;\n }\n input[type='text'] {\n font-weight: normal !important;\n }\n table th {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n table td {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n td button svg {\n width: 1.125rem !important;\n height: 1.125rem !important;\n }\n td button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .table-action-btn svg {\n width: 1rem !important;\n height: 1rem !important;\n min-width: 1rem !important;\n min-height: 1rem !important;\n }\n .table-action-btn {\n padding: 0.5rem !important;\n min-width: 2rem !important;\n min-height: 2rem !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .table-scroll-wrapper {\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n border-radius: inherit;\n -webkit-overflow-scrolling: touch;\n container-type: inline-size;\n }\n .table-scroll-wrapper table {\n table-layout: fixed;\n width: 100%;\n }\n\n /*\n FIX responsive: en pantallas anchas la tabla se comporta igual que\n antes (columnas 'auto' estirándose al 100% del contenedor, sin\n scroll horizontal). Solo cuando el contenedor real de la tabla es\n angosto (container query, no media query de viewport: así funciona\n también con sidebar/paneles) las columnas pasan a un ancho fijo real\n (ver getColumnWidth en el TS) para que la tabla tenga un ancho\n intrínseco mayor al del contenedor y el scroll horizontal funcione\n de verdad, con snap columna por columna. Se usa table-layout: auto\n en modo compacto porque con table-layout: fixed la tabla se fuerza\n al ancho del contenedor y no desborda (el scroll queda muerto).\n */\n @container (max-width: 768px) {\n .table-scroll-wrapper {\n scroll-snap-type: x mandatory;\n }\n .table-scroll-wrapper table {\n table-layout: auto;\n width: 100%;\n }\n .table-scroll-wrapper th:not([data-shk-actions]),\n .table-scroll-wrapper td:not([data-shk-actions]) {\n min-width: var(--shk-col-width, 140px);\n max-width: var(--shk-col-width, 140px);\n }\n .table-scroll-wrapper th,\n .table-scroll-wrapper td {\n scroll-snap-align: start;\n }\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class TableComponent {\n private fb = inject(FormBuilder);\n private cdr = inject(ChangeDetectorRef);\n private transloco = inject(TranslocoService);\n private destroyRef = inject(DestroyRef);\n\n protected getIcon = getIcon;\n\n /**\n * FIX responsive: ancho mínimo que toma cada columna (excepto 'actions',\n * que ya tiene su propio ancho calculado) SOLO en pantallas angostas\n * (ver el media query en `styles`). En pantallas anchas esta variable no\n * se usa: las columnas se estiran normalmente al 100% del contenedor,\n * igual que antes. Ajustable por columna vía `col.width` si alguna\n * necesita más o menos espacio en mobile.\n */\n protected readonly DEFAULT_COLUMN_WIDTH = '140px';\n\n getColumnWidth(col: Column): string {\n return col.width || this.DEFAULT_COLUMN_WIDTH;\n }\n\n private actionsHeaderLabel = toSignal(this.transloco.selectTranslate('common.actions'), {\n initialValue: 'Acciones',\n });\n\n // FIX #14: idioma como señal para que los textos traducidos de forma\n // imperativa (transloco.translate) se recalculen al cambiar de idioma.\n private currentLang = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n data = input<any[]>([]);\n columns = input<Column[]>([]);\n rowsPerPage = input<number>(10);\n rowsPerPageOptions = input<number[]>([10, 25, 50]);\n loading = input<boolean>(false);\n showActionRow = input<boolean>(true);\n customTemplates = input<{ [key: string]: any }>({});\n headerActions = input<TableAction[]>([]);\n rowActions = input<RowAction[]>([]);\n hasShadow = input<boolean>(true);\n defaultSortField = input<string>('');\n defaultSortOrder = input<number>(1);\n showSearch = input<boolean>(true);\n searchPlaceholder = input<string>('');\n emptyMessage = input<string>('');\n serverSide = input<boolean>(false);\n totalRecords = input<number>(0);\n filters = input<{ label: string; value: string }[]>([]);\n activeFilter = input<string>('');\n\n refresh = output<void>();\n pageChange = output<PageChangeEvent>();\n filterChange = output<FilterChangeEvent>();\n searchChange = output<string>();\n filterClick = output<string>();\n\n private originalData = signal<any[]>([]);\n searchedData = signal<any[]>([]);\n filteredData = signal<any[]>([]);\n displayedData = signal<any[]>([]);\n localTotalRecords = signal<number>(0);\n first = signal<number>(0);\n showFilterInput = signal<{ [key: string]: boolean }>({});\n searchQuery = signal<string>('');\n sortField = signal<string>('');\n sortOrder = signal<number>(1);\n rowsPerPageLocal = signal<number>(10);\n\n totalPages = computed(() =>\n Math.max(1, Math.ceil(this.effectiveTotalRecords() / this.rowsPerPageLocal())),\n );\n currentPage = computed(() => Math.floor(this.first() / this.rowsPerPageLocal()) + 1);\n\n columnFiltersForm!: FormGroup;\n\n // FIX #4 (medio): debounce también para el buscador global en modo servidor.\n private filterSubject = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n // FIX #3/#crítico: para evitar reconstruir el FormGroup (y perder lo escrito\n // por el usuario) cuando `columns()` cambia de referencia pero el set de\n // campos filtrables es el mismo.\n private lastFilterFieldsSignature = '';\n private columnFilterSubscriptions: Subscription[] = [];\n\n columnsWithActions = computed<Column[]>(() => {\n const columnsArray = this.columns();\n const showAction = this.showActionRow();\n const rowActionsArray = this.rowActions();\n const translatedHeader = this.actionsHeaderLabel();\n if (showAction && rowActionsArray.length > 0) {\n const actionsWidth =\n rowActionsArray.length <= 2 ? '110px' : rowActionsArray.length <= 3 ? '130px' : '170px';\n return [\n {\n field: 'actions',\n header: translatedHeader || 'Acciones',\n width: actionsWidth,\n defaultSort: true,\n },\n ...columnsArray,\n ];\n }\n return [...columnsArray];\n });\n\n effectiveTotalRecords = computed(() => {\n return this.serverSide() ? this.totalRecords() : this.localTotalRecords();\n });\n effectiveDisplayedData = computed(() => {\n return this.serverSide() ? this.data() : this.displayedData();\n });\n\n // FIX #14: pageReport ahora es un computed reactivo (incluye idioma como\n // dependencia) en vez de un método imperativo llamado desde el template.\n pageReport = computed(() => {\n this.currentLang(); // fuerza recálculo al cambiar de idioma\n const total = this.effectiveTotalRecords();\n if (total === 0) {\n return this.transloco.translate('table.pageReport', {\n from: 0,\n to: 0,\n total: 0,\n });\n }\n const from = this.first() + 1;\n const to = Math.min(this.first() + this.rowsPerPageLocal(), total);\n return this.transloco.translate('table.pageReport', { from, to, total });\n });\n\n constructor() {\n this.columnFiltersForm = this.fb.group({});\n\n this.filterSubject\n .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.serverSide()) {\n this.emitFilterChange();\n }\n });\n\n this.searchSubject\n .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n\n effect(() => {\n const newData = this.data();\n untracked(() => {\n this.originalData.set([...newData]);\n if (!this.serverSide()) {\n this.applyFilters();\n }\n });\n });\n\n effect(() => {\n const cols = this.columns();\n untracked(() => {\n this.setupColumnFilters(cols);\n });\n });\n\n effect(() => {\n const field = this.defaultSortField();\n const order = this.defaultSortOrder();\n if (field) {\n untracked(() => {\n this.sortField.set(field);\n this.sortOrder.set(order);\n if (!this.serverSide()) {\n this.applySort();\n this.updateDisplayedData();\n }\n });\n }\n });\n\n effect(() => {\n const query = this.searchQuery();\n untracked(() => {\n if (!this.serverSide()) {\n this.applySearch();\n }\n });\n });\n\n effect(() => {\n this.rowsPerPageLocal.set(this.rowsPerPage());\n });\n }\n\n /**\n * FIX crítico: antes se reconstruía el FormGroup completo (perdiendo el\n * texto escrito por el usuario en los filtros y el estado de visibilidad\n * de cada filtro) cada vez que `columns()` cambiaba de referencia, aunque\n * el conjunto de campos filtrables fuera idéntico. Ahora comparamos una\n * \"firma\" del set de campos+tipo de filtro y solo reconstruimos si\n * realmente cambió. Además, las suscripciones previas se limpian antes de\n * crear las nuevas para no acumular fugas de memoria.\n */\n private setupColumnFilters(cols: Column[]) {\n const filterableCols = cols.filter((c) => c.filter);\n const signature = filterableCols.map((c) => `${c.field}:${c.filterType ?? 'text'}`).join('|');\n\n if (signature === this.lastFilterFieldsSignature && this.columnFiltersForm) {\n return;\n }\n this.lastFilterFieldsSignature = signature;\n\n // Limpiar suscripciones anteriores antes de reconstruir.\n this.columnFilterSubscriptions.forEach((sub) => sub.unsubscribe());\n this.columnFilterSubscriptions = [];\n\n const previousValues: { [key: string]: any } = {};\n if (this.columnFiltersForm) {\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n previousValues[field] = this.columnFiltersForm.get(field)?.value;\n });\n }\n\n const filterControls: any = {};\n const filterVisibility: { [key: string]: boolean } = { ...this.showFilterInput() };\n filterableCols.forEach((col) => {\n const defaultValue = col.filterType === 'select' ? null : '';\n const preserved = previousValues.hasOwnProperty(col.field)\n ? previousValues[col.field]\n : defaultValue;\n filterControls[col.field] = [preserved];\n if (!(col.field in filterVisibility)) {\n filterVisibility[col.field] = false;\n }\n });\n\n this.columnFiltersForm = this.fb.group(filterControls);\n this.showFilterInput.set(filterVisibility);\n\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n const sub = this.columnFiltersForm\n .get(field)\n ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.first.set(0);\n if (this.serverSide()) {\n this.filterSubject.next();\n } else {\n this.applyFilters();\n }\n this.cdr.markForCheck();\n });\n if (sub) {\n this.columnFilterSubscriptions.push(sub);\n }\n });\n }\n\n private emitFilterChange() {\n const filters: { [key: string]: any } = {};\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n const value = this.columnFiltersForm.get(field)?.value;\n if (value !== null && value !== undefined && value !== '') {\n filters[field] = value;\n }\n });\n this.filterChange.emit({ filters });\n }\n\n private applySearch() {\n const original = this.originalData();\n const query = this.searchQuery().toLowerCase();\n if (!query) {\n this.searchedData.set([...original]);\n } else {\n const filtered = original.filter((item) => {\n return Object.values(item).some((val) => {\n if (val === null || val === undefined) return false;\n return String(val).toLowerCase().includes(query);\n });\n });\n this.searchedData.set(filtered);\n }\n this.applyColumnFilters();\n }\n\n private applyFilters() {\n this.applySearch();\n }\n\n private applyColumnFilters() {\n const data = this.searchedData();\n let filtered = [...data];\n this.columns().forEach((col) => {\n if (col.filter) {\n const filterValue = this.columnFiltersForm.get(col.field)?.value;\n if (filterValue !== null && filterValue !== undefined && filterValue !== '') {\n if (col.filterType === 'select') {\n filtered = filtered.filter((item) => item[col.field] == filterValue);\n } else if (col.filterType === 'exact') {\n const searchTerm = String(filterValue).toLowerCase();\n filtered = filtered.filter(\n (item) => String(item[col.field]).toLowerCase() === searchTerm,\n );\n } else {\n const searchTerm = String(filterValue).toLowerCase();\n filtered = filtered.filter((item) =>\n String(item[col.field]).toLowerCase().includes(searchTerm),\n );\n }\n }\n }\n });\n this.filteredData.set(filtered);\n this.localTotalRecords.set(filtered.length);\n this.applySort();\n this.updateDisplayedData();\n }\n\n private updateDisplayedData() {\n const filtered = this.filteredData();\n const firstIndex = this.first();\n const rows = this.rowsPerPageLocal();\n const displayed = filtered.slice(firstIndex, firstIndex + rows);\n this.displayedData.set(displayed);\n }\n\n onFilterClick(value: string) {\n this.filterClick.emit(value);\n }\n\n toggleSort(field: string) {\n if (this.sortField() === field) {\n this.sortOrder.set(this.sortOrder() * -1);\n } else {\n this.sortField.set(field);\n this.sortOrder.set(1);\n }\n this.first.set(0);\n if (!this.serverSide()) {\n this.applySort();\n this.updateDisplayedData();\n }\n }\n\n /**\n * FIX: se documenta explícitamente el criterio de valores null/undefined.\n * Se mantienen SIEMPRE al final de la lista, sin importar la dirección del\n * orden (comportamiento común e intencional en tablas de datos). Si en tu\n * caso de uso prefieres que \"sigan\" la dirección del sort, multiplica\n * ambos returns por `order`.\n */\n private applySort() {\n const field = this.sortField();\n const order = this.sortOrder();\n if (!field) return;\n const data = [...this.filteredData()];\n data.sort((a, b) => {\n const va = a[field];\n const vb = b[field];\n if (va == null && vb == null) return 0;\n if (va == null) return 1; // nulls siempre al final\n if (vb == null) return -1;\n if (va < vb) return -1 * order;\n if (va > vb) return 1 * order;\n return 0;\n });\n this.filteredData.set(data);\n }\n\n onSearchInput(value: string) {\n this.searchQuery.set(value);\n this.first.set(0);\n if (this.serverSide()) {\n this.searchSubject.next(value);\n }\n }\n\n clearFilter(field: string) {\n const column = this.columns().find((col) => col.field === field);\n const value = column?.filterType === 'select' ? null : '';\n this.columnFiltersForm.get(field)?.setValue(value);\n const visibility = this.showFilterInput();\n this.showFilterInput.set({ ...visibility, [field]: false });\n this.cdr.markForCheck();\n }\n\n toggleFilter(field: string) {\n const visibility = this.showFilterInput();\n this.showFilterInput.set({ ...visibility, [field]: !visibility[field] });\n this.cdr.markForCheck();\n }\n\n /**\n * FIX #5 (falsy zero): antes el template usaba `columnFiltersForm.get(field)?.value`\n * directamente en un `@if`/`[class]`, lo cual falla cuando el valor es `0`\n * (número), ya que `0` es falsy en JS. Este helper compara explícitamente\n * contra null/undefined/''.\n */\n hasFilterValue(field: string): boolean {\n const value = this.columnFiltersForm.get(field)?.value;\n return value !== null && value !== undefined && value !== '';\n }\n\n getPageReport(): string {\n return this.pageReport();\n }\n\n goToFirst() {\n const rows = this.rowsPerPageLocal();\n this.first.set(0);\n if (this.serverSide()) {\n this.pageChange.emit({\n first: 0,\n rows,\n page: 0,\n pageCount: Math.ceil(this.totalRecords() / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n goToLast() {\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n const rows = this.rowsPerPageLocal();\n const lastFirst = Math.max(0, Math.ceil(total / rows) * rows - rows);\n this.first.set(lastFirst);\n if (this.serverSide()) {\n const page = Math.floor(lastFirst / rows);\n this.pageChange.emit({\n first: lastFirst,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n onRowsPerPageChange(rows: number) {\n rows = Number(rows);\n this.rowsPerPageLocal.set(rows);\n this.first.set(0);\n if (this.serverSide()) {\n this.pageChange.emit({\n first: 0,\n rows,\n page: 0,\n pageCount: Math.ceil(this.totalRecords() / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n refreshData() {\n this.refresh.emit();\n }\n\n isFirstPage(): boolean {\n return this.first() === 0;\n }\n\n isLastPage(): boolean {\n const total = this.effectiveTotalRecords();\n return this.first() + this.rowsPerPageLocal() >= total;\n }\n\n next() {\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n const rows = this.rowsPerPageLocal();\n let first = this.first() + rows;\n if (first >= total) {\n first = total - rows;\n }\n this.first.set(first);\n if (this.serverSide()) {\n const page = Math.floor(first / rows);\n this.pageChange.emit({\n first,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n prev() {\n const rows = this.rowsPerPageLocal();\n let first = this.first() - rows;\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n if (first < 0) {\n first = 0;\n }\n this.first.set(first);\n if (this.serverSide()) {\n const page = Math.floor(first / rows);\n this.pageChange.emit({\n first,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n reset() {\n this.goToFirst();\n }\n\n getRowActionLabel(action: RowAction, rowData: any): string {\n return typeof action.label === 'function' ? action.label(rowData) : action.label;\n }\n\n getRowActionIconName(action: RowAction, rowData: any): string {\n return typeof action.icon === 'function' ? action.icon(rowData) : action.icon;\n }\n\n getRowActionClass(action: RowAction, rowData: any): string {\n if (!action.class) return '';\n return typeof action.class === 'function' ? action.class(rowData) : action.class;\n }\n\n isHeaderActionDisabled(action: TableAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n\n isHeaderActionVisible(action: TableAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n isRowActionDisabled(action: RowAction, rowData: any): boolean {\n return action.isDisabled ? action.isDisabled(rowData) : false;\n }\n\n isRowActionVisible(action: RowAction, rowData: any): boolean {\n return action.isVisible ? action.isVisible(rowData) : true;\n }\n\n truncate(value: any, limit: number = 30): string {\n if (value === null || value === undefined) return '';\n const str = String(value);\n return str.length > limit ? str.slice(0, limit) + '\\u2026' : str;\n }\n\n getTagClass(severity?: string): string {\n switch (severity) {\n case 'success':\n return '_shk-bg-green-soft _shk-text-green-600';\n case 'danger':\n return '_shk-bg-red-soft _shk-text-red-600';\n case 'warn':\n return '_shk-bg-yellow-soft _shk-text-yellow-600';\n case 'info':\n return '_shk-bg-blue-soft _shk-text-blue-600';\n default:\n return '_shk-bg-surface-100 _shk-text-surface-700 dark:[background-color:var(--shk-surface-700)] dark:[color:var(--shk-surface-300)]';\n }\n }\n\n /**\n * FIX #7 (medio): trackBy real por identidad de fila en vez de `$index`.\n * Si tu dato no tiene `id`/`_id`, cae de vuelta al índice (comportamiento\n * anterior), pero se recomienda pasar filas con un identificador único.\n */\n trackByRow(row: any, index: number): any {\n return row?.id ?? row?._id ?? index;\n }\n\n /** FIX accesibilidad: soporte de teclado (Enter/Espacio) para ordenar columnas. */\n onHeaderKeydown(event: KeyboardEvent, col: Column) {\n if (col.field === 'actions' || !col.sortable) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleSort(col.field);\n }\n }\n\n /** FIX accesibilidad: valor aria-sort para el <th> correspondiente. */\n getAriaSort(col: Column): 'ascending' | 'descending' | 'none' {\n if (col.field === 'actions' || !col.sortable) return 'none';\n if (this.sortField() !== col.field) return 'none';\n return this.sortOrder() === 1 ? 'ascending' : 'descending';\n }\n}\n","<div class=\"space-y-2 min-[1440px]:space-y-3 mt-2 min-[1440px]:mt-3 animate-fade-in pb-8\">\n @if (showSearch() || filters().length > 0 || headerActions().length > 0) {\n <div class=\"card p-2 min-[1440px]:p-2.5 flex flex-row items-center justify-between gap-2\">\n <div class=\"flex items-center gap-2 min-[1440px]:gap-3 flex-1 min-w-0\">\n @if (showSearch()) {\n <div class=\"relative w-full md:w-52 min-[1440px]:w-56\">\n <label [for]=\"'shk-table-search'\" class=\"sr-only\">{{\n searchPlaceholder() || ('common.search_placeholder' | transloco)\n }}</label>\n <div class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center pointer-events-none\">\n <svg\n [lucideIcon]=\"getIcon('search')\"\n class=\"w-3.5 h-3.5 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n </div>\n <input\n id=\"shk-table-search\"\n type=\"text\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"searchPlaceholder() || ('common.search_placeholder' | transloco)\"\n class=\"block w-full pl-8 pr-3 py-1.5 text-xs border _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md leading-5 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:outline-none focus:bg-white dark:focus:[background-color:var(--shk-surface-800)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)]\"\n />\n </div>\n }\n @if (filters().length > 0) {\n <div\n class=\"flex _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] p-0.5 rounded-md ml-auto\"\n role=\"group\"\n >\n @for (f of filters(); track f.value) {\n <button\n type=\"button\"\n (click)=\"onFilterClick(f.value)\"\n [attr.aria-pressed]=\"f.value === activeFilter()\"\n class=\"px-2.5 min-[1440px]:px-3 py-1 text-xs font-medium rounded _shk-text-surface-700 dark:[color:var(--shk-surface-700)] transition-all\"\n [class]=\"\n f.value === activeFilter()\n ? 'bg-white shadow-sm dark:[background-color:var(--shk-surface-700)]'\n : ''\n \"\n >\n {{ f.label }}\n </button>\n }\n </div>\n }\n </div>\n @if (headerActions().length > 0) {\n <div class=\"flex items-center gap-1.5 shrink-0\">\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <button\n type=\"button\"\n [class]=\"\n 'inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed ' +\n (action.class || '')\n \"\n [disabled]=\"isHeaderActionDisabled(action)\"\n [attr.aria-label]=\"action.label\"\n (click)=\"action.onClick()\"\n >\n @if (action.icon) {\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n }\n {{ action.label }}\n </button>\n }\n }\n </div>\n }\n </div>\n }\n <div class=\"card p-0 overflow-hidden\" [class.shadow-lg]=\"hasShadow()\">\n <div class=\"table-scroll-wrapper _shk-scrollbar\">\n <table>\n <thead>\n <tr>\n @for (col of columnsWithActions(); track col.field) {\n <th\n scope=\"col\"\n (click)=\"col.field !== 'actions' && col.sortable && toggleSort(col.field)\"\n (keydown)=\"onHeaderKeydown($event, col)\"\n [tabindex]=\"col.field !== 'actions' && col.sortable ? 0 : -1\"\n [attr.role]=\"col.field !== 'actions' && col.sortable ? 'button' : null\"\n [attr.aria-sort]=\"getAriaSort(col)\"\n [attr.data-shk-actions]=\"col.field === 'actions' ? '' : null\"\n [style.cursor]=\"col.field !== 'actions' && col.sortable ? 'pointer' : 'default'\"\n [style.width]=\"col.field === 'actions' ? col.width : null\"\n [style.min-width]=\"col.field === 'actions' ? col.width : null\"\n [style.--shk-col-width]=\"col.field !== 'actions' ? getColumnWidth(col) : null\"\n class=\"px-2 min-[1440px]:px-3 py-2 min-[1440px]:py-2.5 text-left text-[10px] min-[1440px]:text-xs font-bold _shk-text-surface-500 dark:[color:var(--shk-surface-400)] uppercase tracking-wider _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border-b _shk-border dark:[border-color:var(--shk-surface-200)] focus:outline-none focus-visible:ring-1 focus-visible:[--tw-ring-color:var(--shk-primary-500)]\"\n >\n @if (col.field !== 'actions') {\n <div class=\"flex items-center justify-between gap-2\">\n <span>{{ col.header }}</span>\n <div class=\"flex items-center gap-1\">\n @if (col.sortable) {\n <div class=\"relative group\">\n @if (sortField() === col.field) {\n <svg\n [lucideIcon]=\"getIcon(sortOrder() === 1 ? 'arrow-up' : 'arrow-down')\"\n class=\"w-3.5 h-3.5 _shk-text-primary\"\n ></svg>\n } @else {\n <svg\n [lucideIcon]=\"getIcon('arrow-up-down')\"\n class=\"w-3.5 h-3.5 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n }\n <span\n class=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n >\n {{ 'table.tooltips.sort' | transloco }}\n </span>\n </div>\n }\n @if (col.filter) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); toggleFilter(col.field)\"\n [attr.aria-label]=\"'table.tooltips.filter' | transloco\"\n [attr.aria-expanded]=\"showFilterInput()[col.field] || false\"\n class=\"_shk-text-surface-400 dark:[color:var(--shk-surface-500)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-300)] transition-colors\"\n >\n <svg\n [lucideIcon]=\"getIcon('filter')\"\n class=\"w-3.5 h-3.5\"\n [class._shk-text-primary]=\"hasFilterValue(col.field)\"\n ></svg>\n <span\n class=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n >\n {{ 'table.tooltips.filter' | transloco }}\n </span>\n </button>\n </div>\n }\n </div>\n </div>\n @if (col.filter && showFilterInput()[col.field]) {\n <div\n class=\"mt-2\"\n [formGroup]=\"columnFiltersForm\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"relative\">\n @if (col.filterType !== 'select') {\n <label [for]=\"'shk-filter-' + col.field\" class=\"sr-only\">{{\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n }}</label>\n <input\n [id]=\"'shk-filter-' + col.field\"\n type=\"text\"\n [formControlName]=\"col.field\"\n class=\"w-full px-3 py-1.5 text-sm rounded-md border _shk-border dark:[border-color:var(--shk-surface-200)] bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-500)]\"\n [placeholder]=\"\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n \"\n />\n }\n @if (col.filterType === 'select') {\n <label [for]=\"'shk-filter-' + col.field\" class=\"sr-only\">{{\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n }}</label>\n <select\n [id]=\"'shk-filter-' + col.field\"\n [formControlName]=\"col.field\"\n class=\"w-full px-2 py-1 text-xs rounded-md border _shk-border dark:[border-color:var(--shk-surface-200)] bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] appearance-none\"\n >\n <option [ngValue]=\"null\">{{ 'table.filterAll' | transloco }}</option>\n @for (opt of col.filterOptions || []; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n }\n @if (hasFilterValue(col.field) && col.filterType !== 'select') {\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 -translate-y-1/2 _shk-text-surface-400 dark:[color:var(--shk-surface-500)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-300)]\"\n (click)=\"clearFilter(col.field)\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n }\n </div>\n </div>\n }\n } @else {\n <div class=\"flex items-center justify-center\">\n <span>{{ col.header }}</span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n @if (loading()) {\n <tbody class=\"border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <tr>\n <td [attr.colspan]=\"columnsWithActions().length\" class=\"text-center py-12\">\n <div\n class=\"flex items-center justify-center\"\n role=\"status\"\n [attr.aria-label]=\"'common.loading' | transloco\"\n >\n <svg\n [lucideIcon]=\"getIcon('loader')\"\n class=\"w-6 h-6 animate-spin _shk-text-primary\"\n ></svg>\n </div>\n </td>\n </tr>\n </tbody>\n } @else if (effectiveDisplayedData().length === 0) {\n <tbody class=\"border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <tr>\n <td [attr.colspan]=\"columnsWithActions().length\" class=\"text-center py-12\">\n <div class=\"flex flex-col items-center\">\n <div\n class=\"w-16 h-16 _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] rounded-full flex items-center justify-center mb-4\"\n >\n <svg\n [lucideIcon]=\"getIcon('inbox')\"\n class=\"w-8 h-8 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n </div>\n <p\n class=\"text-lg font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-300)]\"\n >\n {{ emptyMessage() || ('common.no_records' | transloco) }}\n </p>\n </div>\n </td>\n </tr>\n </tbody>\n } @else {\n <tbody>\n @for (rowData of effectiveDisplayedData(); track trackByRow(rowData, $index)) {\n <tr\n class=\"hover:[background-color:color-mix(in srgb,var(--shk-primary-50)30%,transparent)] dark:hover:[background-color:color-mix(in srgb,var(--shk-primary-900)10%,transparent)] transition-colors duration-200 border-b _shk-border dark:[border-color:var(--shk-surface-100)]\"\n >\n @for (col of columnsWithActions(); track col.field) {\n <td\n [attr.data-shk-actions]=\"col.field === 'actions' ? '' : null\"\n class=\"px-2 min-[1440px]:px-3 py-2 min-[1440px]:py-2.5 text-xs font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)] whitespace-nowrap\"\n [style.overflow]=\"col.field === 'actions' ? 'visible' : 'hidden'\"\n [style.text-overflow]=\"col.field === 'actions' ? 'clip' : 'ellipsis'\"\n [style.--shk-col-width]=\"col.field !== 'actions' ? getColumnWidth(col) : null\"\n >\n @if (col.field !== 'actions') {\n @if (col.template === 'tag') {\n <span\n class=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium\"\n [class]=\"\n getTagClass(col.tagSeverity ? col.tagSeverity(rowData) : undefined)\n \"\n [style]=\"col.tagStyle ? col.tagStyle(rowData) : undefined\"\n >\n {{ col.tagValue ? col.tagValue(rowData) : rowData[col.field] }}\n </span>\n } @else if (col.format) {\n <span>{{ col.format(rowData) }}</span>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n customTemplates()[col.field] || defaultTemplate;\n context: { $implicit: rowData, field: col.field }\n \"\n ></ng-container>\n }\n } @else {\n <div class=\"flex items-center justify-start gap-px\">\n @for (action of rowActions(); track $index) {\n @if (isRowActionVisible(action, rowData)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick(rowData)\"\n [class]=\"\n 'table-action-btn hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] rounded-md ' +\n getRowActionClass(action, rowData)\n \"\n [disabled]=\"isRowActionDisabled(action, rowData) || false\"\n [attr.aria-label]=\"getRowActionLabel(action, rowData)\"\n >\n <svg\n [lucideIcon]=\"getIcon(getRowActionIconName(action, rowData))\"\n class=\"w-4 h-4\"\n ></svg>\n </button>\n <span\n class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n >\n {{ getRowActionLabel(action, rowData) }}\n </span>\n </div>\n }\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n }\n </table>\n <ng-template #defaultTemplate let-rowData let-field=\"field\">\n {{ truncate(rowData[field], 30) }}\n </ng-template>\n </div>\n <div\n class=\"flex items-center justify-between gap-4 px-2 min-[1440px]:px-3 py-2 border-t _shk-border dark:[border-color:var(--shk-surface-100)]\"\n >\n <div class=\"text-xs _shk-text-surface-600 dark:[color:var(--shk-surface-400)]\">\n {{ pageReport() }}\n </div>\n <div\n class=\"flex items-center gap-0.5\"\n role=\"navigation\"\n >\n <button\n type=\"button\"\n (click)=\"goToFirst()\"\n [disabled]=\"isFirstPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevrons-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"isFirstPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <span\n class=\"px-2 text-xs font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n >{{ currentPage() }} / {{ totalPages() }}</span\n >\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"isLastPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-4 h-4\"></svg>\n </button>\n <button\n type=\"button\"\n (click)=\"goToLast()\"\n [disabled]=\"isLastPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevrons-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n <div\n class=\"flex items-center gap-1.5 text-xs _shk-text-surface-600 dark:[color:var(--shk-surface-400)]\"\n >\n <label [for]=\"'shk-rows-per-page'\">{{ 'table.rows' | transloco }}</label>\n <select\n id=\"shk-rows-per-page\"\n [value]=\"rowsPerPageLocal()\"\n (change)=\"onRowsPerPageChange($any($event.target).value)\"\n class=\"border _shk-border dark:[border-color:var(--shk-surface-200)] rounded px-2 py-1 text-xs bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:outline-none focus:[border-color:var(--shk-primary-500)]\"\n >\n @for (opt of rowsPerPageOptions(); track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n</div>\n","import { Component, input, signal, ElementRef, inject, HostListener } from '@angular/core';\n\n@Component({\n selector: 'shk-tooltip',\n standalone: true,\n template: `\n <div class=\"relative group inline-flex\">\n <ng-content></ng-content>\n @if (text() && mode() === 'hover') {\n <span\n class=\"absolute px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n [class.top-full]=\"position() === 'bottom'\"\n [class.bottom-full]=\"position() === 'top'\"\n [class.left-full]=\"position() === 'right'\"\n [class.mt-1]=\"position() === 'bottom'\"\n [class.mb-1]=\"position() === 'top'\"\n [class.ml-1]=\"position() === 'right'\"\n [class.left-1/2]=\"position() !== 'right'\"\n [class.-translate-x-1/2]=\"position() !== 'right'\"\n [class.top-1/2]=\"position() === 'right'\"\n [class.-translate-y-1/2]=\"position() === 'right'\"\n >\n {{ text() }}\n </span>\n }\n @if (text() && mode() === 'fixed') {\n <span\n class=\"fixed px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n [style.top.px]=\"tooltipY()\"\n [style.left.px]=\"tooltipX()\"\n [style.transform]=\"position() === 'right' ? 'translateY(-50%)' : ''\"\n >\n {{ text() }}\n </span>\n }\n </div>\n `,\n})\nexport class TooltipComponent {\n readonly text = input<string>('');\n readonly position = input<'top' | 'bottom' | 'right'>('bottom');\n readonly mode = input<'hover' | 'fixed'>('hover');\n readonly offset = input(8);\n\n private elementRef = inject(ElementRef);\n\n tooltipX = signal(0);\n tooltipY = signal(0);\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.mode() !== 'fixed') return;\n const host = this.elementRef.nativeElement as HTMLElement;\n const container = host.querySelector('.group') as HTMLElement | null;\n if (!container) return;\n const rect = container.getBoundingClientRect();\n const off = this.offset();\n if (this.position() === 'right') {\n this.tooltipX.set(rect.right + off);\n this.tooltipY.set(rect.top + rect.height / 2);\n } else if (this.position() === 'bottom') {\n this.tooltipX.set(rect.left + rect.width / 2);\n this.tooltipY.set(rect.bottom + off);\n } else {\n this.tooltipX.set(rect.left + rect.width / 2);\n this.tooltipY.set(rect.top - off);\n }\n }\n}\n","import {\n Component,\n HostListener,\n Inject,\n PLATFORM_ID,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport {\n LucideHouse,\n LucideHome,\n LucideWarehouse,\n LucideBuilding,\n LucideBuilding2,\n LucideTruck,\n LucideUsers,\n LucideUser,\n LucideBox,\n LucidePackage,\n LucideTags,\n LucideTag,\n LucideReceipt,\n LucideBot,\n LucideSettings,\n LucideMenu,\n LucideChevronsLeft,\n LucideChevronsRight,\n LucideChevronDown,\n LucideChevronLeft,\n LucideChevronRight,\n LucideLogOut,\n LucideLayoutDashboard,\n LucideLineChart,\n LucideBarChart3,\n LucideStar,\n LucideDollarSign,\n LucidePercent,\n LucideCalculator,\n LucideSearch,\n LucideShieldCheck,\n LucideUserCog,\n LucideX,\n} from '@lucide/angular';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\nconst ICONS: Record<string, any> = {\n house: LucideHouse,\n home: LucideHome,\n dashboard: LucideLayoutDashboard,\n warehouse: LucideWarehouse,\n building: LucideBuilding,\n 'building-2': LucideBuilding2,\n truck: LucideTruck,\n users: LucideUsers,\n user: LucideUser,\n clients: LucideUsers,\n box: LucideBox,\n product: LucidePackage,\n package: LucidePackage,\n tags: LucideTags,\n tag: LucideTag,\n receipt: LucideReceipt,\n orders: LucideReceipt,\n bot: LucideBot,\n settings: LucideSettings,\n config: LucideSettings,\n menu: LucideMenu,\n 'line-chart': LucideLineChart,\n 'bar-chart-3': LucideBarChart3,\n star: LucideStar,\n 'dollar-sign': LucideDollarSign,\n percent: LucidePercent,\n calculator: LucideCalculator,\n search: LucideSearch,\n 'shield-check': LucideShieldCheck,\n 'user-cog': LucideUserCog,\n 'chevrons-left': LucideChevronsLeft,\n 'chevrons-right': LucideChevronsRight,\n 'chevron-down': LucideChevronDown,\n 'chevron-left': LucideChevronLeft,\n 'chevron-right': LucideChevronRight,\n 'log-out': LucideLogOut,\n logout: LucideLogOut,\n x: LucideX,\n};\n\nfunction getIcon(name?: string): any {\n if (!name) return null;\n return ICONS[name] ?? LucideMenu;\n}\n\nexport interface SidebarItem {\n id: string;\n label: string;\n icon?: string;\n route?: string;\n children?: SidebarItem[];\n roles?: string[];\n badge?: string | number;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface SidebarGroup {\n id?: string;\n label?: string;\n items: SidebarItem[];\n}\n\n@Component({\n selector: 'shk-sidebar',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon, TooltipComponent],\n templateUrl: './sidebar.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n\n .sidebar-transition {\n transition:\n width 0.3s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .sidebar-scroll {\n overflow-y: auto;\n overflow-x: visible;\n }\n\n @media (min-width: 1024px) {\n .sidebar-mobile-transform {\n transform: none !important;\n }\n }\n `,\n ],\n})\nexport class SidebarComponent {\n items = input<SidebarItem[]>([]);\n groups = input<SidebarGroup[]>([]);\n title = input<string>('');\n subtitle = input<string>('');\n logo = input<string>('');\n activeItemId = input<string>('');\n userRole = input<string>('');\n collapsible = input<boolean>(true);\n showToggle = input<boolean>(true);\n responsive = input<boolean>(true);\n fixed = input<boolean>(false);\n hasShadow = input<boolean>(true);\n expandedWidth = input<string>('16rem');\n collapsedWidth = input<string>('5rem');\n defaultExpanded = input<string[]>([]);\n labelPipe = input<(label: string) => string>((label: string) => label);\n expandTooltip = input<string>('Expandir');\n collapseTooltip = input<string>('Colapsar');\n\n collapsed = model<boolean>(false);\n mobileOpen = model<boolean>(false);\n\n itemClick = output<SidebarItem>();\n toggle = output<boolean>();\n\n protected getIcon = getIcon;\n protected selectedId = signal('');\n protected expandedGroups = signal<Set<string>>(new Set());\n\n private isBrowser = isPlatformBrowser(this.platformId);\n\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n effect(() => {\n this.selectedId.set(this.activeItemId());\n });\n\n effect(() => {\n const active = this.activeItemId();\n if (!active) return;\n const parent = this.navItems().find((item) =>\n item.children?.some((c) => c.id === active),\n );\n if (parent) {\n this.expandedGroups.update((set) => {\n if (set.has(parent.id)) return set;\n const next = new Set(set);\n next.add(parent.id);\n return next;\n });\n }\n });\n\n effect(() => {\n const defs = this.defaultExpanded();\n if (!defs.length) return;\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n defs.forEach((id) => next.add(id));\n return next;\n });\n });\n }\n\n protected width = computed(() =>\n this.collapsed() ? this.collapsedWidth() : this.expandedWidth(),\n );\n\n protected navItems = computed<SidebarItem[]>(() => {\n const role = this.userRole();\n const base = this.groups().length\n ? this.groups().flatMap((g) => g.items)\n : this.items();\n return base.filter((item) => {\n if (!item.roles || item.roles.length === 0) return true;\n return role ? item.roles.includes(role) : false;\n });\n });\n\n @HostListener('window:resize', ['$event'])\n onResize(_event: Event): void {\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.set(false);\n }\n }\n\n protected label(item: SidebarItem): string {\n return this.labelPipe()(item.label);\n }\n\n protected isItemActive(item: SidebarItem): boolean {\n return !!item.id && item.id === this.selectedId();\n }\n\n protected isGroupActive(item: SidebarItem): boolean {\n return item.children?.some((c) => c.id === this.selectedId()) ?? false;\n }\n\n protected isGroupExpanded(item: SidebarItem): boolean {\n return this.expandedGroups().has(item.id);\n }\n\n protected toggleGroup(item: SidebarItem): void {\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n if (next.has(item.id)) {\n next.delete(item.id);\n } else {\n next.add(item.id);\n }\n return next;\n });\n }\n\n protected onItemClick(item: SidebarItem): void {\n if (item.disabled) return;\n this.selectedId.set(item.id);\n this.itemClick.emit(item);\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.set(false);\n }\n }\n\n protected onToggle(): void {\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.update((v) => !v);\n } else {\n this.collapsed.update((v) => !v);\n this.toggle.emit(this.collapsed());\n }\n }\n}\n","@if (responsive() && mobileOpen()) {\n <!-- Mobile overlay backdrop (sibling of aside: must NOT be inside the\n transformed aside, otherwise it becomes its containing block and\n only covers the sidebar, also blocking nav clicks on mobile) -->\n <div\n class=\"fixed inset-0 bg-black/50 z-30 lg:hidden\"\n (click)=\"mobileOpen.set(false)\"\n ></div>\n}\n\n<aside\n [class.fixed]=\"fixed()\"\n [class.relative]=\"!fixed()\"\n [class.h-screen]=\"fixed()\"\n [class.h-full]=\"!fixed()\"\n class=\"top-0 left-0 flex flex-col shrink-0 sidebar-transition sidebar-mobile-transform z-40 _shk-bg-white dark:[background-color:var(--shk-surface-50)] border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [class.shadow-sm]=\"hasShadow()\"\n [style.width]=\"width()\"\n [style.transform]=\"responsive() ? (mobileOpen() ? 'translateX(0)' : 'translateX(-100%)') : null\"\n>\n <!-- Logo / Brand -->\n @if (logo() || title() || subtitle()) {\n <div\n class=\"flex items-center h-20 px-4 border-b _shk-border dark:[border-color:var(--shk-surface-100)] shrink-0\"\n >\n <div class=\"flex items-center gap-3 overflow-hidden\">\n @if (logo()) {\n <img [src]=\"logo()\" alt=\"Logo\" class=\"h-16 w-16 shrink-0 object-contain\" />\n }\n @if (!collapsed() && (title() || subtitle())) {\n <div class=\"flex flex-col leading-tight whitespace-nowrap\">\n @if (title()) {\n <span class=\"text-lg font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">\n {{ title() }}\n </span>\n }\n @if (subtitle()) {\n <span class=\"text-sm _shk-text-surface-500 dark:[color:var(--shk-surface-500)]\">\n {{ subtitle() }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Toggle button -->\n @if (showToggle() && collapsible()) {\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n class=\"group absolute -right-3 top-20 z-50 w-6 h-6 rounded-full bg-white dark:[background-color:var(--shk-surface-100)] border _shk-border dark:[border-color:var(--shk-surface-200)] shadow-md max-lg:hidden flex items-center justify-center _shk-text-surface-600 dark:[color:var(--shk-surface-600)] hover:[background-color:var(--shk-primary-50)] dark:hover:[background-color:var(--shk-surface-200)] hover:[color:var(--shk-primary-600)] dark:hover:[color:var(--shk-primary-400)] transition-colors\"\n >\n @if (collapsed()) {\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-3 h-3\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-3 h-3\"></svg>\n }\n <span\n class=\"absolute left-full ml-1 top-1/2 -translate-y-1/2 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n >\n {{ collapsed() ? expandTooltip() : collapseTooltip() }}\n </span>\n </button>\n }\n\n <ng-content select=\"[sidebarHeader]\"></ng-content>\n\n <!-- Custom content between header and nav -->\n <ng-content select=\"[sidebarContent]\"></ng-content>\n\n <!-- Navigation -->\n <nav class=\"flex-1 sidebar-scroll _shk-scrollbar py-4 px-3\">\n <ul class=\"space-y-1\">\n @for (item of navItems(); track item.id) {\n @if (item.separator) {\n <li class=\"my-2 border-t _shk-border dark:[border-color:var(--shk-surface-200)]\"></li>\n }\n\n @if (item.children?.length) {\n <!-- Group -->\n <li>\n @if (collapsed()) {\n <shk-tooltip [text]=\"label(item)\" position=\"right\" mode=\"fixed\">\n <div\n class=\"flex items-center justify-center px-3 py-2.5 rounded-lg transition-all duration-200\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class._shk-text-surface-500]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n </div>\n </shk-tooltip>\n } @else {\n <button\n type=\"button\"\n (click)=\"toggleGroup(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 group relative\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class.shadow-md]=\"isGroupActive(item)\"\n [class._shk-text-surface-700]=\"!isGroupActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isGroupActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isGroupActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item) }}</span>\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 transition-transform duration-200 shrink-0\"\n [class.rotate-180]=\"isGroupExpanded(item)\"\n ></svg>\n </button>\n\n @if (isGroupExpanded(item)) {\n <ul class=\"ml-3 mt-1 space-y-1 border-l-2 _shk-border dark:[border-color:var(--shk-surface-200)] pl-2\">\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(child)\"\n class=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary-soft]=\"isItemActive(child)\"\n [class._shk-bg-primary-soft-dark]=\"isItemActive(child)\"\n [class._shk-text-primary-700]=\"isItemActive(child)\"\n [class.dark:[color:var(--shk-primary-300)]]=\"isItemActive(child)\"\n [class._shk-text-surface-600]=\"!isItemActive(child)\"\n [class.dark:[color:var(--shk-surface-400)]]=\"!isItemActive(child)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(child)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(child)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(child)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(child)\"\n >\n @if (child.icon) {\n <svg [lucideIcon]=\"getIcon(child.icon)\" class=\"w-4 h-4 shrink-0\"></svg>\n }\n <span class=\"whitespace-nowrap overflow-hidden\">{{ label(child) }}</span>\n @if (isItemActive(child)) {\n <span class=\"w-1.5 h-1.5 rounded-full _shk-bg-primary shrink-0 ml-auto\"></span>\n }\n </button>\n </li>\n }\n </ul>\n }\n }\n </li>\n } @else {\n <!-- Standalone item -->\n <li>\n @if (collapsed()) {\n <shk-tooltip [text]=\"label(item)\" position=\"right\" mode=\"fixed\">\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center justify-center px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n </button>\n </shk-tooltip>\n } @else {\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item) }}</span>\n @if (item.badge !== undefined) {\n <span\n class=\"text-xs font-bold px-2 py-0.5 rounded-full _shk-bg-primary _shk-text-white shrink-0\"\n [class.hidden]=\"collapsed()\"\n >\n {{ item.badge }}\n </span>\n }\n @if (isItemActive(item)) {\n <span class=\"w-1.5 h-1.5 rounded-full bg-white shrink-0\"></span>\n }\n </button>\n }\n </li>\n }\n }\n </ul>\n </nav>\n\n <!-- Footer -->\n <div class=\"shrink-0 p-2 [&:empty]:hidden\">\n <ng-content select=\"[sidebarFooter]\"></ng-content>\n </div>\n</aside>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport {\n LucideShield,\n LucideBuilding,\n LucideBuilding2,\n LucideLayers,\n LucidePuzzle,\n LucideChartPie,\n LucideChartLine,\n LucideCreditCard,\n LucideIdCard,\n LucideBriefcase,\n LucideTruck,\n LucideTags,\n LucideTag,\n LucidePackage,\n LucideBox,\n LucideDollarSign,\n LucideWallet,\n LucidePercent,\n LucideSliders,\n LucideSearch,\n LucideCalendar,\n LucideCalendarCheck,\n LucideUsers,\n LucideUserCog,\n LucideGlobe,\n LucideLogOut,\n LucidePanelRight,\n LucideHome,\n LucideReceipt,\n LucideBot,\n LucideStar,\n LucideBanknote,\n LucideFileText,\n LucideUser,\n LucideMenu,\n LucideChevronDown,\n LucideX,\n} from '@lucide/angular';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\nconst ICONS: Record<string, any> = {\n shield: LucideShield,\n building: LucideBuilding,\n 'building-2': LucideBuilding2,\n 'layer-group': LucideLayers,\n 'puzzle-piece': LucidePuzzle,\n 'chart-pie': LucideChartPie,\n 'chart-line': LucideChartLine,\n 'credit-card': LucideCreditCard,\n 'id-card': LucideIdCard,\n briefcase: LucideBriefcase,\n truck: LucideTruck,\n tags: LucideTags,\n tag: LucideTag,\n package: LucidePackage,\n box: LucideBox,\n 'dollar-sign': LucideDollarSign,\n wallet: LucideWallet,\n percent: LucidePercent,\n sliders: LucideSliders,\n search: LucideSearch,\n calendar: LucideCalendar,\n 'calendar-check': LucideCalendarCheck,\n users: LucideUsers,\n 'user-cog': LucideUserCog,\n globe: LucideGlobe,\n 'log-out': LucideLogOut,\n logout: LucideLogOut,\n 'panel-right': LucidePanelRight,\n home: LucideHome,\n receipt: LucideReceipt,\n bot: LucideBot,\n star: LucideStar,\n 'file-invoice-dollar': LucideBanknote,\n 'file-contract': LucideFileText,\n user: LucideUser,\n menu: LucideMenu,\n 'chevron-down': LucideChevronDown,\n x: LucideX,\n};\n\nfunction getIcon(name?: string): any {\n if (!name) return null;\n return ICONS[name] ?? LucideMenu;\n}\n\nexport interface RailSidebarItem {\n id: string;\n label: string;\n icon?: string;\n routerLink?: string;\n children?: RailSidebarItem[];\n roles?: string[];\n badge?: string | number;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface RailSidebarSection {\n key: string;\n label: string;\n icon?: string;\n routerLink?: string;\n matchPrefixes?: string[];\n items?: RailSidebarItem[];\n}\n\nexport interface RailSidebarSectionEvent {\n key: string;\n routerLink?: string;\n}\n\n@Component({\n selector: 'shk-rail-sidebar',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon, TooltipComponent],\n templateUrl: './rail-sidebar.component.html',\n styleUrls: ['./rail-sidebar.component.css'],\n})\nexport class RailSidebarComponent {\n sections = input<RailSidebarSection[]>([]);\n activeUrl = input<string>('');\n activeSectionKey = model<string>('');\n collapsed = model<boolean>(false);\n activeLang = input<string>('es');\n langs = input<string[]>(['es', 'en']);\n logo = input<string>('');\n appName = input<string>('');\n userRole = input<string>('');\n labelPipe = input<(label: string) => string>((label: string) => label);\n railWidth = input<string>('4.5rem');\n expandedWidth = input<string>('16.5rem');\n workspaceTooltip = input<string>('Inicio');\n logoutTooltip = input<string>('Cerrar sesión');\n collapseTooltip = input<string>('Colapsar');\n expandTooltip = input<string>('Expandir');\n\n sectionSelected = output<RailSidebarSectionEvent>();\n itemClick = output<RailSidebarItem>();\n setLang = output<string>();\n logoutRequested = output<void>();\n toggleSidebar = output<boolean>();\n workspaceClick = output<void>();\n\n protected getIcon = getIcon;\n protected expandedGroups = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n const url = this.activeUrl();\n if (!url) return;\n const section = this.sections().find((s) => {\n if (s.matchPrefixes?.length) {\n return s.matchPrefixes.some((prefix) => url.startsWith(prefix));\n }\n return s.routerLink ? url.startsWith(s.routerLink) : false;\n });\n if (section) {\n this.activeSectionKey.set(section.key);\n }\n });\n }\n\n protected width = computed(() =>\n this.collapsed() ? this.railWidth() : this.expandedWidth(),\n );\n\n protected activeSection = computed<RailSidebarSection | null>(\n () =>\n this.sections().find((s) => s.key === this.activeSectionKey()) ?? null,\n );\n\n protected navItems = computed<RailSidebarItem[]>(() => {\n const role = this.userRole();\n const items = this.activeSection()?.items ?? [];\n return items.filter((item) => {\n if (!item.roles || item.roles.length === 0) return true;\n return role ? item.roles.includes(role) : false;\n });\n });\n\n protected label(label: string): string {\n return this.labelPipe()(label);\n }\n\n protected isSectionActive(section: RailSidebarSection): boolean {\n return section.key === this.activeSectionKey();\n }\n\n protected isItemActive(item: RailSidebarItem): boolean {\n if (!item.routerLink) return false;\n return this.bestMatchItem() === item;\n }\n\n protected isGroupActive(item: RailSidebarItem): boolean {\n return (\n item.children?.some(\n (c) => c.routerLink && this.matchesUrl(c.routerLink, this.activeUrl()),\n ) ?? false\n );\n }\n\n private matchesUrl(routerLink: string, url: string): boolean {\n return url === routerLink || url.startsWith(routerLink + '/');\n }\n\n private bestMatchItem(): RailSidebarItem | null {\n const url = this.activeUrl();\n let best: RailSidebarItem | null = null;\n for (const item of this.navItems()) {\n if (item.routerLink && this.matchesUrl(item.routerLink, url)) {\n if (!best || item.routerLink.length > best.routerLink!.length) {\n best = item;\n }\n }\n for (const child of item.children ?? []) {\n if (!child.routerLink || !this.matchesUrl(child.routerLink, url)) continue;\n if (!best || child.routerLink.length > best.routerLink!.length) {\n best = child;\n }\n }\n }\n return best;\n }\n\n protected isGroupExpanded(item: RailSidebarItem): boolean {\n return this.expandedGroups().has(item.id);\n }\n\n protected toggleGroup(item: RailSidebarItem): void {\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n if (next.has(item.id)) {\n next.delete(item.id);\n } else {\n next.add(item.id);\n }\n return next;\n });\n }\n\n protected onSectionClick(section: RailSidebarSection): void {\n this.activeSectionKey.set(section.key);\n this.sectionSelected.emit({ key: section.key, routerLink: section.routerLink });\n if (this.collapsed()) {\n this.collapsed.set(false);\n this.toggleSidebar.emit(false);\n }\n }\n\n protected onItemClick(item: RailSidebarItem): void {\n if (item.disabled) return;\n this.itemClick.emit(item);\n }\n\n protected onWorkspace(): void {\n this.workspaceClick.emit();\n if (this.collapsed()) {\n this.collapsed.set(false);\n this.toggleSidebar.emit(false);\n }\n }\n\n protected onToggleLang(): void {\n const langs = this.langs();\n if (langs.length === 0) return;\n const idx = langs.indexOf(this.activeLang());\n const next = langs[(idx + 1) % langs.length] ?? langs[0];\n this.setLang.emit(next);\n }\n\n protected onToggleSidebar(): void {\n this.collapsed.update((v) => !v);\n this.toggleSidebar.emit(this.collapsed());\n }\n}\n","<aside\n class=\"h-full flex overflow-hidden shrink-0 _shk-bg-white dark:[background-color:var(--shk-surface-50)] border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [style.width]=\"width()\"\n>\n <!-- Rail: vertical icon column -->\n <div\n class=\"h-full flex flex-col items-center shrink-0 px-[0.3rem] py-2 gap-1 border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [style.width]=\"railWidth()\"\n >\n <!-- Workspace / logo -->\n <div class=\"flex items-center justify-center w-full\">\n <button\n type=\"button\"\n (click)=\"onWorkspace()\"\n [class.is-collapsed]=\"collapsed()\"\n class=\"rail-workspace w-[3.2rem] h-[3.2rem] rounded-xl _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] border-none grid place-items-center p-0 relative transition-all\"\n [title]=\"workspaceTooltip()\"\n >\n @if (logo()) {\n <img [src]=\"logo()\" alt=\"Logo\" class=\"rail-app-icon w-8 h-8 object-contain\" />\n } @else {\n <svg [lucideIcon]=\"getIcon('menu')\" class=\"rail-app-icon w-6 h-6 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"></svg>\n }\n @if (collapsed()) {\n <svg [lucideIcon]=\"getIcon('panel-right')\" class=\"rail-toggle-icon w-5 h-5 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"></svg>\n }\n </button>\n </div>\n\n <!-- Section actions -->\n <div class=\"rail-actions flex-1 flex flex-col items-center gap-1 pt-1\">\n @for (section of sections(); track section.key) {\n <shk-tooltip [text]=\"label(section.label)\" position=\"right\" mode=\"fixed\">\n <button\n type=\"button\"\n (click)=\"onSectionClick(section)\"\n class=\"rail-icon w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [class.is-active]=\"isSectionActive(section)\"\n [attr.aria-label]=\"label(section.label)\"\n >\n <svg [lucideIcon]=\"getIcon(section.icon)\" class=\"w-5 h-5\"></svg>\n </button>\n </shk-tooltip>\n }\n </div>\n\n <!-- Bottom: language + logout -->\n <div class=\"rail-bottom mt-auto flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n (click)=\"onToggleLang()\"\n class=\"rail-icon w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [title]=\"activeLang()\"\n >\n <div class=\"flex flex-col items-center gap-[0.15rem]\">\n <svg [lucideIcon]=\"getIcon('globe')\" class=\"w-5 h-5\"></svg>\n <span class=\"rail-lang-code text-[0.5rem] font-bold tracking-[0.05em] leading-none\">{{ activeLang() | uppercase }}</span>\n </div>\n </button>\n\n <button\n type=\"button\"\n (click)=\"logoutRequested.emit()\"\n class=\"rail-icon rail-logout w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [title]=\"logoutTooltip()\"\n >\n <svg [lucideIcon]=\"getIcon('log-out')\" class=\"w-5 h-5\"></svg>\n </button>\n </div>\n </div>\n\n <!-- Nav: section panel (hidden when collapsed) -->\n @if (!collapsed()) {\n <div class=\"flex-1 min-w-0 flex flex-col _shk-bg-white dark:[background-color:var(--shk-surface-50)]\">\n <!-- Brand header -->\n <div class=\"flex items-center justify-between gap-2 px-3 py-4 border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <span class=\"nav-app text-base font-bold whitespace-nowrap overflow-hidden text-ellipsis _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">\n {{ appName() }}\n </span>\n <button\n type=\"button\"\n (click)=\"onToggleSidebar()\"\n class=\"nav-toggle w-[1.8rem] h-[1.8rem] rounded-lg border-none bg-transparent grid place-items-center cursor-pointer shrink-0 transition-colors _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n [title]=\"collapseTooltip()\"\n >\n <svg [lucideIcon]=\"getIcon('panel-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n\n <!-- Menu -->\n <nav class=\"flex-1 overflow-y-auto _shk-scrollbar px-2 py-3\">\n @if (activeSection()) {\n <div class=\"px-2 pb-3\">\n <span class=\"nav-section-label text-xs font-bold tracking-[0.08em] uppercase _shk-text-surface-400 dark:[color:var(--shk-surface-500)] block whitespace-nowrap overflow-hidden text-ellipsis\">\n {{ label(activeSection()!.label) }}\n </span>\n </div>\n }\n\n <ul class=\"space-y-1\">\n @for (item of navItems(); track item.id) {\n @if (item.separator) {\n <li class=\"my-2 border-t _shk-border dark:[border-color:var(--shk-surface-200)]\"></li>\n }\n\n @if (item.children?.length) {\n <!-- Expandable group -->\n <li>\n <button\n type=\"button\"\n (click)=\"toggleGroup(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class.shadow-md]=\"isGroupActive(item)\"\n [class._shk-text-surface-700]=\"!isGroupActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isGroupActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item.label) }}</span>\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 transition-transform duration-200 shrink-0\"\n [class.rotate-180]=\"isGroupExpanded(item)\"\n ></svg>\n </button>\n\n @if (isGroupExpanded(item)) {\n <ul class=\"ml-3 mt-1 space-y-1 border-l-2 _shk-border dark:[border-color:var(--shk-surface-200)] pl-2\">\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(child)\"\n class=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary-soft]=\"isItemActive(child)\"\n [class._shk-bg-primary-soft-dark]=\"isItemActive(child)\"\n [class._shk-text-primary-700]=\"isItemActive(child)\"\n [class.dark:[color:var(--shk-primary-300)]]=\"isItemActive(child)\"\n [class._shk-text-surface-600]=\"!isItemActive(child)\"\n [class.dark:[color:var(--shk-surface-400)]]=\"!isItemActive(child)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(child)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(child)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(child)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(child)\"\n >\n @if (child.icon) {\n <svg [lucideIcon]=\"getIcon(child.icon)\" class=\"w-4 h-4 shrink-0\"></svg>\n }\n <span class=\"whitespace-nowrap overflow-hidden\">{{ label(child.label) }}</span>\n @if (isItemActive(child)) {\n <span class=\"w-1.5 h-1.5 rounded-full _shk-bg-primary shrink-0 ml-auto\"></span>\n }\n </button>\n </li>\n }\n </ul>\n }\n </li>\n } @else {\n <!-- Standalone item -->\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item.label) }}</span>\n @if (item.badge !== undefined) {\n <span class=\"text-xs font-bold px-2 py-0.5 rounded-full _shk-bg-primary _shk-text-white shrink-0\">\n {{ item.badge }}\n </span>\n }\n </button>\n </li>\n }\n }\n </ul>\n </nav>\n </div>\n }\n</aside>\n","import {\n Component,\n input,\n viewChild,\n ElementRef,\n effect,\n untracked,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n@Component({\n selector: 'shk-chart',\n standalone: true,\n template: `\n <div class=\"relative h-full w-full\">\n <canvas #canvas></canvas>\n </div>\n `,\n})\nexport class ChartComponent implements AfterViewInit, OnDestroy {\n private static registered = false;\n\n type = input<'line' | 'bar' | 'pie' | 'doughnut' | 'polarArea'>('bar');\n data = input<any>({ datasets: [] });\n options = input<any>({});\n\n private canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n private chartInstance: Chart | null = null;\n private initialized = false;\n\n constructor() {\n if (!ChartComponent.registered) {\n Chart.register(...registerables);\n ChartComponent.registered = true;\n }\n\n effect(() => {\n const t = this.type();\n const d = this.data();\n const o = this.options();\n untracked(() => {\n if (!this.initialized) return;\n this.updateChart(t, d, o);\n });\n });\n }\n\n ngAfterViewInit(): void {\n this.initialized = true;\n this.initChart();\n }\n\n ngOnDestroy(): void {\n this.chartInstance?.destroy();\n }\n\n private resetCanvas(): void {\n const canvas = this.canvasRef().nativeElement;\n canvas.width = canvas.width;\n }\n\n private initChart(): void {\n this.resetCanvas();\n const canvas = this.canvasRef().nativeElement;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n this.chartInstance = new Chart(ctx, {\n type: this.type(),\n data: this.deepClone(this.data()),\n options: this.deepClone(this.options()),\n });\n this.chartInstance.resize();\n }\n\n private deepClone<T>(value: T): T {\n try {\n if (typeof structuredClone === 'function') return structuredClone(value);\n } catch {}\n return JSON.parse(JSON.stringify(value));\n }\n\n private updateChart(type: string, data: any, options: any): void {\n if (!this.chartInstance) {\n this.initChart();\n return;\n }\n\n const config = this.chartInstance.config as any;\n if (type !== config.type) {\n this.chartInstance.stop();\n this.chartInstance.destroy();\n this.chartInstance = null;\n this.resetCanvas();\n this.initChart();\n return;\n }\n\n this.chartInstance.data = data;\n this.chartInstance.options = options;\n this.chartInstance.update();\n }\n}\n","export const COLOR_PALETTE = [\n { bg: 'rgba(59, 130, 246, 0.2)', border: 'rgb(59, 130, 246)' },\n { bg: 'rgba(34, 197, 94, 0.2)', border: 'rgb(34, 197, 94)' },\n { bg: 'rgba(249, 115, 22, 0.2)', border: 'rgb(249, 115, 22)' },\n { bg: 'rgba(139, 92, 246, 0.2)', border: 'rgb(139, 92, 246)' },\n { bg: 'rgba(236, 72, 153, 0.2)', border: 'rgb(236, 72, 153)' },\n { bg: 'rgba(6, 182, 212, 0.2)', border: 'rgb(6, 182, 212)' },\n];\n\nexport function readThemeColors() {\n const docStyle = getComputedStyle(document.documentElement);\n return {\n text: docStyle.getPropertyValue('--shk-surface-900') || '#27272a',\n muted: docStyle.getPropertyValue('--shk-surface-500') || '#71717a',\n border: docStyle.getPropertyValue('--shk-surface-200') || '#e4e4e7',\n };\n}\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucidePlus,\n LucidePencil,\n LucideTrash2,\n LucideCirclePlus,\n LucideCircleHelp,\n LucideCalendar,\n LucideCalendarDays,\n LucideClock,\n LucideTag,\n LucidePackage,\n LucideInfo,\n LucideInbox,\n LucideHotel,\n LucideTicket,\n LucideCar,\n LucideMountain,\n LucideBus,\n LucideShip,\n LucideShield,\n LucideUtensils,\n LucideMapPin,\n LucideUserRound,\n} from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n plus: LucidePlus,\n pencil: LucidePencil,\n 'trash-2': LucideTrash2,\n delete: LucideTrash2,\n 'circle-plus': LucideCirclePlus,\n 'circle-help': LucideCircleHelp,\n calendar: LucideCalendar,\n 'calendar-days': LucideCalendarDays,\n clock: LucideClock,\n tag: LucideTag,\n package: LucidePackage,\n info: LucideInfo,\n inbox: LucideInbox,\n hotel: LucideHotel,\n ticket: LucideTicket,\n car: LucideCar,\n mountain: LucideMountain,\n bus: LucideBus,\n ship: LucideShip,\n shield: LucideShield,\n utensils: LucideUtensils,\n 'map-pin': LucideMapPin,\n 'user-round': LucideUserRound,\n};\n\nfunction getIcon(name: string): any {\n return icons[name] ?? LucideCircleHelp;\n}\n\n/** A chip shown under a sub item (time, pricing model, quantity, etc). */\nexport interface TimelineMeta {\n icon: string;\n label?: string;\n value: string;\n}\n\n/** A row inside a timeline item (e.g. an activity of a tour day). */\nexport interface TimelineSubItem {\n id: string | number;\n title: string;\n subtitle?: string;\n /** Used to look up icon / color in `iconMap` and `iconColors`. */\n type?: string;\n /** Overrides the resolved icon name. */\n icon?: string;\n /** Hex background for the icon box (fallback). */\n color?: string;\n /** Hex text color for the icon (fallback). */\n colorText?: string;\n /** Custom CSS classes for the icon box (takes precedence over inline colors). */\n iconClass?: string;\n optional?: boolean;\n optionalLabel?: string;\n meta?: TimelineMeta[];\n price?: string | number;\n}\n\n/** A single event in the timeline (e.g. a tour day). */\nexport interface TimelineItem {\n id: string | number;\n /** Text shown inside the marker (falls back to the auto index). */\n markerText?: string | number;\n title?: string;\n subtitle?: string;\n description?: string;\n /** Small pill shown above the title (e.g. \"Día 1\"). */\n badge?: string | number;\n badgeIcon?: string;\n /** CSS classes for the marker (falls back to the cycled gradient palette). */\n color?: string;\n subItems?: TimelineSubItem[];\n}\n\n/** A button rendered in the header. */\nexport interface TimelineAction {\n label: string;\n icon: string;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\n/** An action rendered in the item card footer. */\nexport interface TimelineItemAction {\n label: string | ((item: TimelineItem) => string);\n icon: string | ((item: TimelineItem) => string);\n onClick: (item: TimelineItem) => void;\n class?: string | ((item: TimelineItem) => string);\n isVisible?: (item: TimelineItem) => boolean;\n isDisabled?: (item: TimelineItem) => boolean;\n}\n\n/** An action rendered on hover over a sub item. */\nexport interface TimelineSubItemAction {\n label: string | ((item: TimelineItem, subItem: TimelineSubItem) => string);\n icon: string | ((item: TimelineItem, subItem: TimelineSubItem) => string);\n onClick: (item: TimelineItem, subItem: TimelineSubItem) => void;\n isVisible?: (item: TimelineItem, subItem: TimelineSubItem) => boolean;\n isDisabled?: (item: TimelineItem, subItem: TimelineSubItem) => boolean;\n}\n\nexport type TimelineAlignment = 'left' | 'alternate';\nexport type TimelineMarkerSize = 'sm' | 'md' | 'lg';\n\nexport const DEFAULT_MARKER_GRADIENTS: string[] = [\n 'bg-gradient-to-br from-blue-500 to-blue-600',\n 'bg-gradient-to-br from-emerald-500 to-emerald-600',\n 'bg-gradient-to-br from-violet-500 to-violet-600',\n 'bg-gradient-to-br from-orange-500 to-orange-600',\n 'bg-gradient-to-br from-rose-500 to-rose-600',\n 'bg-gradient-to-br from-cyan-500 to-cyan-600',\n 'bg-gradient-to-br from-amber-500 to-amber-600',\n 'bg-gradient-to-br from-indigo-500 to-indigo-600',\n 'bg-gradient-to-br from-teal-500 to-teal-600',\n 'bg-gradient-to-br from-pink-500 to-pink-600',\n];\n\n/** Supplier-type style palette used by the original wac-app timeline. */\nexport const DEFAULT_SUPPLIER_ICON_COLORS: Record<\n string,\n { bg: string; text: string }\n> = {\n accommodation: { bg: '#3d5a80', text: '#ffffff' },\n air_tickets: { bg: '#98c1d9', text: '#293241' },\n rent_a_car: { bg: '#ee6c4d', text: '#ffffff' },\n excursion: { bg: '#e0fbfc', text: '#293241' },\n transfer: { bg: '#293241', text: '#ffffff' },\n cruise: { bg: '#3d5a80', text: '#ffffff' },\n insurance: { bg: '#98c1d9', text: '#293241' },\n restaurant: { bg: '#6b7280', text: '#ffffff' },\n visit: { bg: '#14b8a6', text: '#ffffff' },\n guide: { bg: '#06b6d4', text: '#ffffff' },\n package: { bg: '#84cc16', text: '#ffffff' },\n other: { bg: '#e0fbfc', text: '#293241' },\n};\n\n/** Maps a sub-item `type` to a lucide icon name. */\nexport const DEFAULT_SUPPLIER_TYPE_ICONS: Record<string, string> = {\n accommodation: 'hotel',\n air_tickets: 'ticket',\n rent_a_car: 'car',\n excursion: 'mountain',\n transfer: 'bus',\n cruise: 'ship',\n insurance: 'shield',\n restaurant: 'utensils',\n visit: 'map-pin',\n guide: 'user-round',\n package: 'package',\n other: 'tag',\n};\n\n@Component({\n selector: 'shk-timeline',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './timeline.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .timeline-icon-btn {\n padding: 0.375rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.5rem;\n color: var(--shk-primary-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out,\n opacity 0.15s ease-in-out;\n }\n .timeline-icon-btn:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-primary-50) 60%, transparent);\n color: var(--shk-primary-700);\n }\n .timeline-icon-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .timeline-icon-btn svg {\n width: 0.875rem !important;\n height: 0.875rem !important;\n }\n .shk-timeline-card {\n animation: shk-timeline-fade-in 0.3s ease-out;\n }\n @keyframes shk-timeline-fade-in {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class TimelineComponent {\n protected getIcon = getIcon;\n\n /** Timeline data. */\n items = input<TimelineItem[]>([]);\n\n // ---------- Layout ----------\n /** 'left' = line and markers on the left; 'alternate' = cards alternate around a centered line on lg+. */\n alignment = input<TimelineAlignment>('alternate');\n /** Shows/hides the vertical connector line. */\n showLine = input<boolean>(true);\n /** Marker diameter. */\n markerSize = input<TimelineMarkerSize>('md');\n /** Gradient classes cycled across markers when the item has no `color`. */\n markerGradients = input<string[]>(DEFAULT_MARKER_GRADIENTS);\n /** Shows the info column on the opposite side of the card (alternate mode, lg+). */\n showOpposite = input<boolean>(true);\n /** Shows the item description. */\n showDescription = input<boolean>(true);\n /** Shows meta chips inside sub items. */\n showSubItemMeta = input<boolean>(true);\n /** Shows the price of each sub item. */\n showSubItemPrice = input<boolean>(true);\n /** Auto-append \"N {subItemCountLabel}\" under the title when the item has no subtitle. */\n showSubItemCount = input<boolean>(false);\n subItemCountLabel = input<string>('elementos');\n\n // ---------- Header ----------\n showHeader = input<boolean>(true);\n headerTitle = input<string>('');\n /** Convenience \"add\" button in the header. */\n showAddItem = input<boolean>(false);\n addItemLabel = input<string>('Añadir');\n addItemIcon = input<string>('plus');\n addItemTooltip = input<string>('Añadir elemento');\n headerActions = input<TimelineAction[]>([]);\n\n // ---------- Actions ----------\n /** Renders \"+ Añadir sub-elemento\" in each card footer. */\n showAddSubItem = input<boolean>(false);\n addSubItemLabel = input<string>('Añadir');\n addSubItemTooltip = input<string>('Añadir sub-elemento');\n itemActions = input<TimelineItemAction[]>([]);\n subItemActions = input<TimelineSubItemAction[]>([]);\n\n // ---------- Sub-item icon mapping ----------\n /** Maps a sub-item `type` to a lucide icon name. */\n iconMap = input<{ [type: string]: string }>({});\n /** Maps a sub-item `type` to its icon-box colors. */\n iconColors = input<{ [type: string]: { bg: string; text: string } }>({});\n /** Icon used when nothing matches. */\n fallbackIcon = input<string>('circle-help');\n\n // ---------- Empty state ----------\n showEmptyState = input<boolean>(true);\n emptyMessage = input<string>('Sin elementos');\n emptyIcon = input<string>('calendar-days');\n\n // ---------- Labels ----------\n editTooltip = input<string>('Editar');\n deleteTooltip = input<string>('Eliminar');\n optionalLabel = input<string>('Opcional');\n noSubItemsMessage = input<string>('');\n\n /** Custom content templates: keys 'marker', 'opposite', 'content', 'description', 'subItem', 'empty'. */\n customTemplates = input<{ [key: string]: any }>({});\n\n // ---------- Outputs ----------\n addItem = output<void>();\n addSubItem = output<TimelineItem>();\n itemClick = output<TimelineItem>();\n subItemClick = output<{ item: TimelineItem; subItem: TimelineSubItem }>();\n\n // ---------- Helpers ----------\n markerText(item: TimelineItem, index: number): string | number {\n return item.markerText ?? index + 1;\n }\n\n markerClass(item: TimelineItem, index: number): string {\n const base = 'flex items-center justify-center rounded-full text-white shadow-md';\n const size =\n this.markerSize() === 'sm'\n ? 'w-8 h-8 text-xs'\n : this.markerSize() === 'lg'\n ? 'w-12 h-12 text-base'\n : 'w-10 h-10 text-sm';\n const color = item.color || this.markerGradients()[index % this.markerGradients().length];\n return `${base} ${size} ${color}`;\n }\n\n markerColumnClass(): string {\n const size =\n this.markerSize() === 'sm' ? 'w-8' : this.markerSize() === 'lg' ? 'w-12' : 'w-10';\n return `relative z-10 flex justify-center shrink-0 ${size}`;\n }\n\n alternateMarkerColumnClass(): string {\n return `${this.markerColumnClass()} lg:absolute lg:left-1/2 lg:-translate-x-1/2 lg:top-0`;\n }\n\n lineClass(): string {\n const pos =\n this.markerSize() === 'sm' ? 'left-4' : this.markerSize() === 'lg' ? 'left-6' : 'left-5';\n const base = `absolute top-4 bottom-4 w-px _shk-bg-surface-200 dark:[background-color:var(--shk-surface-200)] ${pos}`;\n if (this.alignment() === 'alternate') {\n return `${base} lg:left-1/2 lg:-translate-x-1/2`;\n }\n return base;\n }\n\n subItemIconName(sub: TimelineSubItem): string {\n const type = sub.type || '';\n return sub.icon || this.iconMap()[type] || this.fallbackIcon();\n }\n\n subItemStyle(sub: TimelineSubItem): { [key: string]: string } | undefined {\n const palette = this.iconColors()[sub.type || ''];\n if (palette) return { 'background-color': palette.bg, color: palette.text };\n return {\n 'background-color': sub.color || '#6b7280',\n color: sub.colorText || '#ffffff',\n };\n }\n\n // ---------- Header actions ----------\n isHeaderActionVisible(action: TimelineAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n isHeaderActionDisabled(action: TimelineAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n\n // ---------- Item actions ----------\n getItemActionLabel(action: TimelineItemAction, item: TimelineItem): string {\n return typeof action.label === 'function' ? action.label(item) : action.label;\n }\n\n getItemActionIconName(action: TimelineItemAction, item: TimelineItem): string {\n return typeof action.icon === 'function' ? action.icon(item) : action.icon;\n }\n\n getItemActionClass(action: TimelineItemAction, item: TimelineItem): string {\n if (!action.class) return '';\n return typeof action.class === 'function' ? action.class(item) : action.class;\n }\n\n isItemActionVisible(action: TimelineItemAction, item: TimelineItem): boolean {\n return action.isVisible ? action.isVisible(item) : true;\n }\n\n isItemActionDisabled(action: TimelineItemAction, item: TimelineItem): boolean {\n return action.isDisabled ? action.isDisabled(item) : false;\n }\n\n // ---------- Sub-item actions ----------\n getSubItemActionLabel(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): string {\n return typeof action.label === 'function' ? action.label(item, sub) : action.label;\n }\n\n getSubItemActionIconName(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): string {\n return typeof action.icon === 'function' ? action.icon(item, sub) : action.icon;\n }\n\n isSubItemActionVisible(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): boolean {\n return action.isVisible ? action.isVisible(item, sub) : true;\n }\n\n isSubItemActionDisabled(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): boolean {\n return action.isDisabled ? action.isDisabled(item, sub) : false;\n }\n}\n","<div class=\"space-y-4\">\n\n <!-- ============ Header ============ -->\n @if (showHeader() && (headerTitle() || showAddItem() || headerActions().length > 0)) {\n <div class=\"flex flex-wrap items-center justify-between gap-2\">\n @if (headerTitle()) {\n <div class=\"text-sm font-semibold _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\">\n {{ headerTitle() }}\n </div>\n }\n <div class=\"flex items-center gap-1.5 ml-auto\">\n @if (showAddItem()) {\n <button\n type=\"button\"\n (click)=\"addItem.emit()\"\n [attr.aria-label]=\"addItemTooltip()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon(addItemIcon())\" class=\"w-3.5 h-3.5\"></svg>\n {{ addItemLabel() }}\n </button>\n }\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <button\n type=\"button\"\n [class]=\"action.class || 'inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed'\"\n [disabled]=\"isHeaderActionDisabled(action)\"\n (click)=\"action.onClick()\"\n >\n @if (action.icon) {\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n }\n {{ action.label }}\n </button>\n }\n }\n </div>\n </div>\n }\n\n <!-- ============ Timeline ============ -->\n @if (items().length > 0) {\n <div class=\"relative\">\n @if (showLine()) {\n <div [class]=\"lineClass()\" aria-hidden=\"true\"></div>\n }\n\n @for (item of items(); track item.id; let i = $index) {\n @if (alignment() === 'alternate') {\n <div class=\"relative flex items-start gap-4 lg:grid lg:grid-cols-2 lg:gap-0\">\n <!-- Marker (centered on desktop) -->\n <div [class]=\"alternateMarkerColumnClass()\">\n <span [class]=\"markerClass(item, i)\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['marker'] || defaultMarker; context: { $implicit: item, index: i }\"\n ></ng-container>\n </span>\n </div>\n\n <!-- Content card -->\n <div\n class=\"flex-1 min-w-0\"\n [class.lg:order-1]=\"$even\"\n [class.lg:order-2]=\"!$even\"\n [class.lg:pr-12]=\"$even\"\n [class.lg:pl-12]=\"!$even\"\n >\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['content'] || card; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n\n <!-- Opposite info -->\n @if (showOpposite()) {\n <div\n class=\"hidden lg:flex lg:items-center\"\n [class.lg:order-2]=\"$even\"\n [class.lg:order-1]=\"!$even\"\n [class.lg:justify-end]=\"$even\"\n [class.lg:pl-12]=\"!$even\"\n >\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['opposite'] || itemInfo; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n }\n </div>\n } @else {\n <!-- Left alignment -->\n <div class=\"relative flex items-start gap-4\">\n <div [class]=\"markerColumnClass()\">\n <span [class]=\"markerClass(item, i)\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['marker'] || defaultMarker; context: { $implicit: item, index: i }\"\n ></ng-container>\n </span>\n </div>\n <div class=\"flex-1 min-w-0\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['content'] || card; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n </div>\n }\n }\n </div>\n } @else if (showEmptyState()) {\n <!-- ============ Empty state ============ -->\n <div class=\"text-center py-12\">\n @if (customTemplates()['empty']) {\n <ng-container *ngTemplateOutlet=\"customTemplates()['empty']\"></ng-container>\n } @else {\n <div class=\"w-16 h-16 mx-auto mb-4 _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] rounded-full flex items-center justify-center\">\n <svg [lucideIcon]=\"getIcon(emptyIcon())\" class=\"w-8 h-8 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"></svg>\n </div>\n <p class=\"text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">{{ emptyMessage() }}</p>\n }\n </div>\n }\n\n <!-- ============ Templates ============ -->\n\n <ng-template #defaultMarker let-item let-index=\"index\">\n <span class=\"font-bold\">{{ markerText(item, index) }}</span>\n </ng-template>\n\n <ng-template #itemInfo let-item>\n <div>\n @if (item.badge !== undefined && item.badge !== null && item.badge !== '') {\n <div class=\"mb-2\">\n <span class=\"inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-semibold _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\">\n @if (item.badgeIcon) {\n <svg [lucideIcon]=\"getIcon(item.badgeIcon)\" class=\"w-3 h-3\"></svg>\n }\n {{ item.badge }}\n </span>\n </div>\n }\n @if (item.title) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\">{{ item.title }}</div>\n }\n @let subCount = (item.subItems?.length || 0);\n @if (item.subtitle || (showSubItemCount() && subCount > 0)) {\n <div class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] mt-1\">\n {{ item.subtitle || (subCount + ' ' + subItemCountLabel()) }}\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #card let-item>\n @let subItems = item.subItems || [];\n <div class=\"shk-timeline-card mb-4 bg-white dark:[background-color:var(--shk-surface-50)] rounded-xl border _shk-border dark:[border-color:var(--shk-surface-200)] shadow-sm overflow-hidden\">\n <!-- Header (mobile in alternate, always in left) -->\n <div class=\"flex items-center gap-2 px-4 pt-4 pb-2\" [class.lg:hidden]=\"alignment() === 'alternate'\">\n <ng-container *ngTemplateOutlet=\"itemInfo; context: { $implicit: item }\"></ng-container>\n </div>\n\n <!-- Description -->\n @if (showDescription() && item.description) {\n <div class=\"px-4 pt-3\">\n @if (customTemplates()['description']) {\n <ng-container *ngTemplateOutlet=\"customTemplates()['description']; context: { $implicit: item }\"></ng-container>\n } @else {\n <p class=\"text-sm _shk-text-surface-600 dark:[color:var(--shk-surface-600)] leading-relaxed\">{{ item.description }}</p>\n }\n </div>\n }\n\n <!-- Sub items -->\n @if (subItems.length > 0) {\n <div class=\"mt-2\">\n @for (sub of subItems; track sub.id) {\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['subItem'] || defaultSubItem; context: { $implicit: item, subItem: sub }\"\n ></ng-container>\n }\n </div>\n } @else if (noSubItemsMessage()) {\n <div class=\"px-4 py-6 text-center\">\n <div class=\"inline-flex items-center gap-2 text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">\n <svg [lucideIcon]=\"getIcon('info')\" class=\"w-4 h-4\"></svg>\n <span class=\"italic\">{{ noSubItemsMessage() }}</span>\n </div>\n </div>\n }\n\n <!-- Footer actions -->\n @if (showAddSubItem() || itemActions().length > 0) {\n <div class=\"flex items-center gap-1 px-4 py-2 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border-t _shk-border dark:[border-color:var(--shk-surface-100)]\">\n @if (showAddSubItem()) {\n <button\n type=\"button\"\n (click)=\"addSubItem.emit(item)\"\n class=\"relative group inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium _shk-text-primary hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] rounded-lg transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('circle-plus')\" class=\"w-3.5 h-3.5\"></svg>\n {{ addSubItemLabel() }}\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ addSubItemTooltip() }}\n </span>\n </button>\n }\n <div class=\"flex-1\"></div>\n @for (action of itemActions(); track $index) {\n @if (isItemActionVisible(action, item)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick(item)\"\n [class]=\"'timeline-icon-btn ' + getItemActionClass(action, item)\"\n [disabled]=\"isItemActionDisabled(action, item)\"\n [attr.aria-label]=\"getItemActionLabel(action, item)\"\n >\n <svg [lucideIcon]=\"getIcon(getItemActionIconName(action, item))\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ getItemActionLabel(action, item) }}\n </span>\n </div>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #defaultSubItem let-item let-sub=\"subItem\">\n <div class=\"px-4 py-3 border-t [border-color:var(--shk-surface-100)] dark:[border-color:var(--shk-surface-700)] hover:[background-color:color-mix(in srgb,var(--shk-primary-50)30%,transparent)] dark:hover:[background-color:color-mix(in srgb,var(--shk-primary-900)10%,transparent)] transition-colors duration-200 group\">\n <div class=\"flex items-start gap-3\">\n <span\n [class]=\"sub.iconClass || 'flex items-center justify-center w-9 h-9 rounded-lg shrink-0 mt-0.5'\"\n [style]=\"sub.iconClass ? undefined : subItemStyle(sub)\"\n >\n <svg [lucideIcon]=\"getIcon(subItemIconName(sub))\" class=\"w-4 h-4\"></svg>\n </span>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-2 flex-wrap\">\n @if (sub.optional) {\n <span class=\"text-[10px] font-semibold uppercase tracking-wide px-1.5 py-0.5 rounded _shk-bg-amber-soft _shk-text-amber-600 dark:[color:var(--shk-amber-400)]\">\n {{ sub.optionalLabel || optionalLabel() }}\n </span>\n }\n <span class=\"font-medium _shk-text-surface-800 dark:[color:var(--shk-surface-800)] text-sm truncate\">{{ sub.title }}</span>\n @if (sub.subtitle) {\n <span class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] truncate\">· {{ sub.subtitle }}</span>\n }\n </div>\n\n @if (showSubItemMeta() && (sub.meta?.length || 0) > 0) {\n <div class=\"flex flex-wrap items-center gap-x-3 gap-y-1 mt-1.5 text-xs _shk-text-surface-500 dark:[color:var(--shk-surface-500)]\">\n @for (m of sub.meta!; track $index) {\n <span class=\"flex items-center gap-1\">\n <svg [lucideIcon]=\"getIcon(m.icon)\" class=\"w-3 h-3\"></svg>\n @if (m.label) {\n <span class=\"font-medium\">{{ m.label }}:</span>\n }\n {{ m.value }}\n </span>\n }\n </div>\n }\n </div>\n\n <div class=\"flex items-center gap-0.5 shrink-0\">\n @if (showSubItemPrice() && sub.price !== undefined && sub.price !== null && sub.price !== '') {\n <span class=\"font-semibold _shk-text-surface-700 dark:[color:var(--shk-surface-700)] text-xs mr-1\">{{ sub.price }}</span>\n }\n @for (action of subItemActions(); track $index) {\n @if (isSubItemActionVisible(action, item, sub)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick(item, sub)\"\n class=\"timeline-icon-btn opacity-100 lg:opacity-0 lg:group-hover:opacity-100 transition-opacity\"\n [disabled]=\"isSubItemActionDisabled(action, item, sub)\"\n [attr.aria-label]=\"getSubItemActionLabel(action, item, sub)\"\n >\n <svg [lucideIcon]=\"getIcon(getSubItemActionIconName(action, item, sub))\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ getSubItemActionLabel(action, item, sub) }}\n </span>\n </div>\n }\n }\n </div>\n </div>\n </div>\n </ng-template>\n\n</div>\n","import { Component, input, model, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucideChevronDown,\n LucideChevronRight,\n LucidePlus,\n LucidePencil,\n LucideTrash2,\n LucideInfo,\n} from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n 'chevron-down': LucideChevronDown,\n 'chevron-right': LucideChevronRight,\n plus: LucidePlus,\n pencil: LucidePencil,\n 'trash-2': LucideTrash2,\n info: LucideInfo,\n};\n\nfunction getIcon(name: string): any {\n return icons[name] ?? LucideChevronRight;\n}\n\n/** An action button rendered on the right side of the fieldset header. */\nexport interface FieldsetHeaderAction {\n label: string;\n icon: string;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\nlet fieldsetCounter = 0;\n\n@Component({\n selector: 'shk-fieldset',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './fieldset.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .shk-fieldset-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border-radius: 0.5rem;\n color: var(--shk-surface-400);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-fieldset-toggle:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n color: var(--shk-surface-700);\n }\n .shk-fieldset-toggle:disabled {\n cursor: default;\n }\n .shk-fieldset-toggle svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .fieldset-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.375rem;\n border-radius: 0.5rem;\n color: var(--shk-primary-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out,\n opacity 0.15s ease-in-out;\n }\n .fieldset-action-btn:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-primary-50) 60%, transparent);\n color: var(--shk-primary-700);\n }\n .fieldset-action-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .fieldset-action-btn svg {\n width: 0.875rem !important;\n height: 0.875rem !important;\n }\n .shk-fieldset-content {\n animation: shk-fieldset-fade 0.25s ease-out;\n }\n @keyframes shk-fieldset-fade {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class FieldsetComponent {\n protected getIcon = getIcon;\n\n /** Title shown in the header. */\n legend = input<string>('');\n /** Collapsed state (default: collapsed). Two-way bindable with [(collapsed)]. */\n collapsed = model<boolean>(true);\n /** Whether the header toggles the content. */\n toggleable = input<boolean>(true);\n /** Shows the expand/collapse icon button. */\n showToggleIcon = input<boolean>(true);\n /** Optional leading icon shown next to the legend. */\n icon = input<string>('');\n /** Optional badge/count shown after the legend. */\n badge = input<string | number>('');\n /** CSS classes for the badge (override). */\n badgeClass = input<string>('');\n /** Icon shown when collapsed. */\n collapsedIcon = input<string>('chevron-right');\n /** Icon shown when expanded. */\n expandedIcon = input<string>('chevron-down');\n /** Action buttons rendered on the right side of the header. */\n headerActions = input<FieldsetHeaderAction[]>([]);\n /** Custom content templates: key 'legend' (context: $implicit collapsed, expanded). */\n customTemplates = input<{ [key: string]: any }>({});\n hasShadow = input<boolean>(true);\n expandLabel = input<string>('Expandir');\n collapseLabel = input<string>('Colapsar');\n\n /** Emits the new expanded state when toggled. */\n toggle = output<boolean>();\n expand = output<void>();\n collapse = output<void>();\n\n contentId = `shk-fieldset-content-${++fieldsetCounter}`;\n\n onToggle(): void {\n if (!this.toggleable()) return;\n const wasCollapsed = this.collapsed();\n const nowExpanded = wasCollapsed;\n this.collapsed.set(!wasCollapsed);\n this.toggle.emit(nowExpanded);\n if (nowExpanded) {\n this.expand.emit();\n } else {\n this.collapse.emit();\n }\n }\n\n isHeaderActionVisible(action: FieldsetHeaderAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n isHeaderActionDisabled(action: FieldsetHeaderAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n}\n","<div\n class=\"rounded-xl bg-white dark:[background-color:var(--shk-surface-50)] border _shk-border dark:[border-color:var(--shk-surface-200)] overflow-hidden\"\n [class.shadow-sm]=\"hasShadow()\"\n>\n <div\n class=\"flex items-center gap-2 px-4 py-3\"\n [class.border-b]=\"!collapsed()\"\n [class._shk-border]=\"!collapsed()\"\n [class.dark:[border-color:var(--shk-surface-200)]]=\"!collapsed()\"\n >\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n [disabled]=\"!toggleable()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-controls]=\"contentId\"\n class=\"flex items-center gap-2 flex-1 min-w-0 text-left group disabled:cursor-default\"\n >\n @if (customTemplates()['legend']) {\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['legend']; context: { $implicit: collapsed(), expanded: !collapsed() }\"\n ></ng-container>\n } @else {\n @if (icon()) {\n <svg [lucideIcon]=\"getIcon(icon())\" class=\"w-4 h-4 _shk-text-primary shrink-0\"></svg>\n }\n <span class=\"font-semibold text-sm _shk-text-surface-800 dark:[color:var(--shk-surface-800)] truncate\">\n {{ legend() }}\n </span>\n @if (badge() !== undefined && badge() !== null && badge() !== '') {\n <span\n [class]=\"badgeClass() || 'inline-flex items-center px-2 py-0.5 rounded-full text-xs font-semibold _shk-bg-primary-soft _shk-text-primary-700 dark:[background-color:var(--shk-primary-900)] dark:[color:var(--shk-primary-300)] shrink-0'\"\n >\n {{ badge() }}\n </span>\n }\n }\n </button>\n\n @if (headerActions().length > 0) {\n <div class=\"flex items-center gap-0.5 shrink-0\">\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick()\"\n [class]=\"'fieldset-action-btn ' + (action.class || '')\"\n [disabled]=\"isHeaderActionDisabled(action)\"\n [attr.aria-label]=\"action.label\"\n >\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ action.label }}\n </span>\n </div>\n }\n }\n </div>\n }\n\n @if (toggleable() && showToggleIcon()) {\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n class=\"shk-fieldset-toggle shrink-0\"\n [disabled]=\"!toggleable()\"\n >\n <svg [lucideIcon]=\"getIcon(collapsed() ? collapsedIcon() : expandedIcon())\" class=\"w-4 h-4 transition-transform\"></svg>\n </button>\n }\n </div>\n\n @if (!collapsed()) {\n <div [id]=\"contentId\" class=\"shk-fieldset-content px-4 py-3.5\">\n <ng-content></ng-content>\n </div>\n }\n</div>\n","import {\n Component,\n Directive,\n TemplateRef,\n ChangeDetectionStrategy,\n computed,\n contentChildren,\n input,\n model,\n output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucideCheck,\n LucideChevronLeft,\n LucideChevronRight,\n LucideArrowLeft,\n LucideX,\n LucideLoaderCircle,\n LucideScrollText,\n LucideBuilding,\n LucideUserRound,\n LucideInfo,\n LucideClipboardCheck,\n LucidePackage,\n LucideHotel,\n LucideMap,\n LucideTag,\n LucideUtensils,\n LucideCoins,\n LucideStickyNote,\n LucideCircleAlert,\n} from '@lucide/angular';\n\nconst icons: Record<string, any> = {\n check: LucideCheck,\n 'chevron-left': LucideChevronLeft,\n 'chevron-right': LucideChevronRight,\n 'arrow-left': LucideArrowLeft,\n x: LucideX,\n 'loader-circle': LucideLoaderCircle,\n 'file-contract': LucideScrollText,\n building: LucideBuilding,\n 'user-round': LucideUserRound,\n info: LucideInfo,\n 'clipboard-check': LucideClipboardCheck,\n package: LucidePackage,\n hotel: LucideHotel,\n map: LucideMap,\n tag: LucideTag,\n utensils: LucideUtensils,\n coins: LucideCoins,\n 'sticky-note': LucideStickyNote,\n 'circle-exclamation': LucideCircleAlert,\n 'circle-alert': LucideCircleAlert,\n};\n\nfunction getIcon(name: string): any {\n return icons[name] ?? LucideChevronRight;\n}\n\n/** A step of the wizard shown in the stepper. */\nexport interface WizardStep {\n id: string | number;\n label: string;\n /** Optional lucide icon rendered inside the step circle. */\n icon?: string;\n /** Overrides the primary footer button label for this step. */\n primaryLabel?: string;\n /** Overrides the primary footer button icon for this step. */\n primaryIcon?: string;\n}\n\n/** Declares a step's content template: <ng-template shkWizardStepContent=\"stepId\">…</ng-template>. */\n@Directive({\n selector: 'ng-template[shkWizardStepContent]',\n standalone: true,\n})\nexport class ShkWizardStepContent {\n stepId = input.required<string | number>({ alias: 'shkWizardStepContent' });\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n\nlet wizardCounter = 0;\n\n@Component({\n selector: 'shk-wizard',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './wizard.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .shk-wizard-icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border-radius: 9999px;\n color: var(--shk-surface-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-wizard-icon-btn:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n color: var(--shk-surface-800);\n }\n .shk-wizard-icon-btn:disabled {\n cursor: default;\n }\n .shk-wizard-icon-btn svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-stepper-dot {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 9999px;\n font-size: 0.875rem;\n font-weight: 700;\n flex-shrink: 0;\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-wizard-stepper-dot svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-btn-secondary {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--shk-surface-700);\n background-color: transparent;\n border: 1px solid var(--shk-surface-200);\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n }\n .shk-wizard-btn-secondary:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n border-color: var(--shk-surface-300);\n color: var(--shk-surface-900);\n }\n .shk-wizard-btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .shk-wizard-btn-secondary svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-btn-primary {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: #fff;\n background-color: var(--shk-primary-600);\n box-shadow: 0 6px 20px -6px color-mix(in srgb, var(--shk-primary-600) 55%, transparent);\n transition: background-color 0.15s ease-in-out, opacity 0.15s ease-in-out;\n }\n .shk-wizard-btn-primary:hover:not(:disabled) {\n background-color: var(--shk-primary-700);\n }\n .shk-wizard-btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n }\n .shk-wizard-btn-primary svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-spin {\n animation: shk-wizard-spin 0.8s linear infinite;\n }\n @keyframes shk-wizard-spin {\n to {\n transform: rotate(360deg);\n }\n }\n .shk-wizard-fade {\n animation: shk-wizard-fade 0.25s ease-out;\n }\n @keyframes shk-wizard-fade {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class WizardComponent {\n protected getIcon = getIcon;\n\n /** Steps definition shown in the stepper and used to resolve step content. */\n steps = input<WizardStep[]>([]);\n /** Active step id. Two-way bindable with [(currentStep)]. Null resolves to the first step. */\n currentStep = model<string | number | null>(null);\n\n // Header\n /** Shows the sticky header (back button + title). */\n showHeader = input<boolean>(true);\n headerTitle = input<string>('');\n headerSubtitle = input<string>('');\n /** Shows the round back button in the header. */\n showBackButton = input<boolean>(true);\n backTooltip = input<string>('Atrás');\n /** Optional lucide icon shown before the title. */\n headerIcon = input<string>('');\n\n // Stepper\n /** Shows the progress stepper (hide it for edit mode, like wac-app does). */\n showStepper = input<boolean>(true);\n /** Lets the user click on previous steps to jump back. */\n stepperClickable = input<boolean>(false);\n\n // Footer\n showFooter = input<boolean>(true);\n /** Shows a \"Paso X / N\" counter on the left of the footer. */\n showStepCounter = input<boolean>(false);\n stepCounterPrefix = input<string>('Paso');\n /** Shows the Cancel button on the first step (instead of a back button). */\n showCancel = input<boolean>(true);\n /** Auto-advances to the next step on the primary button when it is not the last step. */\n advanceOnNext = input<boolean>(true);\n\n prevLabel = input<string>('Atrás');\n prevIcon = input<string>('chevron-left');\n cancelLabel = input<string>('Cancelar');\n cancelIcon = input<string>('x');\n nextLabel = input<string>('Continuar');\n nextIcon = input<string>('chevron-right');\n finishLabel = input<string>('Finalizar');\n finishIcon = input<string>('check');\n\n /** Overrides the primary footer button label for every step. */\n primaryLabel = input<string | null>(null);\n /** Overrides the primary footer button icon for every step. */\n primaryIcon = input<string | null>(null);\n /** Shows a loading spinner on the primary button and disables it. */\n primaryLoading = input<boolean>(false);\n /** Disables the primary footer button (e.g. while the step form is invalid). */\n primaryDisabled = input<boolean>(false);\n\n // Outputs\n back = output<void>();\n cancel = output<void>();\n prev = output<void>();\n next = output<void>();\n finish = output<void>();\n stepChange = output<{ step: WizardStep | null; index: number }>();\n\n readonly stepContents = contentChildren(ShkWizardStepContent);\n\n currentIndex = computed(() => {\n const id = this.currentStep();\n if (id == null) return this.steps().length > 0 ? 0 : -1;\n return this.steps().findIndex((s) => s.id === id);\n });\n\n currentStepObj = computed(() => this.steps()[this.currentIndex()] ?? null);\n isFirstStep = computed(() => this.currentIndex() === 0);\n isLastStep = computed(() => this.currentIndex() === this.steps().length - 1);\n\n primaryActionLabel = computed(() => {\n if (this.primaryLabel()) return this.primaryLabel()!;\n const step = this.currentStepObj();\n if (step?.primaryLabel) return step.primaryLabel;\n return this.isLastStep() ? this.finishLabel() : this.nextLabel();\n });\n\n primaryActionIcon = computed(() => {\n if (this.primaryIcon()) return this.primaryIcon()!;\n const step = this.currentStepObj();\n if (step?.primaryIcon) return step.primaryIcon;\n return this.isLastStep() ? this.finishIcon() : this.nextIcon();\n });\n\n getStepTemplate(id: string | number): TemplateRef<unknown> | undefined {\n return this.stepContents().find((c) => c.stepId() === id)?.templateRef;\n }\n\n goTo(stepId: string | number): void {\n const idx = this.steps().findIndex((s) => s.id === stepId);\n if (idx < 0) return;\n if (this.currentStep() === stepId) return;\n this.currentStep.set(stepId);\n this.stepChange.emit({ step: this.steps()[idx], index: idx });\n }\n\n onPrev(): void {\n const idx = this.currentIndex();\n if (idx <= 0) return;\n this.prev.emit();\n this.goTo(this.steps()[idx - 1].id);\n }\n\n onNext(): void {\n const idx = this.currentIndex();\n const next = this.steps()[idx + 1];\n if (!next) return;\n this.next.emit();\n if (this.advanceOnNext()) {\n this.goTo(next.id);\n }\n }\n\n onPrimary(): void {\n if (this.primaryLoading() || this.primaryDisabled()) return;\n if (this.isLastStep()) {\n this.finish.emit();\n } else {\n this.onNext();\n }\n }\n}\n","<div class=\"min-h-full bg-transparent\">\n\n <!-- ============ Sticky Header + Stepper ============ -->\n @if (showHeader()) {\n <div\n class=\"sticky top-0 z-20 bg-white dark:[background-color:var(--shk-surface-50)] border-b _shk-border dark:[border-color:var(--shk-surface-200)] shadow-sm\"\n >\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-4\">\n <div class=\"flex items-center gap-4 mb-4\">\n @if (showBackButton()) {\n <button\n type=\"button\"\n (click)=\"back.emit()\"\n [attr.aria-label]=\"backTooltip()\"\n [attr.title]=\"backTooltip()\"\n class=\"shk-wizard-icon-btn shrink-0\"\n >\n <svg [lucideIcon]=\"getIcon('arrow-left')\" class=\"w-4 h-4\"></svg>\n </button>\n }\n <div class=\"flex-1 min-w-0 flex items-center gap-2.5\">\n @if (headerIcon()) {\n <span class=\"w-9 h-9 rounded-lg _shk-bg-primary-soft _shk-text-primary flex items-center justify-center shrink-0\">\n <svg [lucideIcon]=\"getIcon(headerIcon())\" class=\"w-4 h-4\"></svg>\n </span>\n }\n <div class=\"min-w-0\">\n <h1 class=\"text-xl font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)] truncate\">\n {{ headerTitle() }}\n </h1>\n @if (headerSubtitle()) {\n <p class=\"text-xs _shk-text-surface-500 dark:[color:var(--shk-surface-500)] mt-0.5 truncate\">\n {{ headerSubtitle() }}\n </p>\n }\n </div>\n </div>\n <ng-content select=\"[shkWizardHeaderActions]\"></ng-content>\n </div>\n\n <!-- Stepper -->\n @if (showStepper() && steps().length > 1) {\n <div class=\"flex items-center gap-2 w-full max-w-3xl mx-auto\">\n @for (step of steps(); track step.id; let i = $index, last = $last) {\n <div class=\"flex items-center gap-3 shrink-0\">\n <button\n type=\"button\"\n (click)=\"goTo(step.id)\"\n [disabled]=\"!stepperClickable() || currentIndex() < i\"\n [attr.aria-label]=\"step.label\"\n class=\"shk-wizard-stepper-dot\"\n [class._shk-bg-primary]=\"currentIndex() > i || currentIndex() === i\"\n [class.text-white]=\"currentIndex() > i || currentIndex() === i\"\n [class._shk-bg-surface-200]=\"currentIndex() < i\"\n [class._shk-text-surface-500]=\"currentIndex() < i\"\n [class.cursor-pointer]=\"stepperClickable() && currentIndex() >= i\"\n [class.cursor-default]=\"!stepperClickable() || currentIndex() < i\"\n >\n @if (currentIndex() > i) {\n <svg [lucideIcon]=\"getIcon(step.icon || 'check')\" class=\"w-4 h-4\"></svg>\n } @else if (step.icon) {\n <svg [lucideIcon]=\"getIcon(step.icon)\" class=\"w-4 h-4\"></svg>\n } @else {\n {{ i + 1 }}\n }\n </button>\n <span\n class=\"text-sm font-semibold transition-colors whitespace-nowrap hidden sm:inline\"\n [class._shk-text-surface-800]=\"currentIndex() === i\"\n [class._shk-text-surface-500]=\"currentIndex() !== i\"\n [class.dark:[color:var(--shk-surface-800)]]=\"currentIndex() === i\"\n [class.dark:[color:var(--shk-surface-500)]]=\"currentIndex() !== i\"\n >\n {{ step.label }}\n </span>\n </div>\n\n @if (!last) {\n <div class=\"flex-1 h-0.5 _shk-bg-surface-200 dark:[background-color:var(--shk-surface-200)] relative overflow-hidden rounded-full\">\n <div\n class=\"absolute inset-y-0 left-0 _shk-bg-primary transition-all duration-300\"\n [class.w-full]=\"currentIndex() > i\"\n [class.w-0]=\"currentIndex() <= i\"\n ></div>\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ============ Active step content ============ -->\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-6 pb-28\">\n @if (currentIndex() >= 0) {\n @if (getStepTemplate(steps()[currentIndex()].id); as tpl) {\n <div class=\"shk-wizard-fade\" [style.view-transition-name]=\"'shk-wizard-step'\">\n <ng-container\n *ngTemplateOutlet=\"tpl; context: { step: currentStepObj(), index: currentIndex() }\"\n ></ng-container>\n </div>\n } @else {\n <p class=\"text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-400)]\">\n No hay contenido definido para el paso «{{ steps()[currentIndex()].label }}».\n </p>\n }\n }\n </div>\n\n <!-- ============ Sticky Footer ============ -->\n @if (showFooter() && steps().length > 0) {\n <div\n class=\"sticky bottom-0 z-20 bg-white dark:[background-color:var(--shk-surface-50)] border-t _shk-border dark:[border-color:var(--shk-surface-200)] shadow-[0_-4px_12px_rgba(0,0,0,0.04)] mt-8\"\n >\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-4 flex items-center justify-end gap-3\">\n @if (showStepCounter()) {\n <span class=\"text-sm _shk-text-surface-500 dark:[color:var(--shk-surface-500)] mr-auto\">\n {{ stepCounterPrefix() }} {{ currentIndex() + 1 }} / {{ steps().length }}\n </span>\n }\n\n @if (isFirstStep()) {\n @if (showCancel()) {\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"shk-wizard-btn-secondary\">\n @if (cancelIcon()) {\n <svg [lucideIcon]=\"getIcon(cancelIcon())\" class=\"w-4 h-4\"></svg>\n }\n {{ cancelLabel() }}\n </button>\n }\n } @else {\n <button type=\"button\" (click)=\"onPrev()\" class=\"shk-wizard-btn-secondary\">\n <svg [lucideIcon]=\"getIcon(prevIcon())\" class=\"w-4 h-4\"></svg>\n {{ prevLabel() }}\n </button>\n }\n\n <button\n type=\"button\"\n (click)=\"onPrimary()\"\n [disabled]=\"primaryDisabled() || primaryLoading()\"\n class=\"shk-wizard-btn-primary\"\n >\n @if (primaryLoading()) {\n <svg [lucideIcon]=\"getIcon('loader-circle')\" class=\"w-4 h-4 shk-wizard-spin\"></svg>\n } @else {\n @if (primaryActionIcon()) {\n <svg [lucideIcon]=\"getIcon(primaryActionIcon())\" class=\"w-4 h-4\"></svg>\n }\n }\n {{ primaryActionLabel() }}\n </button>\n </div>\n </div>\n }\n</div>\n","/* Theme — import theme.css in your global styles.css:\n @import '@shirkasoft/ui-components/theme.css';\n Override --shk-* CSS variables at :root or .dark to theme.\n*/\nexport { TextFieldComponent } from './lib/text-field/text-field.component';\nexport { NotificationComponent } from './lib/notification/notification.component';\nexport type { NotificationPosition } from './lib/notification/notification.component';\nexport { NotificationService } from './lib/notification/notification.service';\nexport type { Notification } from './lib/notification/notification.service';\nexport { ToggleComponent } from './lib/toggle/toggle.component';\nexport { PriceInputComponent } from './lib/price-input/price-input.component';\nexport { DatePickerComponent } from './lib/date-picker/date-picker.component';\nexport type { DatePickerView } from './lib/date-picker/date-picker.component';\nexport { ConfirmDialogComponent } from './lib/confirm-dialog/confirm-dialog.component';\nexport { ConfirmDialogService } from './lib/confirm-dialog/confirm-dialog.service';\nexport type { ConfirmConfig } from './lib/confirm-dialog/confirm-dialog.service';\nexport { ModalComponent } from './lib/modal/modal.component';\nexport { ModalService } from './lib/modal/modal.service';\nexport type { ModalConfig } from './lib/modal/modal.service';\nexport { SelectComponent } from './lib/select/select.component';\nexport type { SelectOption } from './lib/select/select.component';\nexport { FileUploadComponent } from './lib/file-upload/file-upload.component';\nexport type { FileUploadError } from './lib/file-upload/file-upload.component';\nexport { TableComponent } from './lib/table/table.component';\nexport type {\n Column,\n TableAction,\n RowAction,\n PageChangeEvent,\n FilterChangeEvent,\n} from './lib/table/table.component';\nexport { TooltipComponent } from './lib/tooltip/tooltip.component';\nexport { SidebarComponent } from './lib/sidebar/sidebar.component';\nexport type {\n SidebarItem,\n SidebarGroup,\n} from './lib/sidebar/sidebar.component';\nexport { RailSidebarComponent } from './lib/rail-sidebar/rail-sidebar.component';\nexport type {\n RailSidebarItem,\n RailSidebarSection,\n RailSidebarSectionEvent,\n} from './lib/rail-sidebar/rail-sidebar.component';\nexport { ChartComponent } from './lib/chart/chart.component';\nexport { COLOR_PALETTE, readThemeColors } from './lib/chart/chart.utils';\nexport { TimelineComponent } from './lib/timeline/timeline.component';\nexport {\n DEFAULT_MARKER_GRADIENTS,\n DEFAULT_SUPPLIER_TYPE_ICONS,\n DEFAULT_SUPPLIER_ICON_COLORS,\n} from './lib/timeline/timeline.component';\nexport type {\n TimelineItem,\n TimelineSubItem,\n TimelineMeta,\n TimelineAction,\n TimelineItemAction,\n TimelineSubItemAction,\n TimelineAlignment,\n TimelineMarkerSize,\n} from './lib/timeline/timeline.component';\nexport { FieldsetComponent } from './lib/fieldset/fieldset.component';\nexport type { FieldsetHeaderAction } from './lib/fieldset/fieldset.component';\nexport { WizardComponent, ShkWizardStepContent } from './lib/wizard/wizard.component';\nexport type { WizardStep } from './lib/wizard/wizard.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["icons","i1","getIcon","i3","ICONS"],"mappings":"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"}
1
+ {"version":3,"file":"shirkasoft-ui-components.mjs","sources":["../../../projects/ui-components/src/lib/utils/icons.ts","../../../projects/ui-components/src/lib/text-field/text-field.component.ts","../../../projects/ui-components/src/lib/text-field/text-field.component.html","../../../projects/ui-components/src/lib/notification/notification.service.ts","../../../projects/ui-components/src/lib/notification/notification.component.ts","../../../projects/ui-components/src/lib/notification/notification.component.html","../../../projects/ui-components/src/lib/toggle/toggle.component.ts","../../../projects/ui-components/src/lib/price-input/price-input.component.ts","../../../projects/ui-components/src/lib/price-input/price-input.component.html","../../../projects/ui-components/src/lib/date-picker/date-picker.component.ts","../../../projects/ui-components/src/lib/date-picker/date-picker.component.html","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.component.ts","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.component.html","../../../projects/ui-components/src/lib/confirm-dialog/confirm-dialog.service.ts","../../../projects/ui-components/src/lib/modal/modal.service.ts","../../../projects/ui-components/src/lib/modal/modal.component.ts","../../../projects/ui-components/src/lib/modal/modal.component.html","../../../projects/ui-components/src/lib/select/select.component.ts","../../../projects/ui-components/src/lib/select/select.component.html","../../../projects/ui-components/src/lib/file-upload/file-upload.component.ts","../../../projects/ui-components/src/lib/file-upload/file-upload.component.html","../../../projects/ui-components/src/lib/tag/tag.component.ts","../../../projects/ui-components/src/lib/tooltip/tooltip.component.ts","../../../projects/ui-components/src/lib/table/table.component.ts","../../../projects/ui-components/src/lib/table/table.component.html","../../../projects/ui-components/src/lib/sidebar/sidebar.component.ts","../../../projects/ui-components/src/lib/sidebar/sidebar.component.html","../../../projects/ui-components/src/lib/rail-sidebar/rail-sidebar.component.ts","../../../projects/ui-components/src/lib/rail-sidebar/rail-sidebar.component.html","../../../projects/ui-components/src/lib/chart/chart.component.ts","../../../projects/ui-components/src/lib/chart/chart.utils.ts","../../../projects/ui-components/src/lib/timeline/timeline.component.ts","../../../projects/ui-components/src/lib/timeline/timeline.component.html","../../../projects/ui-components/src/lib/fieldset/fieldset.component.ts","../../../projects/ui-components/src/lib/fieldset/fieldset.component.html","../../../projects/ui-components/src/lib/wizard/wizard.component.ts","../../../projects/ui-components/src/lib/wizard/wizard.component.html","../../../projects/ui-components/src/lib/skeleton/skeleton.component.ts","../../../projects/ui-components/src/lib/button/button.component.ts","../../../projects/ui-components/src/lib/knob/knob.component.ts","../../../projects/ui-components/src/lib/loading/loading-spinner.component.ts","../../../projects/ui-components/src/lib/loading/loading-bar.component.ts","../../../projects/ui-components/src/lib/loading/loading-overlay.component.ts","../../../projects/ui-components/src/lib/loading/loading-dots.component.ts","../../../projects/ui-components/src/lib/tabs/tabs.service.ts","../../../projects/ui-components/src/lib/tabs/tabs.component.ts","../../../projects/ui-components/src/lib/tabs/tablist.component.ts","../../../projects/ui-components/src/lib/tabs/tab.component.ts","../../../projects/ui-components/src/lib/tabs/tabpanels.component.ts","../../../projects/ui-components/src/lib/tabs/tabpanel.component.ts","../../../projects/ui-components/src/lib/breadcrumb/breadcrumb.service.ts","../../../projects/ui-components/src/lib/breadcrumb/breadcrumb.component.ts","../../../projects/ui-components/src/index.ts","../../../projects/ui-components/src/shirkasoft-ui-components.ts"],"sourcesContent":["/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\nimport {\n LucideArrowLeft,\n LucideArrowUpDown,\n LucideCalendarDays,\n LucideCheck,\n LucideChevronDown,\n LucideChevronLeft,\n LucideChevronRight,\n LucideChevronsLeft,\n LucideChevronsRight,\n LucideCircleQuestionMark,\n LucideCirclePlus,\n LucideEye,\n LucideEyeOff,\n LucideFile,\n LucideFunnel,\n LucideGlobe,\n LucideInbox,\n LucideInfo,\n LucideLoader,\n LucideLoaderCircle,\n LucideLogOut,\n LucideMaximize2,\n LucideMenu,\n LucideMinimize2,\n LucidePanelRight,\n LucidePlus,\n LucideRefreshCw,\n LucideSearch,\n LucideTrash2,\n LucideTriangleAlert,\n LucideUpload,\n LucideX,\n} from '@lucide/angular';\n\n/** Maps the icon names used across the library to their Lucide component. */\nexport const ICONS: Record<string, any> = {\n 'arrow-left': LucideArrowLeft,\n 'arrow-up-down': LucideArrowUpDown,\n check: LucideCheck,\n 'calendar-days': LucideCalendarDays,\n 'chevron-down': LucideChevronDown,\n 'chevron-left': LucideChevronLeft,\n 'chevron-right': LucideChevronRight,\n 'chevrons-left': LucideChevronsLeft,\n 'chevrons-right': LucideChevronsRight,\n 'circle-help': LucideCircleQuestionMark,\n 'circle-plus': LucideCirclePlus,\n eye: LucideEye,\n 'eye-off': LucideEyeOff,\n file: LucideFile,\n filter: LucideFunnel,\n globe: LucideGlobe,\n inbox: LucideInbox,\n info: LucideInfo,\n loader: LucideLoader,\n 'loader-circle': LucideLoaderCircle,\n 'log-out': LucideLogOut,\n 'maximize-2': LucideMaximize2,\n menu: LucideMenu,\n 'minimize-2': LucideMinimize2,\n 'panel-right': LucidePanelRight,\n plus: LucidePlus,\n refresh: LucideRefreshCw,\n search: LucideSearch,\n 'trash-2': LucideTrash2,\n 'triangle-alert': LucideTriangleAlert,\n upload: LucideUpload,\n x: LucideX,\n};\n\n/**\n * Resolves the icon passed to a component into a lucide component.\n * Accepts a registered string name, an existing lucide component or a LucideIconData object.\n */\nexport function getIcon(icon?: any, fallback: any = LucideCircleQuestionMark): any {\n if (!icon) return null;\n if (typeof icon === 'string') {\n return ICONS[icon] ?? fallback;\n }\n if (typeof icon === 'function') {\n return icon;\n }\n return fallback;\n}","import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n forwardRef,\n signal,\n computed,\n effect,\n viewChild,\n ElementRef,\n ChangeDetectionStrategy,\n DestroyRef,\n inject,\n output,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormGroup,\n FormControl,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\nimport {\n LucideDynamicIcon,\n LucideEye,\n} from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Text input (or textarea) that implements ControlValueAccessor with built-in\n * validation messages, card/number formatting, password reveal and search mode.\n */\n@Component({\n selector: 'shk-text-field',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, LucideDynamicIcon],\n templateUrl: './text-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFieldComponent),\n multi: true,\n },\n ],\n})\nexport class TextFieldComponent implements ControlValueAccessor {\n private cdr = inject(ChangeDetectorRef);\n\n /** id attribute applied to the native input. */\n id = input<string>('');\n /** Formats the value as a credit card number (XXXX-XXXX-XXXX-XXXX). */\n formatCard = input<boolean>(false);\n /** Blocks the minus sign from being typed. */\n preventNegative = input<boolean>(false);\n /** Label rendered above the field. */\n label = input<string>('');\n /** Native input type ('text', 'password', 'number', etc.). */\n type = input<string>('text');\n /** Allows digits only, stripping any other character. */\n numbersOnly = input<boolean>(false);\n /** When true, allows decimals and normalizes ',' to '.'. */\n allowDecimals = input<boolean>(false);\n /** Maximum number of characters the user can type. */\n maxLength = input<number | undefined>(undefined);\n /** Placeholder text of the native input. */\n placeholder = input<string>('');\n /** Custom messages keyed by validation error name. */\n errorMessages = input<{ [key: string]: string }>({});\n /** Parent reactive form used to resolve the control by label. */\n formGroup = input<FormGroup | undefined>(undefined);\n /** Reactive control bound directly to this field. */\n control = input<FormControl | undefined>(undefined);\n /** Disables the field. */\n disabled = input<boolean>(false);\n /** Custom error message shown regardless of validation errors. */\n errorMessage = input<string>('');\n /** Renders a textarea instead of an input. */\n isTextArea = input<boolean>(false);\n /** Height classes applied when `isTextArea` is true. */\n textAreaHeight = input<string>('h-28');\n /** Renders the field as a read-only search trigger. */\n searchMode = input<boolean>(false);\n /** Value shown when `searchMode` is enabled. */\n displayValue = input<string>('');\n /** Native autocomplete attribute. */\n autocomplete = input<string>('');\n /** Emitted when the search button is clicked (search mode). */\n searchButtonClick = output<void>();\n protected readonly getIcon = (name: any) => getIconFromCentral(name, LucideEye);\n\n /** Reference to the native input element. */\n inputElement = viewChild<ElementRef<HTMLInputElement>>('input');\n /** Reference to the native textarea element. */\n textareaElement = viewChild<ElementRef<HTMLTextAreaElement>>('textarea');\n\n /** Internal raw value of the field. */\n private _value = signal<any>('');\n /** Reactive disabled state from the form control. */\n private _disabledState = signal<boolean>(false);\n /** Whether the password is currently revealed. */\n showPassword = signal<boolean>(false);\n /** Tracks whether the control was in error at some point (for \"was fixed\" UX). */\n hadError = signal<boolean>(false);\n /** Counter bumped to trigger recomputation of derived error signals. */\n private errorTracker = signal<number>(0);\n\n /** Text displayed in search mode when `displayValue` is set. */\n displayLabel = computed(() => {\n if (this.searchMode() && this.displayValue()) {\n return this.displayValue();\n }\n return '';\n });\n /** Prevents re-subscribing to the same form control. */\n private subscribed = signal<boolean>(false);\n\n /** Effective disabled state combining the input and the form binding. */\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n /** Current field value. */\n value = computed(() => this._value());\n\n /** Resolves the reactive control: explicit `control` or `formGroup.get(label)`. */\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) {\n return fg.get(lbl) as FormControl;\n }\n return undefined;\n });\n\n /** True when the resolved control is invalid and dirty or touched. */\n shouldShowError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n /** True when the control had an error before and is now valid (success state). */\n wasFixedError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n /** Resolved list of error messages for the current control state. */\n getErrorMessages = computed(() => {\n this.errorTracker();\n\n const customError = this.errorMessage();\n if (customError) {\n return [customError];\n }\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((errorKey) => {\n if (customErrors[errorKey]) return customErrors[errorKey];\n\n switch (errorKey) {\n case 'required':\n return t.translate('validation.required');\n case 'email':\n return t.translate('validation.email');\n case 'minlength':\n return t.translate('validation.minlength', {\n min: ctrl.errors!['minlength'].requiredLength,\n });\n case 'maxlength':\n return t.translate('validation.maxlength', {\n max: ctrl.errors!['maxlength'].requiredLength,\n });\n case 'pattern':\n return t.translate('validation.pattern');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n /** Effective input type (handles textarea and password reveal). */\n effectiveType = computed(() => {\n if (this.isTextArea()) return 'text';\n if (this.type() === 'password' && this.showPassword()) return 'text';\n return this.type();\n });\n\n private transloco = inject(TranslocoService);\n /** Callback notified with the new value (ControlValueAccessor). */\n private onChange: (value: any) => void = () => {};\n\n /** Callback notified when the field is touched (ControlValueAccessor). */\n private onTouched: () => void = () => {};\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n effect(() => {\n const ctrl = this.actualControl();\n const shouldDisable = this.isDisabled();\n\n if (ctrl && shouldDisable) {\n Promise.resolve().then(() => {\n ctrl.disable();\n });\n }\n });\n\n effect(() => {\n const ctrl = this.actualControl();\n\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n\n ctrl.statusChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n });\n\n ctrl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n this.subscribed.set(true);\n });\n\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n }\n\n /** Prevents disallowed characters based on the `numbersOnly`/`allowDecimals` config. */\n numberValidation(event: KeyboardEvent) {\n const allowedKeys = [\n 'Backspace',\n 'Tab',\n 'End',\n 'Home',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n ];\n\n if (this.numbersOnly()) {\n const isNumber = /^\\d$/.test(event.key);\n if (!isNumber && !allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n return;\n }\n\n if (this.allowDecimals() || this.type() === 'number') {\n allowedKeys.push('.');\n }\n\n const isDecimal = event.key === '.' || event.key === ',';\n const isNumber = !isNaN(Number(event.key));\n\n if (allowedKeys.includes(event.key)) {\n if (isDecimal) {\n const input = event.target as HTMLInputElement;\n const currentValue = input.value;\n\n const hasDecimalSeparator =\n currentValue.includes('.') || currentValue.includes(',');\n\n if (hasDecimalSeparator) {\n event.preventDefault();\n }\n }\n return;\n }\n\n if (isNumber) {\n return;\n }\n\n event.preventDefault();\n }\n\n /** Marks the field as touched and refreshes the error state. */\n onBlur(): void {\n this.onTouched();\n\n this.errorTracker.update((v) => v + 1);\n\n const ctrl = this.actualControl();\n if (ctrl?.invalid && ctrl?.touched) {\n this.hadError.set(true);\n }\n }\n\n /** Formats the raw input as a credit card number and notifies the control. */\n onCardInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n let value = input.value.replace(/[^0-9]/g, '');\n\n if (value.length > 16) {\n value = value.substring(0, 16);\n }\n\n let formatted = '';\n for (let i = 0; i < value.length; i++) {\n if (i > 0 && i % 4 === 0) {\n formatted += '-';\n }\n formatted += value[i];\n }\n\n input.value = formatted;\n this.onChange(formatted);\n }\n\n /** Handles raw input: applies number/card/max-length formatting and notifies the control. */\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement | HTMLTextAreaElement;\n let newValue = input.value;\n\n if (this.allowDecimals()) {\n newValue = newValue.replace(/,/g, '.');\n\n const parts = newValue.split('.');\n if (parts.length > 2) {\n newValue = parts[0] + '.' + parts.slice(1).join('');\n }\n\n if (parts.length > 1 && parts[1].length > 2) {\n newValue = parts[0] + '.' + parts[1].substring(0, 2);\n }\n }\n\n if (this.numbersOnly()) {\n newValue = newValue.replace(/[^0-9]/g, '');\n }\n\n const maxLen = this.maxLength();\n if (maxLen && newValue.length > maxLen) {\n newValue = newValue.substring(0, maxLen);\n input.value = newValue;\n\n const ctrl = this.actualControl();\n setTimeout(() => {\n ctrl?.updateValueAndValidity();\n this.errorTracker.update((v) => v + 1);\n });\n }\n\n if (this.formatCard()) {\n this.onCardInput(event);\n } else {\n this.onChange(newValue);\n }\n }\n\n /** Toggles the visibility of a password field. */\n togglePasswordVisibility(): void {\n this.showPassword.update((v) => !v);\n }\n\n /** Sets the value from the form control applying the same formatting rules. */\n writeValue(value: any): void {\n let processedValue = value;\n\n if (this.allowDecimals() && value) {\n processedValue = String(value).replace(/,/g, '.');\n }\n\n if (this.numbersOnly() && value) {\n processedValue = value.toString().replace(/[^0-9]/g, '');\n }\n\n const maxLen = this.maxLength();\n if (maxLen && processedValue?.length > maxLen) {\n processedValue = processedValue.substring(0, maxLen);\n }\n\n if (this.formatCard() && processedValue) {\n const cleaned = processedValue.replace(/[^0-9]/g, '');\n let formatted = '';\n for (let i = 0; i < cleaned.length; i++) {\n if (i > 0 && i % 4 === 0) formatted += '-';\n formatted += cleaned[i];\n }\n this._value.set(formatted);\n } else {\n this._value.set(processedValue);\n }\n }\n\n /** Registers the callback invoked on value changes (ControlValueAccessor). */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** Registers the callback invoked when the field is touched. */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** Reflects the disabled state of the form control. */\n setDisabledState(isDisabled: boolean): void {\n this._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n @if (!isTextArea()) {\n <div class=\"flex\">\n @if (searchMode()) {\n @let isDisabledSearch = actualControl()?.disabled || isDisabled();\n <input\n #input\n [id]=\"id()\"\n type=\"text\"\n [value]=\"displayValue() || ''\"\n [placeholder]=\"placeholder() || label()\"\n [readOnly]=\"true\"\n [disabled]=\"isDisabledSearch\"\n (click)=\"!isDisabledSearch && searchButtonClick.emit()\"\n (keydown.enter)=\"!isDisabledSearch && searchButtonClick.emit()\"\n (blur)=\"onBlur()\"\n autocomplete=\"off\"\n [class.cursor-pointer]=\"!isDisabledSearch\"\n [class.cursor-not-allowed]=\"isDisabledSearch\"\n [class._shk-bg-surface-50]=\"isDisabledSearch\"\n [class.dark:[background-color:var(--shk-surface-100)]]=\"isDisabledSearch\"\n [class._shk-text-surface-400]=\"isDisabledSearch\"\n [class.dark:[color:var(--shk-surface-400)]]=\"isDisabledSearch\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-l-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500': shouldShowError() && !isDisabledSearch,\n '_shk-border': !shouldShowError() || isDisabledSearch,\n 'cursor-pointer': !isDisabledSearch,\n 'cursor-not-allowed _shk-text-surface-400 dark:[color:var(--shk-surface-400)]': isDisabledSearch\n }\"\n />\n <button\n type=\"button\"\n (click)=\"searchButtonClick.emit()\"\n tabindex=\"-1\"\n [disabled]=\"isDisabledSearch\"\n class=\"px-3 flex items-center justify-center shrink-0 _shk-bg-primary hover:[background-color:var(--shk-primary-700)] text-white border _shk-border-primary rounded-r-lg transition-colors duration-200 disabled:[background-color:var(--shk-surface-300)] dark:disabled:[background-color:var(--shk-surface-200)] disabled:[border-color:var(--shk-surface-300)] dark:disabled:[border-color:var(--shk-surface-200)] disabled:cursor-not-allowed\"\n >\n <svg [lucideIcon]=\"getIcon('search')\" class=\"w-4 h-4\"></svg>\n </button>\n }\n\n @if (!searchMode()) {\n <input\n #input\n [id]=\"id()\"\n [maxlength]=\"maxLength() || (formatCard() ? 19 : null)\"\n [min]=\"type() === 'number' && preventNegative() ? '0' : null\"\n (keypress)=\"type() === 'number' || numbersOnly() ? numberValidation($event) : null\"\n [type]=\"effectiveType()\"\n [formControl]=\"$any(actualControl())\"\n [placeholder]=\"placeholder() || label()\"\n (input)=\"onInput($event)\"\n [autocomplete]=\"autocomplete()\"\n (blur)=\"onBlur()\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError()\n }\"\n [class.pr-8]=\"type() === 'password' && actualControl()?.value?.length > 0\"\n [class.pr-3]=\"type() !== 'password' || !actualControl()?.value?.length\"\n />\n\n @if (type() === 'password' && actualControl()?.value?.length > 0) {\n <button\n type=\"button\"\n (click)=\"togglePasswordVisibility()\"\n [disabled]=\"actualControl()?.disabled\"\n class=\"absolute right-3 top-1/2 -translate-y-1/2 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-600)] focus:outline-none\"\n >\n @if (showPassword()) {\n <svg [lucideIcon]=\"getIcon('eye-off')\" class=\"w-4 h-4\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('eye')\" class=\"w-4 h-4\"></svg>\n }\n </button>\n }\n }\n </div>\n }\n\n @if (isTextArea()) {\n <textarea\n #textarea\n [id]=\"id()\"\n [formControl]=\"$any(actualControl())\"\n [placeholder]=\"placeholder() || label()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [class]=\"isTextArea() ? textAreaHeight() : 'h-28'\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 resize-none disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed disabled:[color:var(--shk-surface-400)] dark:disabled:[color:var(--shk-surface-400)] sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError()\n }\"\n ></textarea>\n }\n </div>\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\" tabindex=\"-1\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Toast-style notification entry. */\nexport interface Notification {\n id: string;\n message: string;\n type: 'success' | 'error' | 'warning' | 'info';\n /** Current progress 0-100 when `showProgress` is true. */\n progress?: number;\n /** Whether the notification renders a progress indicator. */\n showProgress?: boolean;\n}\n\n/**\n * Central notification store. Components push/update/remove notifications\n * reactively through signals for the notification component to render.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NotificationService {\n /** Reactive list of visible notifications. */\n private notificationsSignal = signal<Notification[]>([]);\n /** Monotonic id counter for new notifications. */\n private currentId = 0;\n\n /** Readonly reactive list of visible notifications. */\n notifications = this.notificationsSignal.asReadonly();\n\n /**\n * Adds a notification and returns its id. When `showProgress` is false and\n * `duration` is positive, it auto-removes after that many ms.\n */\n addNotification(\n message: string,\n type: Notification['type'] = 'info',\n showProgress: boolean = false,\n duration: number = 5000\n ): string {\n const id = (++this.currentId).toString();\n const notification: Notification = {\n id,\n message,\n type,\n progress: showProgress ? 0 : undefined,\n showProgress,\n };\n\n this.notificationsSignal.update((notifications) => [\n ...notifications,\n notification,\n ]);\n\n if (duration > 0 && !showProgress) {\n setTimeout(() => this.removeNotificationById(id), duration);\n }\n\n return id;\n }\n\n /** Updates a progress notification; auto-removes when progress hits 100. */\n updateProgress(notificationId: string, progress: number) {\n const currentNotifications = this.notificationsSignal();\n const index = currentNotifications.findIndex(\n (n) => n.id === notificationId\n );\n\n if (index > -1 && currentNotifications[index].showProgress) {\n const updatedProgress = Math.min(100, Math.max(0, progress));\n\n this.notificationsSignal.update((notifications) =>\n notifications.map((n, i) =>\n i === index ? { ...n, progress: updatedProgress } : n\n )\n );\n\n if (progress >= 100) {\n setTimeout(() => this.removeNotificationById(notificationId), 2000);\n }\n }\n }\n\n /** Removes the given notification. */\n removeNotification(notification: Notification): void {\n this.removeNotificationById(notification.id);\n }\n\n /** Removes the notification with the given id. */\n removeNotificationById(notificationId: string): void {\n this.notificationsSignal.update((notifications) =>\n notifications.filter((n) => n.id !== notificationId)\n );\n }\n\n /** Removes every visible notification. */\n clearAll(): void {\n this.notificationsSignal.set([]);\n }\n}","import {\n Component,\n input,\n inject,\n ChangeDetectionStrategy,\n computed,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n NotificationService,\n Notification,\n} from './notification.service';\nimport {\n LucideDynamicIcon,\n LucideInfo,\n LucideTriangleAlert,\n} from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\nexport type NotificationPosition = 'center-top' | 'right-top' | 'left-top';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Toast notification host that renders the notifications pushed through the\n * NotificationService in the configured position.\n */\n@Component({\n selector: 'shk-notification',\n templateUrl: './notification.component.html',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NotificationComponent {\n /** Position of the notification stack: center, right or left top. */\n position = input<NotificationPosition>('center-top');\n\n private notificationService = inject(NotificationService);\n protected getIcon = (name: any) => getIconFromCentral(name, LucideInfo);\n\n /** Maps each notification type to its internal icon name. */\n private readonly iconMap: Record<string, string> = {\n success: 'check',\n error: 'circle-x',\n info: 'info',\n warning: 'triangle-alert',\n };\n\n /** Resolves the icon name for a notification type. */\n getNotificationIcon(type: string): string {\n return this.iconMap[type] || 'info';\n }\n\n /** Live list of active notifications. */\n notifications = this.notificationService.notifications;\n\n /** Notifications sorted with the newest first. */\n sortedNotifications = computed(\n () => [...this.notifications()].reverse(),\n );\n\n /** Removes a notification through the service. */\n removeNotification(notification: Notification): void {\n this.notificationService.removeNotification(notification);\n }\n\n /** Rounds the progress value of a notification. */\n roundProgress(progress: number | undefined): number {\n return Math.round(progress || 0);\n }\n\n /** Whether there are notifications to show. */\n hasNotifications = computed(() => this.notifications().length > 0);\n\n /** CSS classes positioning the stack according to `position`. */\n positionClass = computed(() => {\n const base = 'fixed top-4 z-[9999] space-y-4 sm:space-y-6 sm:top-6 lg:top-8';\n switch (this.position()) {\n case 'right-top':\n return `${base} right-4`;\n case 'left-top':\n return `${base} left-4`;\n default:\n return `${base} left-1/2 -translate-x-1/2`;\n }\n });\n}\n","<div [class]=\"positionClass()\">\n @for (notification of sortedNotifications(); track notification.id) {\n <div\n [ngClass]=\"{\n 'bg-green-50/80 dark:bg-green-900/30 border-green-400 dark:border-green-600 text-green-800 dark:text-green-200':\n notification.type === 'success',\n 'bg-red-50/80 dark:bg-red-900/30 border-red-400 dark:border-red-600 text-red-800 dark:text-red-200':\n notification.type === 'error',\n 'bg-blue-50/80 dark:bg-blue-900/30 border-blue-400 dark:border-blue-600 text-blue-800 dark:text-blue-200':\n notification.type === 'info',\n 'bg-yellow-50/80 dark:bg-yellow-900/30 border-yellow-400 dark:border-yellow-500 text-yellow-800 dark:text-yellow-200':\n notification.type === 'warning',\n }\"\n class=\"flex items-center w-full min-w-[320px] max-w-xs sm:max-w-sm lg:max-w-md p-4 mb-4 border-l-4 rounded-lg shadow-lg backdrop-blur-sm transition-all duration-300 transform hover:scale-105 hover:shadow-xl\"\n role=\"alert\"\n >\n <div\n [ngClass]=\"{\n 'text-green-600': notification.type === 'success',\n 'text-red-600': notification.type === 'error',\n 'text-blue-600': notification.type === 'info',\n 'text-yellow-600': notification.type === 'warning',\n }\"\n class=\"inline-flex items-center justify-center flex-shrink-0 w-10 h-10 rounded-lg bg-opacity-10\"\n >\n <svg [lucideIcon]=\"getIcon(getNotificationIcon(notification.type))\" class=\"w-6 h-6\"></svg>\n </div>\n <div class=\"ms-4 flex-1 text-sm font-medium break-words\">\n {{ notification.message }}\n </div>\n <button\n type=\"button\"\n (click)=\"removeNotification(notification)\"\n aria-label=\"Close\"\n [ngClass]=\"{\n 'text-green-600 hover:text-green-800':\n notification.type === 'success',\n 'text-red-600 hover:text-red-800': notification.type === 'error',\n 'text-blue-600 hover:text-blue-800': notification.type === 'info',\n 'text-yellow-600 hover:text-yellow-800':\n notification.type === 'warning',\n }\"\n class=\"mx-2 -my-1.5 bg-transparent focus:outline-none\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n }\n</div>\n","import { Component, forwardRef, input, output, signal, effect } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Switch / checkbox component that implements ControlValueAccessor so it can\n * be used with reactive and template-driven forms.\n */\n@Component({\n selector: 'shk-toggle',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"relative\">\n <label\n class=\"inline-flex items-center gap-3 cursor-pointer select-none\"\n [class.opacity-50]=\"_disabled()\"\n [class.cursor-not-allowed]=\"_disabled()\"\n >\n @if (mode() === 'toggle') {\n <div class=\"relative flex-shrink-0\" (click)=\"toggle()\">\n <div\n class=\"w-10 h-6 rounded-full transition-colors duration-200\"\n [class._shk-bg-primary]=\"_value()\"\n [class._shk-bg-surface-300]=\"!_value()\"\n [class._shk-dark-bg-surface-600]=\"!_value()\"\n ></div>\n <div\n class=\"absolute top-0.5 left-0.5 w-5 h-5 _shk-bg-white rounded-full shadow transition-transform duration-200\"\n [class.translate-x-4]=\"_value()\"\n ></div>\n </div>\n } @else {\n <div\n class=\"flex-shrink-0 w-4 h-4 rounded border-2 transition-colors duration-200 flex items-center justify-center\"\n [class._shk-bg-primary]=\"_value()\"\n [class._shk-border-primary]=\"_value()\"\n [class._shk-border-surface-300]=\"!_value()\"\n [class._shk-dark-border-surface-600]=\"!_value()\"\n (click)=\"toggle()\"\n >\n @if (_value()) {\n <svg class=\"w-3 h-3 text-white\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </div>\n }\n @if (label()) {\n <span class=\"text-sm _shk-text-surface-700 _shk-dark-text-surface-300\">\n {{ label() }}\n </span>\n }\n </label>\n </div>\n `,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true,\n },\n ],\n})\nexport class ToggleComponent implements ControlValueAccessor {\n /** Text displayed next to the control. */\n label = input<string>('');\n /** Visual style: 'toggle' (switch) or 'checkbox'. Defaults to 'toggle'. */\n mode = input<'toggle' | 'checkbox'>('toggle');\n /** Manually controlled checked state (supports one-way binding). */\n checked = input<boolean | undefined>(undefined);\n /** Emitted with the new value when the user toggles the control. */\n checkedChange = output<boolean>();\n\n /** Internal controlled/reactive value. */\n _value = signal(false);\n /** Reactive disabled state. */\n _disabled = signal(false);\n\n /** Callback notified with the new value on change (ControlValueAccessor). */\n private onChange: (value: boolean) => void = () => {};\n\n /** Callback notified when the control loses focus or is touched. */\n private onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n const manual = this.checked();\n if (manual !== undefined) {\n this._value.set(manual);\n }\n });\n }\n\n /** Sets the value from the form control. */\n writeValue(value: any): void {\n this._value.set(!!value);\n }\n\n /** Registers the callback invoked on value changes (ControlValueAccessor). */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** Registers the callback invoked when the control is touched. */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /** Reflects the disabled state of the form control. */\n setDisabledState(isDisabled: boolean): void {\n this._disabled.set(isDisabled);\n }\n\n /**\n * Inverts the current value (unless disabled), notifies the form control,\n * marks the control as touched and emits `checkedChange`.\n */\n toggle(): void {\n if (this._disabled()) return;\n const newValue = !this._value();\n this._value.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.checkedChange.emit(newValue);\n }\n}\n","import { Component, model, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Numeric input tailored for currency values with a optional percentage mode.\n * Uses two-way bindable models: `value` and `isPercentage`.\n */\n@Component({\n selector: 'shk-price-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './price-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PriceInputComponent {\n /** Numeric value, bindable with [(value)]. */\n value = model.required<number>();\n /** Whether the input works as a percentage, bindable with [(isPercentage)]. */\n isPercentage = model<boolean>(false);\n /** Label displayed above the field. */\n label = input<string>('');\n /** id attribute applied to the native input. */\n inputId = input<string>('');\n /** Marks the field as required. */\n required = input<boolean>(false);\n /** Disables the input. */\n disabled = input<boolean>(false);\n /** Minimum allowed value. */\n min = input<number>(0);\n /** Maximum allowed value. */\n max = input<number>(Infinity);\n /** Shows the error styling on the field. */\n showError = input<boolean>(false);\n /** Message rendered when the field is in error state. */\n errorMessage = input<string>('');\n\n /** Toggles between amount and percentage modes (unless disabled). */\n toggleMode(): void {\n if (this.disabled()) return;\n this.isPercentage.update(v => !v);\n }\n\n /** Parses the user input and updates the bound `value`. */\n onInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.value.set(parseFloat(input.value) || 0);\n }\n}\n","<div>\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n @if (required()) {\n <span class=\"text-red-400\">*</span>\n }\n </div>\n }\n <div class=\"flex\">\n <input\n [id]=\"inputId()\"\n type=\"number\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"value.set($event ?? 0)\"\n (input)=\"onInput($event)\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n step=\"0.01\"\n class=\"block w-full px-3 py-2 _shk-text-surface-700 dark:[color:var(--shk-surface-700)] _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-l-lg transition-colors placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-400)] focus:outline-none focus:[background-color:var(--shk-surface-50)] dark:focus:[background-color:var(--shk-surface-100)] focus:ring-1 disabled:[background-color:var(--shk-surface-50)] dark:disabled:[background-color:var(--shk-surface-100)] disabled:cursor-not-allowed sm:text-sm\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': showError(),\n '_shk-border dark:[border-color:var(--shk-surface-200)] focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !showError()\n }\"\n />\n <button\n type=\"button\"\n (click)=\"toggleMode()\"\n [disabled]=\"disabled()\"\n class=\"px-3 py-2 text-sm font-medium border rounded-r-lg transition-colors shrink-0\"\n [ngClass]=\"{\n '_shk-bg-primary-soft _shk-border-primary-200 _shk-text-primary-700 dark:[background-color:var(--shk-primary-900)] dark:[border-color:var(--shk-primary-700)] dark:[color:var(--shk-primary-300)]': isPercentage(),\n '_shk-bg-white _shk-border _shk-text-surface-500 dark:[background-color:var(--shk-surface-100)] dark:[border-color:var(--shk-surface-200)] dark:[color:var(--shk-surface-400)]': !isPercentage(),\n 'cursor-not-allowed opacity-50': disabled()\n }\"\n >\n {{ isPercentage() ? '%' : '$' }}\n </button>\n </div>\n @if (showError()) {\n <div class=\"text-xs _shk-text-red-500 mt-1\">\n {{ errorMessage() }}\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n DestroyRef,\n HostListener,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\n\n/** Which granularity the picker edits: a day, a month or a year. */\nexport type DatePickerView = 'date' | 'month' | 'year';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Date/time picker implemented as a ControlValueAccessor. Supports choosing a\n * day, month or year, optional time selection (with seconds/12-hour format),\n * min/max constraints and locale-aware labels.\n */\n@Component({\n selector: 'shk-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './date-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n private transloco = inject(TranslocoService);\n\n /** HTML id for the input (for label/for pairing). */\n id = input<string>('');\n /** Granularity of the picker ('date' | 'month' | 'year'). */\n view = input<DatePickerView>('date');\n /** Label shown above the input. */\n label = input<string>('');\n /** Placeholder of the input. */\n placeholder = input<string>('');\n /** FormGroup used to resolve the control from `label`. */\n formGroup = input<FormGroup | undefined>(undefined);\n /** Directly bound FormControl. */\n control = input<FormControl | undefined>(undefined);\n /** Disables the picker. */\n disabled = input<boolean>(false);\n /** Custom error message displayed (overrides translated ones). */\n errorMessage = input<string>('');\n /** Per-validation-key custom error messages. */\n errorMessages = input<{ [key: string]: string }>({});\n /** Minimum allowed date (YYYY-MM-DD) or year/month string. */\n minValue = input<string>('');\n /** Maximum allowed date (YYYY-MM-DD) or year/month string. */\n maxValue = input<string>('');\n /** Locale used for month/day names and formatted labels. */\n locale = input<string>('es');\n /** Edits only the time portion of the value. */\n timeOnly = input<boolean>(false);\n /** Shows the time selectors alongside the date. */\n showTime = input<boolean>(false);\n /** Hour format: '12' or '24'. */\n hourFormat = input<'12' | '24'>('24');\n /** Whether the seconds selector is shown. */\n showSeconds = input<boolean>(false);\n /** Step (in minutes) for the minute selector. */\n minuteStep = input<number>(1);\n\n /** Whether the dropdown calendar is open. */\n isOpen = signal(false);\n /** Year currently displayed in the calendar. */\n viewYear = signal(new Date().getFullYear());\n /** Month currently displayed in the calendar (0-based). */\n viewMonth = signal(new Date().getMonth());\n /** Starting year of the decade shown in year view. */\n viewDecade = signal(Math.floor(new Date().getFullYear() / 10) * 10);\n /** Hour selected in the time selectors. */\n viewHour = signal(0);\n /** Minute selected in the time selectors. */\n viewMinute = signal(0);\n /** Second selected in the time selectors. */\n viewSecond = signal(0);\n /** Meridiem selected in 12-hour format. */\n viewMeridiem = signal<'AM' | 'PM'>('AM');\n /** Date part selected but not yet committed until the time is confirmed. */\n private pendingDate = signal<string | null>(null);\n\n /** Underlying value (mirrors the reactive control). */\n private _value = signal<string | null>(null);\n /** Disabled state coming from the reactive form infrastructure. */\n private _disabledState = signal<boolean>(false);\n /** Whether status subscriptions have been attached to the control. */\n private subscribed = signal(false);\n private valueSubscribed = signal(false);\n /** Counter used to recompute the error helpers reactively. */\n private errorTracker = signal(0);\n /** Whether an error was displayed at some point. */\n hadError = signal(false);\n\n /** ControlValueAccessor callbacks. */\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Current value of the picker. */\n value = computed(() => this._value());\n\n /** Whether the picker is disabled (input or reactive form). */\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n /** Resolves the control from `control` input or `formGroup`+`label`. */\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) return fg.get(lbl) as FormControl;\n return undefined;\n });\n\n /** Whether the bound control should show its error message. */\n shouldShowError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n /** Whether an error was fixed (invalid before, now valid and touched). */\n wasFixedError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n /** Validation error messages to display, custom or translated. */\n getErrorMessages = computed(() => {\n this.errorTracker();\n const customError = this.errorMessage();\n if (customError) return [customError];\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((key) => {\n if (customErrors[key]) return customErrors[key];\n switch (key) {\n case 'required':\n return t.translate('validation.required');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n /** Date part displayed in the calendar (pending date or committed value). */\n displayedDate = computed(() => {\n if (this.timeOnly()) return null;\n const value = this.pendingDate();\n if (value) return value;\n const current = this._value();\n if (!current) return null;\n return this.datePartOf(current);\n });\n\n /** Human-readable label for the selected value in the input. */\n displayLabel = computed(() => {\n const value = this._value();\n if (!value) return '';\n\n if (this.timeOnly()) {\n return this.formatTimeFromValue(value);\n }\n\n const datePart = this.datePartOf(value);\n const timePart = value.includes('T') ? value.split('T')[1] : null;\n const v = this.view();\n\n let label: string;\n if (v === 'year') {\n label = datePart;\n } else if (v === 'month') {\n const [y, m] = datePart.split('-').map(Number);\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n });\n label = fmt.format(new Date(y, m - 1, 1));\n label = label.charAt(0).toUpperCase() + label.slice(1);\n } else {\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'long',\n });\n label = fmt.format(new Date(datePart + 'T12:00:00'));\n }\n\n if (this.showTime() && timePart) {\n label += ' ' + this.formatTimeFromValue(timePart);\n }\n return label;\n });\n\n /** Localized short month names for the year view. */\n monthNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n return Array.from({ length: 12 }, (_, i) => {\n const name = fmt.format(new Date(2000, i, 1)).replace('.', '');\n return name.charAt(0).toUpperCase() + name.slice(1);\n });\n });\n\n /** Localized short weekday names for the calendar header. */\n dayNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n return Array.from({ length: 7 }, (_, i) => {\n const name = fmt.format(new Date(2024, 0, i + 1));\n return name.charAt(0).toUpperCase() + name.slice(1, 3);\n });\n });\n\n /** Number of days in the currently viewed month. */\n daysInMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth() + 1, 0).getDate();\n });\n\n /** Weekday index (0=Sunday) of the first day of the viewed month. */\n firstDayOfMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth(), 1).getDay();\n });\n\n /** Calendar grid: nulls for leading blanks then the days of the month. */\n calendarDays = computed(() => {\n const totalDays = this.daysInMonth();\n const firstDay = this.firstDayOfMonth();\n const days: (number | null)[] = [];\n for (let i = 0; i < firstDay; i++) days.push(null);\n for (let i = 1; i <= totalDays; i++) days.push(i);\n return days;\n });\n\n /** Whether the prev navigation button is allowed by `minValue`. */\n canGoPrev = computed(() => {\n const v = this.view();\n const min = this.minValue();\n if (v === 'date') {\n if (!min) return true;\n const prev = new Date(this.viewYear(), this.viewMonth() - 1, 1);\n return prev >= new Date(min + 'T12:00:00');\n }\n if (v === 'month') {\n const minY = min ? Number(min.split('-')[0]) : undefined;\n return minY === undefined || this.viewYear() > minY;\n }\n const minY = min ? Number(min) : undefined;\n return minY === undefined || this.viewYear() > minY;\n });\n\n /** Whether the next navigation button is allowed by `maxValue`. */\n canGoNext = computed(() => {\n const v = this.view();\n const max = this.maxValue();\n if (v === 'date') {\n if (!max) return true;\n const next = new Date(this.viewYear(), this.viewMonth() + 1, 1);\n return next <= new Date(max + 'T12:00:00');\n }\n if (v === 'month') {\n const maxY = max ? Number(max.split('-')[0]) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n }\n const maxY = max ? Number(max) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n });\n\n /** Year of the displayed date, if any. */\n selectedYear = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[0]) : null;\n });\n\n /** Month index (0-based) of the displayed date, if any. */\n selectedMonth = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[1]) - 1 : null;\n });\n\n /** Day of the displayed date, if any (date view only). */\n selectedDay = computed(() => {\n const value = this.displayedDate();\n return value && this.view() === 'date' ? Number(value.split('-')[2]) : null;\n });\n\n /** 12 years of the viewed decade for the year view. */\n decadeYears = computed(() => {\n const start = this.viewDecade();\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n /** (Unused legacy placeholder) plain year list. */\n years: number[] = [];\n\n constructor() {\n // Attach error-state subscriptions to the validated control once found.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n });\n\n this.subscribed.set(true);\n });\n\n // One-way sync from the reactive control to the internal value signal.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n /** Closes the dropdown when clicking outside the component. */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n\n /** Closes the dropdown on Escape. */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.close();\n }\n\n /** Opens/closes the dropdown, syncing the calendar to the current value. */\n toggle(): void {\n if (this.isDisabled()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.syncViewToValue();\n this.isOpen.set(true);\n }\n }\n\n /** Aligns the calendar view signals with the current value (or today). */\n private syncViewToValue(): void {\n const val = this._value();\n const v = this.view();\n if (!val) {\n const now = new Date();\n this.viewYear.set(now.getFullYear());\n this.viewMonth.set(now.getMonth());\n this.viewDecade.set(Math.floor(now.getFullYear() / 10) * 10);\n this.viewHour.set(now.getHours());\n this.viewMinute.set(now.getMinutes());\n this.viewSecond.set(now.getSeconds());\n this.pendingDate.set(this.toISODate(now));\n return;\n }\n const datePart = this.datePartOf(val);\n const timePart = val.includes('T') ? val.split('T')[1] : undefined;\n if (v === 'year') {\n this.viewYear.set(Number(datePart));\n } else if (v === 'month') {\n this.viewYear.set(Number(datePart.split('-')[0]));\n } else {\n const d = new Date(datePart + 'T12:00:00');\n this.viewYear.set(d.getFullYear());\n this.viewMonth.set(d.getMonth());\n }\n const time = timePart ?? (this.timeOnly() ? val : undefined);\n if (time) {\n const [h, m, ss] = time.split(':').map(Number);\n this.viewHour.set(h || 0);\n this.viewMinute.set(m || 0);\n this.viewSecond.set(ss || 0);\n if (this.hourFormat() === '12') {\n this.viewMeridiem.set(h >= 12 ? 'PM' : 'AM');\n }\n }\n this.pendingDate.set(datePart);\n }\n\n /** Closes the dropdown, marks the control as touched and refreshes errors. */\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n const ctrl = this.actualControl();\n if (ctrl) ctrl.markAsTouched();\n this.errorTracker.update((v) => v + 1);\n if (ctrl?.invalid && ctrl?.touched) this.hadError.set(true);\n }\n\n /** Navigates the calendar to the previous year/month/decade. */\n prev(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d - 12);\n this.viewYear.update((y) => y - 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y - 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 0) {\n this.viewYear.update((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }\n }\n\n /** Navigates the calendar to the next year/month/decade. */\n next(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d + 12);\n this.viewYear.update((y) => y + 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y + 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 11) {\n this.viewYear.update((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }\n }\n\n /** Selects a day of the month (pending if time is shown). */\n selectDay(day: number): void {\n const y = this.viewYear();\n const m = String(this.viewMonth() + 1).padStart(2, '0');\n const d = String(day).padStart(2, '0');\n const value = `${y}-${m}-${d}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a month of the year (pending if time is shown). */\n selectMonth(monthIndex: number): void {\n const value = `${this.viewYear()}-${String(monthIndex + 1).padStart(2, '0')}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a year (pending if time is shown). */\n selectYear(year: number): void {\n const value = String(year);\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Commits a value, updates the component, the control and the outputs. */\n private setValue(value: string, close = true): void {\n this._value.set(value);\n this.onChange(value);\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(value);\n ctrl.markAsDirty();\n }\n if (close) this.close();\n }\n\n /** Confirms the selected time and commits the combined date+time value. */\n confirmTime(): void {\n const h = this.viewHour();\n const m = this.viewMinute();\n const s = this.viewSecond();\n let time = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) time += `:${String(s).padStart(2, '0')}`;\n\n if (this.timeOnly()) {\n this.setValue(time);\n return;\n }\n\n const datePart =\n this.pendingDate() ??\n `${this.viewYear()}-${String(this.viewMonth() + 1).padStart(2, '0')}-01`;\n this.setValue(`${datePart}T${time}`);\n }\n\n /** Reads the hour selected in the time selector. */\n onHourChange(event: Event): void {\n this.viewHour.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the minute selected in the time selector. */\n onMinuteChange(event: Event): void {\n this.viewMinute.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the second selected in the time selector. */\n onSecondChange(event: Event): void {\n this.viewSecond.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Current meridiem (\"AM\"/\"PM\") for the 12-hour format. */\n meridiem(): 'AM' | 'PM' {\n return this.viewMeridiem();\n }\n\n /** Reads the meridiem selected in the time selector. */\n onMeridiemChange(event: Event): void {\n this.viewMeridiem.set((event.target as HTMLSelectElement).value as 'AM' | 'PM');\n }\n\n /** Splits the date part from a full ISO \"date\" or \"dateTtime\" value. */\n private datePartOf(value: string): string {\n const i = value.indexOf('T');\n return i >= 0 ? value.slice(0, i) : value;\n }\n\n /** Formats a raw time string (\"HH:mm[:ss]\") using the configured format. */\n private formatTimeFromValue(time: string): string {\n const [h, m, ss] = time.split(':').map(Number);\n return this.formatTime(h || 0, m || 0, ss || 0);\n }\n\n /** Formats hour/minute/second according to hour format and seconds option. */\n private formatTime(h: number, m: number, s: number): string {\n if (this.hourFormat() === '12') {\n const h12 = h % 12 || 12;\n const suffix = h < 12 ? ' AM' : ' PM';\n return `${String(h12).padStart(2, '0')}:${String(m).padStart(2, '0')}${suffix}`;\n }\n let label = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) label += `:${String(s).padStart(2, '0')}`;\n return label;\n }\n\n /** Formats a Date as a YYYY-MM-DD ISO string. */\n private toISODate(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(\n 2,\n '0',\n )}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n /** Whether the given day matches the currently selected date. */\n isSelectedDay(day: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === this.viewMonth() &&\n this.selectedDay() === day\n );\n }\n\n /** Hours available in the time selector ('12' maps to 0..11 or 12..23). */\n hoursRange(): number[] {\n if (this.hourFormat() === '12') {\n const oneToTwelve = Array.from({ length: 12 }, (_, i) => i + 1);\n return this.viewMeridiem() === 'PM'\n ? oneToTwelve.map((h) => (h === 12 ? 12 : h + 12))\n : oneToTwelve.map((h) => (h === 12 ? 0 : h));\n }\n return Array.from({ length: 24 }, (_, i) => i);\n }\n\n /** Minutes available in the time selector, stepped by `minuteStep`. */\n minutesRange(): number[] {\n const step = this.minuteStep();\n return Array.from({ length: Math.ceil(60 / step) }, (_, i) => i * step);\n }\n\n /** Seconds available in the time selector (0..59). */\n secondsRange(): number[] {\n return Array.from({ length: 60 }, (_, i) => i);\n }\n\n /** Formats an hour for display in the selector (12-hour aware). */\n hourDisplay(hour: number): string {\n if (this.hourFormat() === '12') {\n return String(hour % 12 || 12).padStart(2, '0');\n }\n return String(hour).padStart(2, '0');\n }\n\n /** Pads a minute value with a leading zero. */\n minutesLabel(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n /** Whether the given day is today's date. */\n isToday(day: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() &&\n this.viewMonth() === now.getMonth() &&\n day === now.getDate()\n );\n }\n\n /** Whether the given month matches the selected month and year. */\n isSelectedMonth(monthIndex: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === monthIndex\n );\n }\n\n isCurrentMonth(monthIndex: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() && monthIndex === now.getMonth()\n );\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedYear() === year;\n }\n\n isCurrentYear(year: number): boolean {\n return new Date().getFullYear() === year;\n }\n\n writeValue(value: any): void {\n this._value.set(value || null);\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._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n <button\n type=\"button\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n class=\"flex items-center justify-between w-full px-3 py-2 text-left _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors sm:text-sm focus:outline-none focus:ring-1 disabled:cursor-not-allowed disabled:[color:var(--shk-surface-400)] dark:disabled:[color:var(--shk-surface-500)]\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border dark:[border-color:var(--shk-surface-200)] focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError(),\n }\"\n >\n <span\n [ngClass]=\"value() ? '_shk-text-surface-700 dark:[color:var(--shk-surface-700)]' : '_shk-text-surface-400 dark:[color:var(--shk-surface-400)]'\"\n >\n {{ displayLabel() || placeholder() || label() }}\n </span>\n <svg\n class=\"w-4 h-4 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"></rect>\n <path d=\"M16 2v4M8 2v4M3 10h18\"></path>\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"fixed inset-0 z-40 bg-black/30\" (click)=\"close()\"></div>\n <div\n class=\"fixed z-50 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-72 p-4 bg-white dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-lg shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (!timeOnly() && view() === 'date') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ monthNames()[viewMonth()] }} {{ viewYear() }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0 mb-1\">\n @for (name of dayNames(); track $index) {\n <div class=\"text-center text-xs font-medium _shk-text-surface-400 dark:[color:var(--shk-surface-400)] py-1\">\n {{ name }}\n </div>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-0\">\n @for (day of calendarDays(); track $index) {\n @if (day !== null) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"py-1.5 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedDay(day),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isToday(day) && !isSelectedDay(day),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedDay(day) && !isToday(day),\n }\"\n >\n {{ day }}\n </button>\n } @else {\n <div></div>\n }\n }\n </div>\n }\n\n @if (!timeOnly() && view() === 'month') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">{{ viewYear() }}</span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n (click)=\"selectMonth($index)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedMonth($index),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentMonth($index) && !isSelectedMonth($index),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedMonth($index) && !isCurrentMonth($index),\n }\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n\n @if (!timeOnly() && view() === 'year') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ viewDecade() }} - {{ viewDecade() + 11 }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (year of decadeYears(); track year) {\n <button\n type=\"button\"\n (click)=\"selectYear(year)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedYear(year),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentYear(year) && !isSelectedYear(year),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedYear(year) && !isCurrentYear(year),\n }\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n @if (timeOnly() || showTime()) {\n <div class=\"mt-3 pt-3 _shk-border dark:[border-color:var(--shk-surface-200)]\">\n <div class=\"flex items-center justify-center gap-1\">\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewHour()\"\n (change)=\"onHourChange($event)\"\n aria-label=\"Hora\"\n >\n @for (h of hoursRange(); track h) {\n <option [value]=\"h\">{{ hourDisplay(h) }}</option>\n }\n </select>\n <span class=\"_shk-text-surface-400\">:</span>\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewMinute()\"\n (change)=\"onMinuteChange($event)\"\n aria-label=\"Minutos\"\n >\n @for (minutes of minutesRange(); track minutes) {\n <option [value]=\"minutes\">{{ minutesLabel(minutes) }}</option>\n }\n </select>\n @if (showSeconds()) {\n <span class=\"text-sm _shk-text-surface-400\">:</span>\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewSecond()\"\n (change)=\"onSecondChange($event)\"\n aria-label=\"Segundos\"\n >\n @for (seconds of secondsRange(); track seconds) {\n <option [value]=\"seconds\">{{ minutesLabel(seconds) }}</option>\n }\n </select>\n }\n @if (hourFormat() === '12') {\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"meridiem()\"\n (change)=\"onMeridiemChange($event)\"\n aria-label=\"AM/PM\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n }\n </div>\n <button\n type=\"button\"\n (click)=\"confirmTime()\"\n class=\"mt-3 w-full py-2 text-sm _shk-bg-primary _shk-text-white rounded-lg hover:[background-color:var(--shk-primary-700)] transition-colors\"\n >\n {{ timeOnly() ? 'Confirmar' : 'Introducir hora' }}\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","import { Component, ChangeDetectionStrategy, input, output, signal, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon, LucideTriangleAlert } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Confirmation dialog opened via `show()` which resolves a Promise<boolean>\n * with the user's choice.\n */\n@Component({\n selector: 'shk-confirm-dialog',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './confirm-dialog.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmDialogComponent implements OnDestroy {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideTriangleAlert);\n\n /** Title shown in the dialog header. */\n title = input<string>('Confirmar acción');\n /** Message body of the dialog. */\n message = input<string>('¿Está seguro de realizar esta acción?');\n /** Label of the confirm button. */\n confirmLabel = input<string>('Confirmar');\n /** Label of the cancel button. */\n cancelLabel = input<string>('Cancelar');\n /** Text shown on the confirm button while `loading` is true. */\n loadingText = input<string>('Procesando…');\n /** Visual style: 'danger', 'info' or 'warning'. */\n type = input<'danger' | 'info' | 'warning'>('danger');\n /** Shows a spinner and disables the confirm button. */\n loading = input<boolean>(false);\n /** Whether the cancel button is shown. */\n showCancel = input<boolean>(true);\n\n /** Controls dialog visibility. */\n visible = signal<boolean>(false);\n /** Resolver of the currently pending confirmation promise. */\n private resolveRef = signal<((value: boolean) => void) | null>(null);\n\n /** Emitted whenever the dialog is closed (confirm or cancel). */\n closed = output<void>();\n\n /** Opens the dialog and returns a promise resolving with the user choice. */\n show(): Promise<boolean> {\n this.visible.set(true);\n return new Promise((resolve) => {\n this.resolveRef.set(resolve);\n });\n }\n\n /** Resolves with `true` when the user confirms. */\n onConfirm() {\n this.visible.set(false);\n const resolve = this.resolveRef();\n if (resolve) {\n resolve(true);\n this.resolveRef.set(null);\n }\n this.closed.emit();\n }\n\n /** Resolves with `false` when the user cancels. */\n onCancel() {\n this.visible.set(false);\n const resolve = this.resolveRef();\n if (resolve) {\n resolve(false);\n this.resolveRef.set(null);\n }\n this.closed.emit();\n }\n\n /** Clears the pending resolver on destroy. */\n ngOnDestroy() {\n this.resolveRef.set(null);\n }\n}\n","@if (visible()) {\n <div\n class=\"fixed inset-0 bg-black/40 backdrop-blur-sm flex items-center justify-center z-[9999] p-4\"\n (click)=\"onCancel()\"\n >\n <div\n class=\"bg-white dark:[background-color:var(--shk-surface-100)] rounded-2xl shadow-2xl max-w-sm w-full animate-in fade-in zoom-in duration-200 overflow-hidden\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"h-1.5 w-full\"\n [class.bg-gradient-to-r]=\"type() !== 'warning'\"\n [class.from-red-400]=\"type() === 'danger'\"\n [class.to-red-600]=\"type() === 'danger'\"\n [class.from-blue-400]=\"type() === 'info'\"\n [class.to-blue-600]=\"type() === 'info'\"\n [class.bg-amber-400]=\"type() === 'warning'\"\n ></div>\n <div class=\"p-6\">\n <div class=\"flex items-start gap-4 mb-4\">\n <div\n class=\"w-12 h-12 rounded-full flex items-center justify-center shrink-0\"\n [ngClass]=\"{\n 'bg-red-50 dark:bg-red-900/30 text-red-600 dark:text-red-400': type() === 'danger',\n 'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400': type() === 'info',\n 'bg-amber-50 dark:bg-amber-900/30 text-amber-600 dark:text-amber-400': type() === 'warning',\n }\"\n >\n @if (type() === 'info') {\n <svg [lucideIcon]=\"getIcon('info')\" class=\"w-6 h-6\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('triangle-alert')\" class=\"w-6 h-6\"></svg>\n }\n </div>\n <div>\n <h3 class=\"text-lg font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">{{ title() }}</h3>\n <p class=\"_shk-text-surface-500 dark:[color:var(--shk-surface-400)] text-sm leading-relaxed mb-6\">{{ message() }}</p>\n </div>\n </div>\n <div class=\"flex gap-3\">\n @if (showCancel()) {\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n [disabled]=\"loading()\"\n class=\"flex-1 px-4 py-2 text-sm font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-600)] _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] hover:[background-color:var(--shk-surface-200)] dark:hover:[background-color:var(--shk-surface-300)] rounded-lg transition-colors flex items-center justify-center gap-2\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n {{ cancelLabel() }}\n </button>\n }\n <button\n type=\"button\"\n (click)=\"onConfirm()\"\n [disabled]=\"loading()\"\n class=\"flex-1 px-4 py-2 text-sm font-semibold text-white rounded-lg shadow-md transition-all flex items-center justify-center gap-2\"\n [class.bg-red-600]=\"type() === 'danger'\"\n [class.hover:bg-red-700]=\"type() === 'danger'\"\n [class.shadow-red-500/20]=\"type() === 'danger'\"\n [class.bg-primary-600]=\"type() === 'info'\"\n [class.hover:bg-primary-700]=\"type() === 'info'\"\n [class.shadow-primary-500/20]=\"type() === 'info'\"\n [class.bg-amber-600]=\"type() === 'warning'\"\n [class.hover:bg-amber-700]=\"type() === 'warning'\"\n [class.shadow-amber-500/20]=\"type() === 'warning'\"\n >\n @if (loading()) {\n <svg [lucideIcon]=\"getIcon('loader')\" class=\"w-4 h-4 animate-spin\"></svg>\n } @else if (type() === 'danger') {\n <svg [lucideIcon]=\"getIcon('trash-2')\" class=\"w-4 h-4\"></svg>\n }\n {{ loading() ? loadingText() : confirmLabel() }}\n </button>\n </div>\n </div>\n </div>\n </div>\n}\n","import {\n Injectable,\n ComponentRef,\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n DestroyRef,\n inject,\n} from '@angular/core';\nimport { ConfirmDialogComponent } from './confirm-dialog.component';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Options for opening a confirmation dialog. */\nexport interface ConfirmConfig {\n title?: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n loadingText?: string;\n type?: 'danger' | 'info' | 'warning';\n showCancel?: boolean;\n loading?: boolean;\n}\n\n/**\n * Programmatically opens the confirmation dialog and resolves a Promise\n * with the user's decision (true = confirm, false = cancel).\n */\n@Injectable({ providedIn: 'root' })\nexport class ConfirmDialogService {\n /** Reference to the currently open dialog, if any. */\n private dialogRef: ComponentRef<ConfirmDialogComponent> | null = null;\n\n private destroyRef = inject(DestroyRef);\n private appRef = inject(ApplicationRef);\n private injector = inject(EnvironmentInjector);\n\n constructor() {\n this.destroyRef.onDestroy(() => this.cleanupDialog());\n }\n\n /**\n * Opens a confirmation dialog with the given configuration and returns a\n * promise resolving with the user's choice.\n */\n async confirm(config: ConfirmConfig): Promise<boolean> {\n if (this.dialogRef) this.cleanupDialog();\n\n this.dialogRef = createComponent(ConfirmDialogComponent, {\n environmentInjector: this.injector,\n });\n\n this.dialogRef.setInput('title', config.title ?? 'Confirmar acción');\n this.dialogRef.setInput('message', config.message);\n this.dialogRef.setInput('confirmLabel', config.confirmLabel ?? 'Confirmar');\n this.dialogRef.setInput('cancelLabel', config.cancelLabel ?? 'Cancelar');\n this.dialogRef.setInput('loadingText', config.loadingText ?? 'Procesando…');\n this.dialogRef.setInput('type', config.type ?? 'danger');\n this.dialogRef.setInput('showCancel', config.showCancel ?? true);\n this.dialogRef.setInput('loading', config.loading ?? false);\n\n document.body.appendChild(this.dialogRef.location.nativeElement);\n this.appRef.attachView(this.dialogRef.hostView);\n try {\n return await this.dialogRef.instance.show();\n } finally {\n this.cleanupDialog();\n }\n }\n\n /** Detaches and destroys the mounted dialog if present. */\n private cleanupDialog(): void {\n if (this.dialogRef) {\n this.appRef.detachView(this.dialogRef.hostView);\n this.dialogRef.destroy();\n this.dialogRef = null;\n }\n }\n}","import { Injectable, Type, signal, computed, inject, DestroyRef } from '@angular/core';\nimport { Router } from '@angular/router';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Options for opening a modal through the service. */\nexport interface ModalConfig {\n /** Title shown in the modal header. */\n title: string;\n /** Component rendered inside the modal body. */\n component: Type<any>;\n /** Data passed to the modal component via inputs. */\n data?: Record<string, any>;\n /** Modal width (CSS value). */\n width?: string;\n /** Whether the accept/cancel buttons are shown. */\n showButtons?: boolean;\n /** Whether the expand (fullscreen) button is shown. */\n showExpandButton?: boolean;\n /** Label of the accept button. */\n acceptLabel?: string;\n /** Label of the cancel button. */\n cancelLabel?: string;\n /** Optional callback invoked when the modal closes. */\n onClose?: () => void;\n}\n\n/**\n * Global modal manager. Opens modals on a stack, exposing reactive access to\n * the current modal and the top-most opened config.\n */\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n /** Stack of open modals (top-most renders on top). */\n private stackSignal = signal<ModalConfig[]>([]);\n /** Counter emitted on each close, used to trigger close animations. */\n private closeRequestSignal = signal<number>(0);\n private router = inject(Router);\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n // Close all modals on navigation and on service destruction.\n this.router.events.subscribe(() => {\n this.stackSignal.set([]);\n });\n this.destroyRef.onDestroy(() => this.stackSignal.set([]));\n }\n\n /** Reactive list of open modals. */\n modalStack = computed(() => this.stackSignal());\n /** Top-most modal on the stack, or null. */\n currentModal = computed<ModalConfig | null>(() => {\n const stack = this.stackSignal();\n return stack.length > 0 ? stack[stack.length - 1] : null;\n });\n /** Reactive close-request counter. */\n closeRequest = computed(() => this.closeRequestSignal());\n\n /** Opens a new modal on top of the stack. */\n open(config: ModalConfig) {\n this.stackSignal.update((stack) => [...stack, config]);\n }\n\n /** Alias of `close()` used by the accept button. */\n accept() {\n this.close();\n }\n\n /** Closes the top-most modal, invoking its onClose callback. */\n close() {\n const stack = this.stackSignal();\n if (stack.length > 0) {\n stack[stack.length - 1]?.onClose?.();\n this.stackSignal.set(stack.slice(0, -1));\n this.closeRequestSignal.update((v) => v + 1);\n }\n }\n\n /** Closes all open modals at once. */\n clear() {\n this.stackSignal.set([]);\n }\n}","import {\n Component,\n viewChild,\n ViewContainerRef,\n ComponentRef,\n inject,\n effect,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n signal,\n DestroyRef,\n computed,\n untracked,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucideX,\n} from '@lucide/angular';\nimport { Subscription } from 'rxjs';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { ModalService, ModalConfig } from './modal.service';\nimport { NotificationService } from '../notification/notification.service';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Modal dialog that renders a dynamically loaded component, tracks its\n * form validity and submit outputs, and delegates accept/cancel to the\n * shared ModalService.\n */\n@Component({\n selector: 'shk-modal',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideX);\n\n private notificationSrv = inject(NotificationService);\n private destroyRef = inject(DestroyRef);\n private modalSrv = inject(ModalService);\n private transloco = inject(TranslocoService);\n private cdr = inject(ChangeDetectorRef);\n\n /** Reference where the dynamic content is rendered. */\n container = viewChild('dynamicContent', { read: ViewContainerRef });\n\n /** Configuration of the modal currently open (from the service). */\n currentConfig = signal<ModalConfig | null>(null);\n /** Modal title. */\n title = signal('');\n /** Whether the modal is visible. */\n visible = signal(false);\n /** Generic loading flag for the footer actions. */\n loading = signal(false);\n /** Whether the accept action is being processed. */\n isProcessing = signal(false);\n /** Whether the modal is currently expanded to fullscreen. */\n isExpanded = signal(false);\n /** True when the dynamic component reports a valid form. */\n isFormValid = signal(false);\n\n /** Reference to the dynamically created component. */\n componentRef: ComponentRef<any> | null = null;\n /** Subscriptions to the dynamic component outputs. */\n private subscriptions: Subscription[] = [];\n\n /** Width of the modal (fullscreen when expanded). */\n computedModalWidth = computed(() => {\n return this.isExpanded() ? '100vw' : (this.currentConfig()?.width ?? '560px');\n });\n\n /** Whether the footer buttons should be rendered. */\n modalButtonsVisible = computed(() => this.currentConfig()?.showButtons ?? true);\n /** Whether the expand/fullscreen button is shown. */\n showExpandButton = computed(() => this.currentConfig()?.showExpandButton ?? false);\n /** Resolved cancel button label. */\n cancelLabel = computed(() => this.currentConfig()?.cancelLabel || 'Cancelar');\n /** Resolved accept button label. */\n acceptLabel = computed(() => this.currentConfig()?.acceptLabel || 'Aceptar');\n\n constructor() {\n effect(() => {\n const config = this.modalSrv.currentModal();\n if (config) {\n this.currentConfig.set(config);\n this.title.set(config.title);\n this.isExpanded.set(false);\n this.visible.set(true);\n this.isProcessing.set(false);\n this.loading.set(false);\n this.cdr.markForCheck();\n setTimeout(() => {\n untracked(() => this.loadComponent(config));\n });\n } else {\n this.visible.set(false);\n this.currentConfig.set(null);\n this.cdr.markForCheck();\n }\n });\n\n this.destroyRef.onDestroy(() => this.cleanup());\n }\n\n /** Updates visibility when the backdrop/close controls change. */\n onVisibleChange(show: boolean) {\n this.visible.set(show);\n if (!show) {\n this.closeModal();\n }\n this.cdr.markForCheck();\n }\n\n /** Creates the dynamic component and wires its form/submit outputs. */\n private loadComponent(config: ModalConfig) {\n const containerRef = this.container();\n if (!containerRef) return;\n\n this.cleanup();\n containerRef.clear();\n\n this.componentRef = containerRef.createComponent(config.component);\n\n if (config.data) {\n Object.entries(config.data).forEach(([key, value]) => {\n this.componentRef?.setInput(key, value);\n });\n }\n\n const instance = this.componentRef.instance;\n\n this.subscribeToOutput(instance.formValid, (valid: boolean) => {\n this.isFormValid.set(valid);\n this.cdr.markForCheck();\n });\n this.subscribeToOutput(instance.submitSuccess, () =>\n this.handleSubmit(true),\n );\n this.subscribeToOutput(instance.submitError, () =>\n this.handleSubmit(false),\n );\n\n this.componentRef.changeDetectorRef.markForCheck();\n this.cdr.markForCheck();\n }\n\n /** Subscribes to a dynamic component output if it exists. */\n private subscribeToOutput(output: any, callback: (value: any) => void) {\n if (output?.subscribe) {\n this.subscriptions.push(output.subscribe(callback));\n }\n }\n\n /** Finalizes the submit flow, accepting the modal on success. */\n private handleSubmit(success: boolean) {\n this.isProcessing.set(false);\n this.loading.set(false);\n this.cdr.markForCheck();\n if (success) {\n untracked(() => this.modalSrv.accept());\n }\n }\n\n /** Closes the modal, calling the dynamic component's `handleCancel` if any. */\n closeModal() {\n if (this.componentRef?.instance?.handleCancel) {\n this.componentRef.instance.handleCancel();\n }\n this.doClose();\n }\n\n /** Performs the actual close sequence and cleanup. */\n doClose() {\n this.visible.set(false);\n this.isProcessing.set(false);\n this.loading.set(false);\n if (this.isExpanded()) {\n this.isExpanded.set(false);\n }\n this.cdr.markForCheck();\n setTimeout(() => {\n this.cleanup();\n this.modalSrv.close();\n }, 100);\n }\n\n /** Toggles between normal width and fullscreen. */\n toggleExpand() {\n this.isExpanded.update((v) => !v);\n this.cdr.markForCheck();\n }\n\n /** Validates the dynamic component form and triggers its `onSubmit`. */\n onAccept() {\n if (!this.componentRef || !this.isDynamicComponent(this.componentRef.instance)) return;\n\n if (this.isProcessing()) return;\n\n const instance = this.componentRef.instance;\n const form = this.getForm(instance);\n\n if (form) {\n this.markAllAsTouched(form);\n this.componentRef.changeDetectorRef.markForCheck();\n this.cdr.markForCheck();\n\n if (this.hasRealErrors(form)) {\n this.notificationSrv.addNotification(\n this.transloco.translate('modal.formInvalid'),\n 'warning',\n );\n return;\n }\n }\n\n this.isProcessing.set(true);\n this.loading.set(true);\n this.cdr.markForCheck();\n instance.onSubmit();\n }\n\n /** Resolves the dynamic component's form (property or getter function). */\n private getForm(instance: any): FormGroup | null {\n if (!instance['form']) return null;\n return typeof instance['form'] === 'function'\n ? instance['form']()\n : instance['form'];\n }\n\n /** Recursively checks for real validation errors (ignoring 'warning'). */\n private hasRealErrors(control: FormGroup | FormControl): boolean {\n if (control instanceof FormControl) {\n const errors = control.errors;\n return errors\n ? Object.keys(errors).some((key) => key !== 'warning')\n : false;\n }\n\n const groupErrors = control.errors;\n if (\n groupErrors &&\n Object.keys(groupErrors).some((key) => key !== 'warning')\n ) {\n return true;\n }\n\n return Object.values(control.controls).some((child) =>\n this.hasRealErrors(child as any),\n );\n }\n\n /** Marks a form (and all its descendants) as touched. */\n private markAllAsTouched(control: FormGroup | FormControl): void {\n control.markAsTouched();\n control.updateValueAndValidity({ onlySelf: true, emitEvent: true });\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((child) =>\n this.markAllAsTouched(child as any),\n );\n }\n }\n\n /** True when the component exposes both `onSubmit` and a `form`. */\n private isDynamicComponent(instance: any): boolean {\n return typeof instance?.onSubmit === 'function' && instance?.form !== undefined;\n }\n\n /** Unsubscribes outputs and destroys the dynamic component. */\n private cleanup() {\n this.subscriptions.forEach((sub) => sub.unsubscribe());\n this.subscriptions = [];\n\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n}\n","@if (visible()) {\n <div\n class=\"fixed inset-0 bg-black/40 backdrop-blur-sm flex items-center justify-center z-40 p-4 pt-4 overflow-y-auto _shk-scrollbar\"\n (click)=\"closeModal()\"\n >\n <div\n class=\"bg-white dark:[background-color:var(--shk-surface-100)] rounded-xl shadow-2xl overflow-hidden flex flex-col animate-in fade-in zoom-in duration-200\"\n [class.w-[95vw]]=\"isExpanded()\"\n [class.h-[90vh]]=\"isExpanded()\"\n [class.w-full]=\"!isExpanded()\"\n [style.max-width]=\"isExpanded() ? undefined : computedModalWidth()\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"h-1.5 w-full _shk-gradient-emerald shrink-0\"></div>\n\n <div class=\"flex items-center justify-between px-6 pt-4 pb-2 shrink-0\">\n <span class=\"font-semibold text-lg _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">{{ title() }}</span>\n <div class=\"flex items-center gap-2\">\n @if (showExpandButton()) {\n <button\n type=\"button\"\n (click)=\"toggleExpand()\"\n class=\"p-1.5 rounded-lg hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] _shk-text-surface-500 dark:[color:var(--shk-surface-500)] transition-colors\"\n >\n @if (isExpanded()) {\n <svg [lucideIcon]=\"getIcon('minimize-2')\" class=\"w-4 h-4\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('maximize-2')\" class=\"w-4 h-4\"></svg>\n }\n </button>\n }\n <button\n type=\"button\"\n (click)=\"closeModal()\"\n class=\"p-1.5 rounded-lg hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] _shk-text-surface-500 dark:[color:var(--shk-surface-500)] transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n </div>\n\n <div class=\"overflow-y-auto px-6 py-4 flex-1 max-h-[70vh] _shk-scrollbar\">\n <ng-container #dynamicContent></ng-container>\n </div>\n\n @if (modalButtonsVisible()) {\n <hr class=\"border-t _shk-border dark:[border-color:var(--shk-surface-200)] shrink-0\" />\n <div class=\"flex justify-end gap-3 px-6 py-4 shrink-0\">\n <button\n type=\"button\"\n (click)=\"closeModal()\"\n [disabled]=\"loading()\"\n class=\"px-4 py-2 text-sm font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-600)] _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] hover:[background-color:var(--shk-surface-200)] dark:hover:[background-color:var(--shk-surface-300)] rounded-lg transition-colors flex items-center gap-2 disabled:opacity-50\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-4 h-4\"></svg>\n {{ cancelLabel() }}\n </button>\n <button\n type=\"button\"\n (click)=\"onAccept()\"\n [disabled]=\"loading()\"\n class=\"px-4 py-2 text-sm font-semibold _shk-text-white _shk-bg-emerald hover:[background-color:var(--shk-emerald-700)] rounded-lg shadow-md transition-all flex items-center gap-2 disabled:opacity-50\"\n >\n @if (loading()) {\n <svg [lucideIcon]=\"getIcon('loader-circle')\" class=\"w-4 h-4 animate-spin\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('check')\" class=\"w-4 h-4\"></svg>\n }\n {{ acceptLabel() }}\n </button>\n </div>\n }\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n input,\n output,\n viewChild,\n forwardRef,\n signal,\n computed,\n effect,\n HostListener,\n ElementRef,\n ChangeDetectionStrategy,\n inject,\n DestroyRef,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\nimport { LucideDynamicIcon, LucideChevronDown } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/** Option rendered by the select, optionally prefixed with a \"new entry\" badge. */\nexport interface SelectOption {\n label: string;\n value: any;\n custom?: boolean;\n}\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Custom select that works as a ControlValueAccessor: single/multiple\n * selection, searchable, keyboard navigation, pagination, custom entries and\n * reactive-form integration.\n */\n@Component({\n selector: 'shk-select',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n TranslocoModule,\n LucideDynamicIcon,\n ],\n templateUrl: './select.component.html',\n styles: [`\n .select-option-active {\n background-color: var(--shk-primary-50);\n outline: 2px solid var(--shk-primary-500);\n outline-offset: -2px;\n color: var(--shk-primary-700);\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectComponent),\n multi: true,\n },\n ],\n})\nexport class SelectComponent implements ControlValueAccessor {\n /** Resolves icon names to lucide components, falling back to a chevron. */\n protected getIcon = (name: any) => getIconFromCentral(name, LucideChevronDown);\n\n /** Available options. */\n options = input<SelectOption[]>([]);\n /** Enables multi-select mode. */\n multiple = input<boolean>(false);\n /** Restricts multi-selection to the given value combinations. */\n validCombinations = input<string[][] | undefined>(undefined);\n /** Placeholder shown when there is no selection. */\n placeholder = input<string>('Seleccionar...');\n /** Label used to bind the control inside a `formGroup`. */\n label = input<string | undefined>(undefined);\n /** Shows a loading state while options are being fetched. */\n isLoading = input<boolean>(false);\n /** Marks that all options have been loaded (used with pagination + search). */\n isAllDataLoaded = input<boolean>(false);\n /** Allows creating new entries from the typed search term. */\n allowCustomEntries = input<boolean>(false);\n /** Parent form group to resolve the control from `label`. */\n formGroup = input<FormGroup | undefined>(undefined);\n /** Enables the search input inside the dropdown. */\n isSearchable = input<boolean>(false);\n /** Number of options loaded per page when pagination is enabled. */\n itemsPerPage = input<number>(10);\n /** FormControl bound externally (used instead of `formGroup`/`label`). */\n control = input<FormControl | undefined>(undefined);\n /** Paginates the option list instead of rendering it all at once. */\n usePagination = input<boolean>(false);\n /** Disables the whole select. */\n disabled = input<boolean>(false);\n /** Custom per-validation-error messages shown under the select. */\n errorMessages = input<{ [key: string]: string }>({\n required: 'Este campo es requerido',\n });\n /** Keeps the search term when options reload. */\n preserveSearchOnLoad = input<boolean>(false);\n /** Translation key of the \"no records\" empty message. */\n emptyMessageKey = input<string>('common.no_records');\n /** Opens the dropdown above the trigger instead of below. */\n dropdownUpward = input<boolean>(false);\n /** Shows the \"no selection\" option in single-select mode. */\n showEmptyOption = input<boolean>(true);\n\n /** Emits when the selection changes (new value or array in multiple mode). */\n selectionChange = output<any>();\n /** Emits the debounced search term while typing. */\n search = output<string>();\n\n /** Reference to the filter input inside the dropdown (when searchable). */\n filterInput = viewChild<ElementRef>('filterInput');\n /** Reference to the select container element. */\n private selectContainer = viewChild<ElementRef>('selectContainer');\n /** Reference to the trigger button. */\n private selectTrigger = viewChild<ElementRef>('selectTrigger');\n /** Reference to the dropdown list container. */\n private dropdownContainer = viewChild<ElementRef>('dropdownContainer');\n\n /** Underlying selection value (mirrors the reactive control). */\n private _value = signal<any>(null);\n /** Whether the dropdown is open. */\n isOpen = signal<boolean>(false);\n /** Index of the currently focused option for keyboard navigation. */\n focusedIndex = signal<number>(-1);\n /** Current search term (searchable mode). */\n searchTerm = signal<string>('');\n /** Current page of the paginated dropdown. */\n currentPage = signal<number>(1);\n /** Tracks whether the user typed in the search input. */\n private searchTermChanged = signal<boolean>(false);\n /** Internal disabled state from the reactive form (setDisabledState). */\n private _isDisabled = signal<boolean>(false);\n\n /** Debounce timer handle for the search output. */\n private debounceTimer: any = null;\n\n /** Error-state counter used to recompute error helpers reactively. */\n private errorTracker = signal<number>(0);\n /** Whether an error has been shown at some point (for \"fixed\" messaging). */\n hadError = signal<boolean>(false);\n /** Whether control status/value subscriptions have been attached. */\n private subscribed = signal<boolean>(false);\n private valueSubscribed = signal<boolean>(false);\n\n /** Current selection value. */\n value = computed(() => this._value());\n\n /** True when the select is disabled via input or by the reactive form. */\n isDisabled = computed(() => this.disabled() || this._isDisabled());\n\n /** Resolves the form control from `control` or from `formGroup`+`label`. */\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) {\n return fg.get(lbl) as FormControl;\n }\n return undefined;\n });\n\n /** Whether the bound control should display its error (invalid + touched/dirty). */\n shouldShowError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n /** Whether an error was shown before and the control is now valid + touched. */\n wasFixedError = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n /** Text shown in the trigger: the selected label(s) or the placeholder. */\n displayValue = computed(() => {\n const val = this._value();\n const opts = this.options();\n const isMultiple = this.multiple();\n const ph = this.placeholder();\n\n if (!val || (Array.isArray(val) && val.length === 0)) {\n return ph;\n }\n\n if (isMultiple) {\n const values = Array.isArray(val) ? val : [];\n const selectedLabels = opts\n .filter((option) => values.includes(option.value))\n .map((option) => option.label);\n\n if (selectedLabels.length === 0) {\n return values.toString();\n }\n return selectedLabels.join(', ');\n }\n\n const selectedOption = opts.find((opt) => opt.value === val);\n return selectedOption ? selectedOption.label : val;\n });\n\n /** List of validation error messages for the bound control. */\n getErrorMessages = computed(() => {\n this.errorTracker();\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((errorKey) => {\n if (customErrors[errorKey]) return customErrors[errorKey];\n\n switch (errorKey) {\n case 'required':\n return t.translate('validation.required');\n case 'email':\n return t.translate('validation.email');\n case 'minlength':\n return t.translate('validation.minlength', {\n min: ctrl.errors!['minlength'].requiredLength,\n });\n case 'maxlength':\n return t.translate('validation.maxlength', {\n max: ctrl.errors!['maxlength'].requiredLength,\n });\n case 'pattern':\n return t.translate('validation.pattern');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n /** Options filtered by the search term (matches first, then contains). */\n filteredOptions = computed(() => {\n const opts = this.options();\n const term = this.searchTerm();\n\n if (!term) return opts;\n\n const normalizedSearchTerm = this.normalizeText(term);\n\n const matched = opts.filter((option) =>\n this.normalizeText(option.label).includes(normalizedSearchTerm),\n );\n\n return matched.sort((a, b) => {\n const aLbl = this.normalizeText(a.label);\n const bLbl = this.normalizeText(b.label);\n\n const aStarts = aLbl.startsWith(normalizedSearchTerm);\n const bStarts = bLbl.startsWith(normalizedSearchTerm);\n\n if (aStarts && !bStarts) return -1;\n if (!aStarts && bStarts) return 1;\n return 0;\n });\n });\n\n /** Options for the current page, with a synthetic custom entry when allowed. */\n paginatedOptions = computed(() => {\n let filtered = this.filteredOptions();\n const term = this.searchTerm();\n const allowCustom = this.allowCustomEntries();\n\n if (allowCustom && term && !filtered.some((o) => o.value === term)) {\n filtered = [\n {\n label: `${term} (nuevo)`,\n value: term,\n custom: true,\n },\n ...filtered,\n ];\n }\n\n if (!this.usePagination()) {\n return filtered;\n }\n\n const page = this.currentPage();\n const perPage = this.itemsPerPage();\n const startIndex = (page - 1) * perPage;\n const endIndex = startIndex + perPage;\n return filtered.slice(startIndex, endIndex);\n });\n\n /** Non-custom options, including the empty option in single-select mode. */\n regularOptions = computed(() => {\n const opts = this.paginatedOptions().filter((option) => !option.custom);\n\n if (!this.multiple() && this.showEmptyOption()) {\n return [{ label: '- Sin selección -', value: null } as SelectOption, ...opts];\n }\n\n return opts;\n });\n\n /** Total pages of the filtered option list (1 when pagination is off). */\n totalPages = computed(() => {\n if (!this.usePagination()) {\n return 1;\n }\n\n const filtered = this.filteredOptions();\n const perPage = this.itemsPerPage();\n return Math.ceil(filtered.length / perPage);\n });\n\n /** Whether there is at least one selected value. */\n hasSelectedValues = computed(() => {\n const val = this._value();\n if (this.multiple()) {\n return val && val.length > 0;\n }\n return !!val;\n });\n\n /** Whether the custom optional entry should be offered for the current term. */\n showCustomOption = computed(() => {\n const term = this.searchTerm();\n const opts = this.options();\n return (\n this.allowCustomEntries() &&\n term !== '' &&\n !opts.some((o) => o.value === term)\n );\n });\n\n private transloco = inject(TranslocoService);\n /** ControlValueAccessor onChange callback. */\n private onChange = (_: any) => {};\n /** ControlValueAccessor onTouched callback. */\n private onTouched = () => {};\n private destroyRef = inject(DestroyRef);\n\n constructor(private elementRef: ElementRef) {\n // Debounced search emission whenever the term changes (searchable mode).\n effect(() => {\n const term = this.searchTerm();\n\n if (term !== '' && this.isSearchable()) {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n this.debounceTimer = setTimeout(() => {\n this.search.emit(term);\n }, 300);\n }\n });\n\n // Normalizes the value to arrays in multiple mode when empty.\n effect(() => {\n const isMultiple = this.multiple();\n if (this._value() === null || this._value() === undefined) {\n this._value.set(isMultiple ? [] : null);\n }\n });\n\n // Resets to the first page when options reload, clearing the search\n // term unless it must be preserved.\n effect(() => {\n this.options();\n this.currentPage.set(1);\n\n if (!this.preserveSearchOnLoad() || !this.searchTermChanged()) {\n this.searchTerm.set('');\n }\n });\n\n // Subscribes to the bound control status/value changes to track errors.\n effect(() => {\n const ctrl = this.actualControl();\n\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl.invalid && ctrl.touched) {\n this.hadError.set(true);\n }\n });\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n this.subscribed.set(true);\n });\n\n // Forces error recomputation when the active translation changes.\n this.transloco.langChanges$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n });\n\n // One-way sync from the reactive control to the internal value signal.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n /** Sets the disabled state coming from the reactive form infrastructure. */\n setDisabledState(isDisabled: boolean): void {\n this._isDisabled.set(isDisabled);\n }\n\n /** Marks the control as touched and updates validity and error state. */\n private markAsTouchedAndUpdate(): void {\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.markAsTouched();\n ctrl.updateValueAndValidity({ emitEvent: false });\n }\n\n this.onTouched();\n this.errorTracker.update((v) => v + 1);\n\n if (ctrl?.invalid) {\n this.hadError.set(true);\n }\n }\n\n /** Strips accents and lowercases text for accent-insensitive matching. */\n normalizeText(text: string): string {\n return text\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n /** Keyboard handler for the trigger element (open/close/navigate/select). */\n onKeydown(event: KeyboardEvent) {\n if (this.isDisabled()) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (this.isOpen()) {\n if (this.focusedIndex() >= 0) {\n const options = this.regularOptions();\n const selectedOption = options[this.focusedIndex()];\n if (selectedOption && !this.isOptionDisabled(selectedOption)) {\n this.selectOption(selectedOption);\n }\n }\n } else {\n this.toggleDropdown();\n }\n break;\n case 'Escape':\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) {\n this.toggleDropdown();\n } else {\n this.moveFocus(1);\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) {\n this.moveFocus(-1);\n }\n break;\n case 'Tab':\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n }\n break;\n }\n }\n\n /** Keyboard handler for the search input inside a searchable dropdown. */\n handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n event.stopPropagation();\n if (this.focusedIndex() >= 0) {\n const options = this.regularOptions();\n const option = options[this.focusedIndex()];\n if (option && !this.isOptionDisabled(option)) {\n this.selectOption(option);\n }\n } else {\n const filtered = this.filteredOptions();\n if (filtered.length > 0) {\n this.selectOption(filtered[0]);\n }\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n event.stopPropagation();\n this.moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n event.stopPropagation();\n this.moveFocus(-1);\n break;\n case 'Escape':\n event.stopPropagation();\n event.preventDefault();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n break;\n }\n }\n\n /** Moves the focused option index by `direction`, skipping disabled ones. */\n private moveFocus(direction: number) {\n const options = this.regularOptions();\n if (!options.length) return;\n\n let newIndex = this.focusedIndex();\n do {\n newIndex = newIndex + direction;\n if (newIndex < 0) newIndex = options.length - 1;\n if (newIndex >= options.length) newIndex = 0;\n } while (this.isOptionDisabled(options[newIndex]) && options.length > 1);\n\n this.focusedIndex.set(newIndex);\n\n setTimeout(() => {\n const container = this.dropdownContainer()?.nativeElement;\n const activeItem = container?.querySelector('.select-option-active');\n if (activeItem && container) {\n const itemTop = activeItem.offsetTop;\n const itemBottom = itemTop + activeItem.offsetHeight;\n const containerScrollTop = container.scrollTop;\n const containerHeight = container.clientHeight;\n\n if (itemTop < containerScrollTop) {\n container.scrollTop = itemTop;\n } else if (itemBottom > containerScrollTop + containerHeight) {\n container.scrollTop = itemBottom - containerHeight;\n }\n }\n });\n }\n\n /** Index of the currently selected option, or -1. */\n private getSelectedIndex(): number {\n const currentVal = this._value();\n const options = this.regularOptions();\n if (currentVal === null || currentVal === undefined) return -1;\n const index = options.findIndex((opt) => opt.value === currentVal);\n return index >= 0 ? index : -1;\n }\n\n /** Whether an option is disabled based on the valid combinations rule. */\n isOptionDisabled(option: SelectOption): boolean {\n if (option.value === null) return false;\n\n const validCombos = this.validCombinations();\n if (!validCombos || !this.multiple()) {\n return false;\n }\n\n const currentSelection = Array.isArray(this._value()) ? this._value() : [];\n\n if (currentSelection.length === 0) {\n return false;\n }\n\n if (currentSelection.includes(option.value)) {\n return false;\n }\n\n const hypotheticalSelection = [...currentSelection, option.value];\n\n return !validCombos.some((combination) => {\n const allSelected = hypotheticalSelection.every((selected) =>\n combination.includes(selected),\n );\n const withinLimit = hypotheticalSelection.length <= combination.length;\n return allSelected && withinLimit;\n });\n }\n\n /** Whether an option is currently selected. */\n isSelected(option: SelectOption): boolean {\n const val = this._value();\n if (this.multiple()) {\n return Array.isArray(val) && val.includes(option.value);\n }\n return val === option.value;\n }\n\n /** Goes to the next options page when possible. */\n nextPage() {\n const total = this.totalPages();\n const current = this.currentPage();\n if (current < total) {\n this.currentPage.set(current + 1);\n }\n }\n\n /** Goes to the previous options page when possible. */\n previousPage() {\n const current = this.currentPage();\n if (current > 1) {\n this.currentPage.set(current - 1);\n }\n }\n\n /** Closes the dropdown when a click happens outside the component. */\n @HostListener('document:mousedown', ['$event'])\n onClickOutside(event: MouseEvent): void {\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\n if (!clickedInside && this.isOpen()) {\n this.markAsTouchedAndUpdate();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n }\n }\n\n /** Selects a typed free-text value as a new custom entry. */\n onCustomOptionClick() {\n const term = this.searchTerm();\n const customOption: SelectOption = {\n label: term,\n value: term,\n };\n\n this._value.set(customOption.value);\n this.onChange(customOption.value);\n this.selectionChange.emit(customOption.value);\n this.isOpen.set(false);\n this.searchTerm.set('');\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(customOption.value);\n }\n\n this.markAsTouchedAndUpdate();\n }\n\n /** Handles typing in the search input (updates term and emits search). */\n onInputChange(event: Event) {\n const previousSearch = this.searchTerm();\n const target = event.target as HTMLInputElement;\n this.searchTerm.set(target.value);\n this.searchTermChanged.set(true);\n\n if (previousSearch !== this.searchTerm()) {\n this.search.emit(this.searchTerm());\n\n if (this.allowCustomEntries() && this.searchTerm()) {\n this._value.set(this.searchTerm());\n this.onChange(this.searchTerm());\n this.selectionChange.emit(this.searchTerm());\n }\n }\n\n this.currentPage.set(1);\n }\n\n /** Selects or toggles the clicked option (custom entries included). */\n onOptionClick(option: SelectOption) {\n if (this.isDisabled()) return;\n\n if (this.allowCustomEntries() && option.value === this.searchTerm()) {\n const customOption: SelectOption = {\n label: this.searchTerm(),\n value: this.searchTerm(),\n };\n\n this._value.set(customOption.value);\n this.onChange(customOption.value);\n this.selectionChange.emit(customOption.value);\n this.isOpen.set(false);\n this.searchTerm.set('');\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(customOption.value);\n }\n\n this.markAsTouchedAndUpdate();\n return;\n }\n\n if (this.multiple()) {\n this.toggleOption(option);\n } else {\n this.selectOption(option);\n }\n }\n\n /** Selects a single option and updates the control/outputs. */\n selectOption(option: SelectOption) {\n if (this.multiple()) {\n this.toggleOption(option);\n return;\n }\n this._value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n this.selectionChange.emit(option.value);\n this.isOpen.set(false);\n\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(option.value);\n }\n\n this.markAsTouchedAndUpdate();\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n\n /** Toggles an option in multiple mode, honoring the valid combinations. */\n toggleOption(option: SelectOption) {\n if (this.isOptionDisabled(option)) return;\n if (!this.multiple()) return;\n\n let currentValue = this._value();\n if (!Array.isArray(currentValue)) {\n currentValue = [];\n }\n\n const index = currentValue.indexOf(option.value);\n let newValue: any[];\n\n if (index === -1) {\n newValue = [...currentValue, option.value];\n } else {\n newValue = currentValue.filter((v: any) => v !== option.value);\n }\n\n this._value.set(newValue);\n this.onChange(newValue);\n this.onTouched();\n this.selectionChange.emit(newValue);\n\n this.markAsTouchedAndUpdate();\n }\n\n /** Opens/closes the dropdown and manages focus/selection state. */\n toggleDropdown() {\n if (this.isDisabled()) return;\n\n const wasOpen = this.isOpen();\n this.isOpen.update((v) => !v);\n\n if (!wasOpen && this.isOpen()) {\n const selectedIdx = this.getSelectedIndex();\n this.focusedIndex.set(selectedIdx);\n } else if (wasOpen && !this.isOpen()) {\n this.searchTerm.set('');\n this.focusedIndex.set(-1);\n this.selectTrigger()?.nativeElement.focus();\n }\n\n if (this.isOpen() && this.isSearchable()) {\n setTimeout(() => {\n this.filterInput()?.nativeElement?.focus();\n });\n }\n this.onTouched();\n }\n\n /** trackBy for rendered options so Angular reuses DOM nodes by value. */\n trackByFn(index: number, option: SelectOption): any {\n return option.value;\n }\n\n /** Writes an external value into the internal signal (ControlValueAccessor). */\n writeValue(value: any): void {\n if (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n ) {\n this._value.set(this.multiple() ? [] : null);\n } else {\n this._value.set(value);\n }\n }\n\n /** Stores the onChange callback (ControlValueAccessor). */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /** Stores the onTouched callback (ControlValueAccessor). */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}","<div\n #selectContainer\n class=\"relative w-full font-sans outline-none\"\n>\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div\n #selectTrigger\n class=\"flex justify-between items-center w-full px-3 py-2 border _shk-border rounded-lg _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] transition-colors duration-150 cursor-pointer min-h-[2.5rem] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus-within:outline-none focus-within:[background-color:var(--shk-surface-50)] dark:focus-within:[background-color:var(--shk-surface-100)] focus-within:ring-1 focus-within:[--tw-ring-color:var(--shk-primary-500)] focus-within:[border-color:var(--shk-primary-500)] focus:outline-none focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] focus:[border-color:var(--shk-primary-500)] sm:text-sm\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n (keydown)=\"onKeydown($event)\"\n (click)=\"toggleDropdown()\"\n [class.open]=\"isOpen()\"\n [class.disabled-select]=\"isDisabled()\"\n [class._shk-border-red]=\"shouldShowError()\"\n >\n <div class=\"selected-value truncate\">\n @if (isSearchable() && isOpen()) {\n <input\n #filterInput\n type=\"text\"\n class=\"w-full bg-transparent border-0 outline-none p-0 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n placeholder=\"Buscar...\"\n [value]=\"searchTerm()\"\n (input)=\"onInputChange($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (click)=\"$event.stopPropagation()\"\n />\n } @else {\n <span\n [class._shk-text-surface-400]=\"!hasSelectedValues()\"\n [class._shk-text-surface-800]=\"hasSelectedValues()\"\n >\n {{ displayValue() }}\n </span>\n }\n </div>\n <div\n class=\"text-xs transition-transform duration-200 shrink-0 ml-2\"\n [class.rotate-180]=\"isOpen()\"\n >\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 _shk-text-surface-400 dark:[color:var(--shk-surface-400)]\"\n ></svg>\n </div>\n </div>\n\n @if (isOpen()) {\n <div\n #dropdownContainer\n (keydown)=\"onKeydown($event)\"\n class=\"absolute left-0 right-0 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border _shk-border rounded-lg max-h-[240px] overflow-y-auto z-50 shadow-lg _shk-scrollbar\"\n [class.top-full]=\"!dropdownUpward()\"\n [class.bottom-full]=\"dropdownUpward()\"\n [class.mt-1]=\"!dropdownUpward()\"\n [class.mb-1]=\"dropdownUpward()\"\n >\n @if (showCustomOption()) {\n <div\n class=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:[background-color:var(--shk-surface-50)] dark:hover:[background-color:var(--shk-surface-200)] text-sm\"\n (click)=\"onCustomOptionClick()\"\n >\n <span class=\"font-semibold _shk-text-primary\">Crear nuevo:</span>\n <span class=\"_shk-text-surface-700 dark:[color:var(--shk-surface-700)] ml-1\">{{ searchTerm() }}</span>\n </div>\n }\n\n @for (option of regularOptions(); track trackByFn($index, option); let i = $index) {\n <div\n class=\"flex items-center gap-2 px-3 py-2 cursor-pointer hover:[background-color:var(--shk-surface-50)] dark:hover:[background-color:var(--shk-surface-200)] text-sm _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n [class.opacity-50]=\"isOptionDisabled(option)\"\n [class.select-option-active]=\"focusedIndex() === i\"\n [class._shk-text-surface-400]=\"option.value === null\"\n (click)=\"!isOptionDisabled(option) && onOptionClick(option)\"\n >\n @if (multiple()) {\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(option)\"\n [disabled]=\"isOptionDisabled(option)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"!isOptionDisabled(option) && toggleOption(option)\"\n class=\"flex-shrink-0 [accent-color:var(--shk-primary-600)]\"\n />\n {{ option.label }}\n } @else {\n {{ option.label }}\n }\n </div>\n }\n\n <div class=\"px-3 py-2 text-center\">\n @if (isLoading() && regularOptions().length === 0) {\n <div class=\"flex items-center justify-center gap-2 text-sm _shk-text-surface-500\">\n <svg class=\"spinner\" viewBox=\"0 0 50 50\">\n <circle\n class=\"path\"\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke-width=\"5\"\n ></circle>\n </svg>\n Cargando más resultados...\n </div>\n }\n\n @if (!isLoading() && isAllDataLoaded() && regularOptions().length === 0) {\n <div class=\"text-sm _shk-text-surface-400 italic\">\n No se encontraron coincidencias\n </div>\n }\n\n @if (options().length === 0) {\n <div class=\"text-sm _shk-text-surface-400 italic\">\n {{ emptyMessageKey() | transloco }}\n </div>\n }\n </div>\n\n @if (usePagination() && totalPages() > 1) {\n <div class=\"flex justify-between items-center px-3 py-2 border-t _shk-border\">\n <button\n class=\"bg-transparent border-0 cursor-pointer px-2 py-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-50 disabled:cursor-not-allowed _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\"\n [disabled]=\"currentPage() === 1\"\n (click)=\"$event.stopPropagation(); previousPage()\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <span class=\"text-sm _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\">\n {{ currentPage() }} de {{ totalPages() }}\n </span>\n <button\n class=\"bg-transparent border-0 cursor-pointer px-2 py-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-50 disabled:cursor-not-allowed _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\"\n [disabled]=\"currentPage() === totalPages()\"\n (click)=\"$event.stopPropagation(); nextPage()\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n }\n </div>\n }\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\" tabindex=\"-1\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>","import { Component, input, output, signal, computed, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { LucideDynamicIcon, LucideUpload } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\nexport interface FileUploadError {\n type: 'size' | 'type';\n message: string;\n file: File;\n}\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Drag & drop file uploader with file type/size validation, image previews,\n * multiple files support and localized error messages.\n */\n@Component({\n selector: 'shk-file-upload',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './file-upload.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FileUploadComponent {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideUpload);\n private transloco = inject(TranslocoService);\n\n /** Main label of the uploader. */\n label = input<string>('Cargar archivo');\n /** Accepted MIME types/extensions (e.g. 'image/*', '.pdf'). */\n accept = input<string>('image/*');\n /** Maximum allowed size per file (bytes). */\n maxFileSize = input<number>(2 * 1024 * 1024);\n /** Maximum number of files (0 = unlimited). */\n maxFiles = input<number>(0);\n /** Text of the file picker button. */\n fileUploadText = input<string>('Seleccionar archivo');\n /** Helper text shown next to the label. */\n fileRecommendation = input<string>('');\n /** Text shown when files are already loaded. */\n changeFilesText = input<string>('Cambiar archivos');\n /** Enables selecting more than one file at once. */\n multiple = input<boolean>(false);\n\n /** Emitted with the currently selected files. */\n fileSelected = output<File[]>();\n /** Emitted when the last selected file is removed. */\n fileRemoved = output<void>();\n /** Emitted when a file fails validation (type/size). */\n fileError = output<FileUploadError>();\n /** Emitted when a file is near the size limit. */\n fileWarning = output<FileUploadError>();\n\n /** Currently selected files. */\n selectedFiles = signal<File[]>([]);\n /** Localized error message displayed to the user. */\n errorMessage = signal<string>('');\n /** Whether the user is dragging files over the zone. */\n isDragOver = signal<boolean>(false);\n\n /** Object URLs used for image previews. */\n private previewUrls = new Map<File, string>();\n\n /** Whether another selection is allowed. */\n canAddMore = computed(() => {\n if (!this.multiple()) return this.selectedFiles().length === 0;\n const max = this.maxFiles();\n if (max <= 0) return true;\n return this.selectedFiles().length < max;\n });\n\n /** True when the maximum number of files has been reached. */\n maxReached = computed(() => {\n const max = this.maxFiles();\n if (max <= 0) return false;\n return this.selectedFiles().length >= max;\n });\n\n /** Whether the file is an image (used for previews). */\n isImageFile(file: File): boolean {\n return file.type.startsWith('image/');\n }\n\n /** Returns (creating on demand) the object URL for a file preview. */\n previewUrl(file: File): string {\n if (!this.previewUrls.has(file)) {\n this.previewUrls.set(file, URL.createObjectURL(file));\n }\n return this.previewUrls.get(file) ?? '';\n }\n\n /** Marks the drop zone as active while dragging over it. */\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n /** Clears the drag-over state when the drag leaves the zone. */\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n /** Processes the files dropped on the zone. */\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = event.dataTransfer?.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n }\n\n /** Processes the files picked from the native file input. */\n onFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const files = input.files;\n if (files && files.length > 0) {\n this.processFiles(Array.from(files));\n }\n input.value = '';\n }\n\n /** Validates and appends the received files, emitting errors/warnings. */\n private processFiles(files: File[]): void {\n this.errorMessage.set('');\n const validFiles: File[] = [];\n\n for (const file of files) {\n const error = this.validateFile(file);\n if (error) {\n this.fileError.emit(error);\n this.errorMessage.set(error.message);\n return;\n }\n\n const warning = this.checkSizeWarning(file);\n if (warning) {\n this.fileWarning.emit(warning);\n }\n\n validFiles.push(file);\n }\n\n const max = this.maxFiles();\n if (max > 0) {\n const currentCount = this.selectedFiles().length;\n const allowed = max - currentCount;\n if (validFiles.length > allowed) {\n const errorMsg = this.transloco.translate('fileUpload.maxFiles', undefined, `Máximo ${max} archivos permitidos`);\n this.errorMessage.set(errorMsg);\n return;\n }\n }\n\n if (this.multiple()) {\n this.selectedFiles.set([...this.selectedFiles(), ...validFiles]);\n } else {\n this.clearPreviews();\n this.selectedFiles.set(validFiles);\n }\n\n this.fileSelected.emit(this.selectedFiles());\n }\n\n /** Validates a file against `accept` and `maxFileSize`. */\n private validateFile(file: File): FileUploadError | null {\n const acceptStr = this.accept();\n if (acceptStr && acceptStr !== '*') {\n const acceptTypes = acceptStr.split(',').map((t) => t.trim());\n const valid = acceptTypes.some((type) => {\n if (type.endsWith('/*')) {\n const category = type.replace('/*', '');\n return file.type.startsWith(category);\n }\n if (type.startsWith('.')) {\n const ext = type.slice(1).toLowerCase();\n return file.name.toLowerCase().endsWith('.' + ext);\n }\n if (type.includes('/')) {\n return file.type === type;\n }\n return false;\n });\n\n if (!valid) {\n return {\n type: 'type',\n message: this.transloco.translate('fileUpload.invalidType', { accept: acceptStr }, `Tipo de archivo no válido. Formatos aceptados: ${acceptStr}`),\n file,\n };\n }\n }\n\n if (this.maxFileSize() > 0 && file.size > this.maxFileSize()) {\n return {\n type: 'size',\n message: this.transloco.translate('fileUpload.fileTooLarge', { size: this.formatFileSize(this.maxFileSize()) }, `El archivo excede el tamaño máximo de ${this.formatFileSize(this.maxFileSize())}`),\n file,\n };\n }\n\n return null;\n }\n\n /** Emits a warning when the file is close to the size limit (>90%). */\n private checkSizeWarning(file: File): FileUploadError | null {\n if (this.maxFileSize() > 0 && file.size > this.maxFileSize() * 0.9) {\n return {\n type: 'size',\n message: this.transloco.translate('fileUpload.sizeWarning', { size: this.formatFileSize(this.maxFileSize()) }, `El archivo está cerca del límite de tamaño (${this.formatFileSize(this.maxFileSize())})`),\n file,\n };\n }\n return null;\n }\n\n /** Removes a file, revoking its preview URL. */\n removeFile(file: File): void {\n const url = this.previewUrls.get(file);\n if (url) {\n URL.revokeObjectURL(url);\n this.previewUrls.delete(file);\n }\n\n this.selectedFiles.update((files) => files.filter((f) => f !== file));\n this.errorMessage.set('');\n\n if (this.selectedFiles().length === 0) {\n this.fileRemoved.emit();\n }\n }\n\n /** Clears all selected files and previews. */\n changeFiles(): void {\n this.clearPreviews();\n this.selectedFiles.set([]);\n this.errorMessage.set('');\n }\n\n /** Revokes every stored preview object URL. */\n private clearPreviews(): void {\n for (const [file, url] of this.previewUrls) {\n URL.revokeObjectURL(url);\n }\n this.previewUrls.clear();\n }\n\n /** Human readable size (B/KB/MB). */\n private formatFileSize(bytes: number): string {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n }\n}","<div class=\"flex flex-col gap-2\">\n @if (label()) {\n <label class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-300)]\">\n {{ label() }}\n </label>\n }\n\n @if (canAddMore()) {\n <div\n class=\"relative border-2 border-dashed _shk-border dark:[border-color:var(--shk-surface-700)] rounded-lg p-4 transition-colors hover:[border-color:var(--shk-primary-400)] dark:hover:[border-color:var(--shk-primary-500)]\"\n [class.border-red-400]=\"errorMessage()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <input\n #fileInput\n type=\"file\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n (change)=\"onFileChange($event)\"\n class=\"hidden\"\n />\n\n <div\n class=\"flex flex-col items-center gap-2 cursor-pointer\"\n (click)=\"fileInput.click()\"\n [class.drag-over]=\"isDragOver()\"\n >\n <svg [lucideIcon]=\"getIcon('upload')\" class=\"w-8 h-8 _shk-icon-subtle dark:[color:var(--shk-surface-600)]\"></svg>\n <span class=\"text-sm _shk-text-surface-700 dark:[color:var(--shk-surface-300)]\">\n {{ fileUploadText() }}\n </span>\n @if (fileRecommendation()) {\n <span class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">\n {{ fileRecommendation() }}\n </span>\n }\n </div>\n </div>\n }\n\n @if (maxReached()) {\n <div class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] text-center py-2\">\n Máximo {{ maxFiles() }} archivos alcanzado\n </div>\n }\n\n @if (selectedFiles().length > 0) {\n <div class=\"flex flex-wrap gap-3\">\n @for (file of selectedFiles(); track file.name + file.size + file.lastModified) {\n <div class=\"relative group\">\n @if (isImageFile(file)) {\n <img\n [src]=\"previewUrl(file)\"\n [alt]=\"file.name\"\n class=\"w-20 h-20 object-cover rounded-lg _shk-border dark:[border-color:var(--shk-surface-700)]\"\n />\n } @else {\n <div class=\"w-20 h-20 rounded-lg _shk-border dark:[border-color:var(--shk-surface-700)] flex flex-col items-center justify-center _shk-bg-surface-50 dark:[background-color:var(--shk-surface-800)] gap-1\">\n <svg [lucideIcon]=\"getIcon('file')\" class=\"w-6 h-6 _shk-text-surface-400\"></svg>\n <span class=\"text-[10px] _shk-text-surface-400 truncate max-w-[70px] px-1 text-center\">{{ file.name }}</span>\n </div>\n }\n <button\n type=\"button\"\n (click)=\"removeFile(file)\"\n class=\"absolute -top-1.5 -right-1.5 w-5 h-5 bg-red-500 text-white rounded-full text-xs flex items-center justify-center opacity-0 group-hover:opacity-100 transition shadow\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-3 h-3\"></svg>\n </button>\n </div>\n }\n </div>\n @if (!multiple()) {\n <button\n type=\"button\"\n (click)=\"changeFiles()\"\n class=\"text-xs _shk-text-primary hover:[color:var(--shk-primary-700)] dark:[color:var(--shk-primary-400)] dark:hover:[color:var(--shk-primary-300)] underline cursor-pointer bg-transparent border-0\"\n >\n {{ changeFilesText() }}\n </button>\n }\n }\n\n @if (errorMessage()) {\n <p class=\"text-xs _shk-text-red-500\">{{ errorMessage() }}</p>\n }\n</div>","import { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport { getIcon } from '../utils/icons';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\nexport type TagSeverity = 'secondary' | 'success' | 'info' | 'warning' | 'danger' | 'contrast';\n\nconst SEVERITY_CLASS: Record<TagSeverity, string> = {\n secondary: '_shk-tag-secondary',\n success: '_shk-tag-success',\n info: '_shk-tag-info',\n warning: '_shk-tag-warn',\n danger: '_shk-tag-danger',\n contrast: '_shk-tag-contrast',\n};\n\n/** Small label used to highlight a value, status or category. */\n@Component({\n selector: 'shk-tag',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LucideDynamicIcon],\n template: `\n <span [class]=\"tagClass()\" [style]=\"style()\">\n @if (icon()) {\n <svg [lucideIcon]=\"getIcon(icon())\" class=\"shk-tag-icon\"></svg>\n }\n @if (value() !== undefined && value() !== null) {\n <span>{{ value() }}</span>\n }\n <ng-content></ng-content>\n </span>\n `,\n styles: [\n `\n .shk-tag-icon {\n width: 0.875rem;\n height: 0.875rem;\n flex-shrink: 0;\n }\n `,\n ],\n})\nexport class TagComponent {\n /** Text shown inside the tag. */\n value = input<string | number>('');\n /** Color variant. Defaults to 'secondary'. */\n severity = input<TagSeverity>('secondary');\n /** Renders the tag with fully rounded corners (pill). */\n rounded = input<boolean>(false);\n /** Optional leading lucide icon name or component. */\n icon = input<string | any>('');\n /** Inline styles applied to the tag. */\n style = input<Record<string, string | number>>({});\n /** Extra CSS classes. */\n styleClass = input<string>('');\n\n protected getIcon = getIcon;\n\n protected tagClass = computed(() => {\n const base = 'inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium';\n const severity = SEVERITY_CLASS[this.severity()] ?? SEVERITY_CLASS.secondary;\n const radius = this.rounded() ? 'rounded-full' : 'rounded-md';\n return `${base} ${radius} ${severity} ${this.styleClass()}`.trim();\n });\n}\n","import {\n Component,\n input,\n ElementRef,\n inject,\n HostListener,\n OnDestroy,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nconst TOOLTIP_Z_INDEX = '2147483647';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Tooltip rendered in `document.body` with `position: fixed`, so it always\n * floats above any container (tables with `overflow: hidden`, modals, scroll\n * wrappers, etc.) and never gets clipped or hidden behind its anchor element.\n */\n@Component({\n selector: 'shk-tooltip',\n standalone: true,\n template: `\n <div class=\"shk-tooltip-trigger inline-flex\">\n <ng-content></ng-content>\n </div>\n `,\n})\nexport class TooltipComponent implements OnDestroy {\n /** Content of the tooltip. */\n readonly text = input<string>('');\n /** Preferred placement relative to the trigger. */\n readonly position = input<'top' | 'bottom' | 'right'>('bottom');\n /** 'hover' shows on mouse enter; 'fixed' stays pinned to the content. */\n readonly mode = input<'hover' | 'fixed'>('hover');\n /** Distance (px) between the tooltip and the trigger. */\n readonly offset = input(8);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n private readonly document = inject(DOCUMENT);\n\n /** The dynamically created tooltip element. */\n private tooltipEl: HTMLElement | null = null;\n /** Unsubscribe callbacks for the scroll/resize listeners. */\n private cleanup: (() => void) | null = null;\n\n /** Shows the tooltip over the host trigger on mouseenter. */\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (!this.text()) return;\n const trigger = this.host.nativeElement.querySelector(\n '.shk-tooltip-trigger',\n ) as HTMLElement | null;\n if (!trigger) return;\n this.show(trigger);\n }\n\n /** Hides the tooltip on mouseleave. */\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hide();\n }\n\n /** Creates and positions the tooltip element on `document.body`. */\n private show(trigger: HTMLElement): void {\n this.removeTooltip();\n\n const el = this.document.createElement('span');\n el.className = 'shk-tooltip-dynamic';\n el.textContent = this.text();\n Object.assign(el.style, {\n position: 'fixed',\n zIndex: TOOLTIP_Z_INDEX,\n backgroundColor: 'var(--shk-tooltip-bg, #27272a)',\n color: 'var(--shk-tooltip-text, #fff)',\n padding: '4px 8px',\n borderRadius: '6px',\n fontSize: '12px',\n lineHeight: '1.4',\n whiteSpace: 'normal',\n maxWidth: 'min(80vw, 22rem)',\n boxShadow:\n '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',\n pointerEvents: 'none',\n opacity: '0',\n transition: 'opacity 0.15s ease',\n });\n\n this.document.body.appendChild(el);\n this.tooltipEl = el;\n\n const place = () => {\n const rect = trigger.getBoundingClientRect();\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n const { left, top } = this.computePosition(rect, w, h);\n el.style.left = `${left}px`;\n el.style.top = `${top}px`;\n };\n\n place();\n requestAnimationFrame(() => {\n if (this.tooltipEl === el) {\n el.style.opacity = '1';\n }\n });\n\n const onScrollOrResize = () => place();\n window.addEventListener('scroll', onScrollOrResize, true);\n window.addEventListener('resize', onScrollOrResize);\n this.cleanup = () => {\n window.removeEventListener('scroll', onScrollOrResize, true);\n window.removeEventListener('resize', onScrollOrResize);\n };\n }\n\n /** Computes the tooltip position, clamped to the viewport. */\n private computePosition(\n rect: DOMRect,\n width: number,\n height: number,\n ): { left: number; top: number } {\n const off = this.offset();\n const viewportW = this.document.defaultView?.innerWidth ?? 0;\n const viewportH = this.document.defaultView?.innerHeight ?? 0;\n\n let x: number;\n let y: number;\n\n if (this.position() === 'right') {\n x = rect.right + off;\n y = rect.top + rect.height / 2 - height / 2;\n } else if (this.position() === 'bottom') {\n x = rect.left + rect.width / 2 - width / 2;\n y = rect.bottom + off;\n } else {\n x = rect.left + rect.width / 2 - width / 2;\n y = rect.top - off - height;\n }\n\n const margin = 4;\n const left = Math.max(\n margin,\n Math.min(x, Math.max(margin, viewportW - width - margin)),\n );\n const top = Math.max(\n margin,\n Math.min(y, Math.max(margin, viewportH - height - margin)),\n );\n return { left, top };\n }\n\n /** Fades the tooltip out and removes it from the DOM. */\n private hide(): void {\n if (!this.tooltipEl) return;\n const el = this.tooltipEl;\n el.style.opacity = '0';\n this.tooltipEl = null;\n setTimeout(() => {\n el.remove();\n }, 150);\n }\n\n /** Removes the tooltip and its listeners. */\n private removeTooltip(): void {\n this.cleanup?.();\n this.cleanup = null;\n this.tooltipEl?.remove();\n this.tooltipEl = null;\n }\n\n /** Cleans up the tooltip on component destroy. */\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n}\n","import {\n Component,\n input,\n output,\n inject,\n signal,\n computed,\n effect,\n linkedSignal,\n ChangeDetectionStrategy,\n untracked,\n ChangeDetectorRef,\n DestroyRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\nimport { LucideDynamicIcon, LucidePlus } from '@lucide/angular';\nimport { TagComponent, TagSeverity } from '../tag/tag.component';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\nexport interface Column {\n field: string;\n header: string;\n sortable?: boolean;\n filter?: boolean;\n filterPlaceholder?: string;\n width?: string;\n defaultSort?: true;\n filterType?: 'text' | 'exact' | 'select';\n filterOptions?: { label: string; value: any }[];\n template?: 'text' | 'tag';\n format?: (row: any) => string;\n tagValue?: (row: any) => string;\n tagSeverity?: (row: any) => TagSeverity | undefined;\n tagRounded?: boolean | ((row: any) => boolean);\n tagIcon?: string | ((row: any) => string);\n tagStyle?: (row: any) => Record<string, string | number> | undefined;\n}\n\nexport interface TableAction {\n label: string;\n icon: string | any;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\nexport interface RowAction {\n label: string | ((data: any) => string);\n icon: string | ((data: any) => any) | any;\n onClick: (rowData: any) => void;\n class?: string | ((data: any) => string);\n isVisible?: (rowData: any) => boolean;\n isDisabled?: (rowData: any) => boolean;\n}\n\nexport interface PageChangeEvent {\n first: number;\n rows: number;\n page: number;\n pageCount: number;\n}\n\nexport interface FilterChangeEvent {\n filters: { [key: string]: any };\n}\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Data table with sorting, column filters, global search, pagination,\n * row/header actions, tag cells and optional server-side mode.\n */\n@Component({\n selector: 'shk-table',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n TranslocoModule,\n LucideDynamicIcon,\n TagComponent,\n TooltipComponent,\n ],\n templateUrl: './table.component.html',\n styles: [\n `\n input:focus {\n outline: none;\n }\n input[type='text'] {\n font-weight: normal !important;\n }\n table th {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n table td {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n td button svg {\n width: 1.125rem !important;\n height: 1.125rem !important;\n }\n td button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .table-action-btn svg {\n width: 1rem !important;\n height: 1rem !important;\n min-width: 1rem !important;\n min-height: 1rem !important;\n }\n .table-action-btn {\n padding: 0.5rem !important;\n min-width: 2rem !important;\n min-height: 2rem !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .table-scroll-wrapper {\n width: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n border-radius: inherit;\n -webkit-overflow-scrolling: touch;\n container-type: inline-size;\n }\n .table-scroll-wrapper table {\n table-layout: fixed;\n width: 100%;\n }\n\n /*\n On wide screens the table behaves as before (auto columns stretching to\n 100% of the container, no horizontal scroll). Only when the real\n container is narrow (container query, not a viewport media query, so it\n also works inside sidebars/panels) columns get a fixed width (see\n getColumnWidth in the TS) so the table's intrinsic width exceeds the\n container and horizontal scrolling actually works, snapping column by\n column. table-layout: auto is used in compact mode because with\n table-layout: fixed the table is forced to the container width and\n cannot overflow (dead scroll).\n */\n @container (max-width: 768px) {\n .table-scroll-wrapper {\n scroll-snap-type: x mandatory;\n }\n .table-scroll-wrapper table {\n table-layout: auto;\n width: 100%;\n }\n .table-scroll-wrapper th:not([data-shk-actions]),\n .table-scroll-wrapper td:not([data-shk-actions]) {\n min-width: var(--shk-col-width, 140px);\n max-width: var(--shk-col-width, 140px);\n }\n .table-scroll-wrapper th,\n .table-scroll-wrapper td {\n scroll-snap-align: start;\n }\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n})\nexport class TableComponent {\n private fb = inject(FormBuilder);\n private cdr = inject(ChangeDetectorRef);\n private transloco = inject(TranslocoService);\n private destroyRef = inject(DestroyRef);\n\n/** Maps icon names to lucide components, falling back to a plus icon. */\n protected getIcon = (name: any) => getIconFromCentral(name, LucidePlus);\n\n /**\n * Minimum width applied to each column (except `actions`, which keeps its\n * own computed width) only on narrow screens. On wide screens columns\n * stretch normally to fill the container width. Can be overridden per\n * column via `col.width`.\n */\n protected readonly DEFAULT_COLUMN_WIDTH = '140px';\n\n /** Returns the effective CSS width for a column ('actions' included). */\n getColumnWidth(col: Column): string {\n return col.width || this.DEFAULT_COLUMN_WIDTH;\n }\n\n /** Signal with the translated \"Actions\" header label. */\n private actionsHeaderLabel = toSignal(this.transloco.selectTranslate('common.actions'), {\n initialValue: 'Acciones',\n });\n\n /** Signal reacting to language changes so imperative translations are recomputed. */\n private currentLang = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n /** Reactive signal of loaded translations so pageReport is not stuck with raw keys. */\n private translations = toSignal(this.transloco.selectTranslation());\n\n /** Full dataset. In server-side mode only the current page rows. */\n data = input<any[]>([]);\n /** Column definitions (field, header, filterable, tag cell options, etc.). */\n columns = input<Column[]>([]);\n /** Number of rows displayed per page. */\n rowsPerPage = input<number>(10);\n /** Options shown in the rows-per-page selector. */\n rowsPerPageOptions = input<number[]>([10, 25, 50]);\n /** Whether the table is in loading state (shows the overlay/skeleton). */\n loading = input<boolean>(false);\n /** Whether to render the row actions column. */\n showActionRow = input<boolean>(true);\n /** Custom cell/header templates keyed by column field. */\n customTemplates = input<{ [key: string]: any }>({});\n /** Actions rendered in the table header. */\n headerActions = input<TableAction[]>([]);\n /** Actions rendered per row (icon, label, class, visibility/disabled). */\n rowActions = input<RowAction[]>([]);\n /** Whether the table container renders a drop shadow. */\n hasShadow = input<boolean>(true);\n /** Field used as the default initial sort. */\n defaultSortField = input<string>('');\n /** Order used by the default initial sort (1 asc, -1 desc). */\n defaultSortOrder = input<number>(1);\n /** Whether the global search input is shown. */\n showSearch = input<boolean>(true);\n /** Placeholder for the global search input. */\n searchPlaceholder = input<string>('');\n /** Message shown when there are no rows. */\n emptyMessage = input<string>('');\n /** Enables server-side pagination/filtering/sorting mode. */\n serverSide = input<boolean>(false);\n /** Total number of records in server-side mode (for pagination math). */\n totalRecords = input<number>(0);\n /** Optional prebuilt filter chips (label + value) shown above the table. */\n filters = input<{ label: string; value: string }[]>([]);\n /** Currently active filter chip value. */\n activeFilter = input<string>('');\n\n /** Emits when the user clicks the refresh button. */\n refresh = output<void>();\n /** Emits page changes (server-side mode) with first/rows/page info. */\n pageChange = output<PageChangeEvent>();\n /** Emits the active column filters. */\n filterChange = output<FilterChangeEvent>();\n /** Emits the debounced global search term. */\n searchChange = output<string>();\n /** Emits when a filter chip is clicked. */\n filterClick = output<string>();\n\n /** Internal copy of the input data used as the base for search/filter. */\n private originalData = signal<any[]>([]);\n /** Rows after the global search is applied. */\n searchedData = signal<any[]>([]);\n /** Rows after column filters are applied. */\n filteredData = signal<any[]>([]);\n /** Rows belonging to the current page (after slicing). */\n displayedData = signal<any[]>([]);\n /** Local total records after filtering (client mode). */\n localTotalRecords = signal<number>(0);\n /** Index of the first row of the current page. */\n first = signal<number>(0);\n /** Visibility map for each column filter input. */\n showFilterInput = signal<{ [key: string]: boolean }>({});\n /** Current global search term. */\n searchQuery = signal<string>('');\n /** Currently sorted field. */\n sortField = signal<string>('');\n /** Current sort direction (1 asc, -1 desc). */\n sortOrder = signal<number>(1);\n /** Local rows per page, kept in sync with the `rowsPerPage` input. */\n rowsPerPageLocal = linkedSignal(() => this.rowsPerPage());\n\n /** Total number of pages based on the effective record count. */\n totalPages = computed(() =>\n Math.max(1, Math.ceil(this.effectiveTotalRecords() / this.rowsPerPageLocal())),\n );\n /** Current page number (1-based). */\n currentPage = computed(() => Math.floor(this.first() / this.rowsPerPageLocal()) + 1);\n\n /** Reactive form holding the value of each column filter. */\n columnFiltersForm!: FormGroup;\n\n /** Subjects used to debounce column filters (server mode) and search. */\n private filterSubject = new Subject<void>();\n private searchSubject = new Subject<string>();\n\n /**\n * Signature of the last built set of filterable fields (+filter type) to\n * avoid rebuilding the form (and losing user input) on reference changes.\n */\n private lastFilterFieldsSignature = '';\n private columnFilterSubscriptions: Subscription[] = [];\n\n /** Columns array with the leading `actions` column when row actions exist. */\n columnsWithActions = computed<Column[]>(() => {\n const columnsArray = this.columns();\n const showAction = this.showActionRow();\n const rowActionsArray = this.rowActions();\n const translatedHeader = this.actionsHeaderLabel();\n if (showAction && rowActionsArray.length > 0) {\n const actionsWidth =\n rowActionsArray.length <= 2 ? '110px' : rowActionsArray.length <= 3 ? '130px' : '170px';\n return [\n {\n field: 'actions',\n header: translatedHeader || 'Acciones',\n width: actionsWidth,\n defaultSort: true,\n },\n ...columnsArray,\n ];\n }\n return [...columnsArray];\n });\n\n /** Total records: server-provided in server mode, locally computed otherwise. */\n effectiveTotalRecords = computed(() => {\n return this.serverSide() ? this.totalRecords() : this.localTotalRecords();\n });\n /**\n * Rows rendered by the template: the input data in server-side mode or the\n * locally sliced/page current rows otherwise.\n */\n effectiveDisplayedData = computed(() => {\n return this.serverSide() ? this.data() : this.displayedData();\n });\n\n /**\n * Reactive \"X to Y of Z\" report. Depends on loaded translations and the\n * active language so it always reflects the translated template.\n */\n pageReport = computed(() => {\n this.translations(); // forces recomputation when translations finish loading\n this.currentLang(); // forces recomputation when the language changes\n const total = this.effectiveTotalRecords();\n if (total === 0) {\n return this.transloco.translate('table.pageReport', {\n from: 0,\n to: 0,\n total: 0,\n });\n }\n const from = this.first() + 1;\n const to = Math.min(this.first() + this.rowsPerPageLocal(), total);\n return this.transloco.translate('table.pageReport', { from, to, total });\n });\n\n constructor() {\n this.columnFiltersForm = this.fb.group({});\n\n // Debounced column-filter changes (server-side mode only).\n this.filterSubject\n .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.serverSide()) {\n this.emitFilterChange();\n }\n });\n\n // Debounced global search changes (server-side mode only).\n this.searchSubject\n .pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.searchChange.emit(value);\n });\n\n // When input data changes, refresh the internal copy and re-apply filters\n // unless the server already handles the filtering.\n effect(() => {\n const newData = this.data();\n untracked(() => {\n this.originalData.set([...newData]);\n if (!this.serverSide()) {\n this.applyFilters();\n }\n });\n });\n\n // Rebuild the column filter form whenever the columns change.\n effect(() => {\n const cols = this.columns();\n untracked(() => {\n this.setupColumnFilters(cols);\n });\n });\n\n // Apply the default sort once when the default fields are provided.\n effect(() => {\n const field = this.defaultSortField();\n const order = this.defaultSortOrder();\n if (field) {\n untracked(() => {\n this.sortField.set(field);\n this.sortOrder.set(order);\n if (!this.serverSide()) {\n this.applySort();\n this.updateDisplayedData();\n }\n });\n }\n });\n\n // Apply the global search locally whenever the term changes.\n effect(() => {\n const query = this.searchQuery();\n untracked(() => {\n if (!this.serverSide()) {\n this.applySearch();\n }\n });\n });\n }\n\n /**\n * Builds (or keeps) the reactive form with one control per filterable\n * column. The form is only rebuilt when the set of filterable\n * fields/filter types changes, preserving the values already typed by the\n * user otherwise. Previous subscriptions are unsubscribed to avoid leaks.\n */\n private setupColumnFilters(cols: Column[]) {\n const filterableCols = cols.filter((c) => c.filter);\n const signature = filterableCols.map((c) => `${c.field}:${c.filterType ?? 'text'}`).join('|');\n\n if (signature === this.lastFilterFieldsSignature && this.columnFiltersForm) {\n return;\n }\n this.lastFilterFieldsSignature = signature;\n\n // Clean up previous subscriptions before rebuilding.\n this.columnFilterSubscriptions.forEach((sub) => sub.unsubscribe());\n this.columnFilterSubscriptions = [];\n\n const previousValues: { [key: string]: any } = {};\n if (this.columnFiltersForm) {\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n previousValues[field] = this.columnFiltersForm.get(field)?.value;\n });\n }\n\n const filterControls: any = {};\n const filterVisibility: { [key: string]: boolean } = { ...this.showFilterInput() };\n filterableCols.forEach((col) => {\n const defaultValue = col.filterType === 'select' ? null : '';\n const preserved = previousValues.hasOwnProperty(col.field)\n ? previousValues[col.field]\n : defaultValue;\n filterControls[col.field] = [preserved];\n if (!(col.field in filterVisibility)) {\n filterVisibility[col.field] = false;\n }\n });\n\n this.columnFiltersForm = this.fb.group(filterControls);\n this.showFilterInput.set(filterVisibility);\n\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n const sub = this.columnFiltersForm\n .get(field)\n ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.first.set(0);\n if (this.serverSide()) {\n this.filterSubject.next();\n } else {\n this.applyFilters();\n }\n this.cdr.markForCheck();\n });\n if (sub) {\n this.columnFilterSubscriptions.push(sub);\n }\n });\n }\n\n /** Collects the non-empty column filter values and emits them. */\n private emitFilterChange() {\n const filters: { [key: string]: any } = {};\n Object.keys(this.columnFiltersForm.controls).forEach((field) => {\n const value = this.columnFiltersForm.get(field)?.value;\n if (value !== null && value !== undefined && value !== '') {\n filters[field] = value;\n }\n });\n this.filterChange.emit({ filters });\n }\n\n /** Applies the global search over the original data (client mode). */\n private applySearch() {\n const original = this.originalData();\n const query = this.searchQuery().toLowerCase();\n if (!query) {\n this.searchedData.set([...original]);\n } else {\n const filtered = original.filter((item) => {\n return Object.values(item).some((val) => {\n if (val === null || val === undefined) return false;\n return String(val).toLowerCase().includes(query);\n });\n });\n this.searchedData.set(filtered);\n }\n this.applyColumnFilters();\n }\n\n /** Entry point that applies search (which cascades into column filters). */\n private applyFilters() {\n this.applySearch();\n }\n\n /**\n * Applies every column filter on top of the searched data using each\n * column's `filterType` ('select', 'exact' or text contains).\n */\n private applyColumnFilters() {\n const data = this.searchedData();\n let filtered = [...data];\n this.columns().forEach((col) => {\n if (col.filter) {\n const filterValue = this.columnFiltersForm.get(col.field)?.value;\n if (filterValue !== null && filterValue !== undefined && filterValue !== '') {\n if (col.filterType === 'select') {\n filtered = filtered.filter((item) => item[col.field] == filterValue);\n } else if (col.filterType === 'exact') {\n const searchTerm = String(filterValue).toLowerCase();\n filtered = filtered.filter(\n (item) => String(item[col.field]).toLowerCase() === searchTerm,\n );\n } else {\n const searchTerm = String(filterValue).toLowerCase();\n filtered = filtered.filter((item) =>\n String(item[col.field]).toLowerCase().includes(searchTerm),\n );\n }\n }\n }\n });\n this.filteredData.set(filtered);\n this.localTotalRecords.set(filtered.length);\n this.applySort();\n this.updateDisplayedData();\n }\n\n /** Slices the filtered rows for the current page. */\n private updateDisplayedData() {\n const filtered = this.filteredData();\n const firstIndex = this.first();\n const rows = this.rowsPerPageLocal();\n const displayed = filtered.slice(firstIndex, firstIndex + rows);\n this.displayedData.set(displayed);\n }\n\n /** Emits the filter chip clicked in the template. */\n onFilterClick(value: string) {\n this.filterClick.emit(value);\n }\n\n /** Toggles the sort direction of a column (first click sorts ascending). */\n toggleSort(field: string) {\n if (this.sortField() === field) {\n this.sortOrder.set(this.sortOrder() * -1);\n } else {\n this.sortField.set(field);\n this.sortOrder.set(1);\n }\n this.first.set(0);\n if (!this.serverSide()) {\n this.applySort();\n this.updateDisplayedData();\n }\n }\n\n /**\n * Sorts the filtered rows by the current field. Rows with null/undefined\n * values are always kept at the end regardless of sort direction.\n */\n private applySort() {\n const field = this.sortField();\n const order = this.sortOrder();\n if (!field) return;\n const data = [...this.filteredData()];\n data.sort((a, b) => {\n const va = a[field];\n const vb = b[field];\n if (va == null && vb == null) return 0;\n if (va == null) return 1; // nulls always at the end\n if (vb == null) return -1;\n if (va < vb) return -1 * order;\n if (va > vb) return 1 * order;\n return 0;\n });\n this.filteredData.set(data);\n }\n\n /** Handles the global search input (updates query, resets page, debounces server mode). */\n onSearchInput(value: string) {\n this.searchQuery.set(value);\n this.first.set(0);\n if (this.serverSide()) {\n this.searchSubject.next(value);\n }\n }\n\n /** Clears a column filter value and hides its input. */\n clearFilter(field: string) {\n const column = this.columns().find((col) => col.field === field);\n const value = column?.filterType === 'select' ? null : '';\n this.columnFiltersForm.get(field)?.setValue(value);\n const visibility = this.showFilterInput();\n this.showFilterInput.set({ ...visibility, [field]: false });\n this.cdr.markForCheck();\n }\n\n /** Toggles the visibility of a column filter input. */\n toggleFilter(field: string) {\n const visibility = this.showFilterInput();\n this.showFilterInput.set({ ...visibility, [field]: !visibility[field] });\n this.cdr.markForCheck();\n }\n\n /**\n * Whether a column filter is non-empty. Avoids treating the number 0 as\n * \"no value\".\n */\n hasFilterValue(field: string): boolean {\n const value = this.columnFiltersForm.get(field)?.value;\n return value !== null && value !== undefined && value !== '';\n }\n\n /** Returns the reactive page report string (template helper). */\n getPageReport(): string {\n return this.pageReport();\n }\n\n /** Goes to the first page (emits pageChange in server-side mode). */\n goToFirst() {\n const rows = this.rowsPerPageLocal();\n this.first.set(0);\n if (this.serverSide()) {\n this.pageChange.emit({\n first: 0,\n rows,\n page: 0,\n pageCount: Math.ceil(this.totalRecords() / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n /** Goes to the last page (emits pageChange in server-side mode). */\n goToLast() {\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n const rows = this.rowsPerPageLocal();\n const lastFirst = Math.max(0, Math.ceil(total / rows) * rows - rows);\n this.first.set(lastFirst);\n if (this.serverSide()) {\n const page = Math.floor(lastFirst / rows);\n this.pageChange.emit({\n first: lastFirst,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n /** Updates rows-per-page and resets to the first page. */\n onRowsPerPageChange(rows: number) {\n rows = Number(rows);\n this.rowsPerPageLocal.set(rows);\n this.first.set(0);\n if (this.serverSide()) {\n this.pageChange.emit({\n first: 0,\n rows,\n page: 0,\n pageCount: Math.ceil(this.totalRecords() / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n /** Emits the refresh output. */\n refreshData() {\n this.refresh.emit();\n }\n\n /** Whether the current page is the first one. */\n isFirstPage(): boolean {\n return this.first() === 0;\n }\n\n /** Whether the current page is the last one. */\n isLastPage(): boolean {\n const total = this.effectiveTotalRecords();\n return this.first() + this.rowsPerPageLocal() >= total;\n }\n\n /** Moves to the next page (emits pageChange in server-side mode). */\n next() {\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n const rows = this.rowsPerPageLocal();\n let first = this.first() + rows;\n if (first >= total) {\n first = total - rows;\n }\n this.first.set(first);\n if (this.serverSide()) {\n const page = Math.floor(first / rows);\n this.pageChange.emit({\n first,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n /** Moves to the previous page (emits pageChange in server mode). */\n prev() {\n const rows = this.rowsPerPageLocal();\n let first = this.first() - rows;\n const total = this.serverSide() ? this.totalRecords() : this.filteredData().length;\n if (first < 0) {\n first = 0;\n }\n this.first.set(first);\n if (this.serverSide()) {\n const page = Math.floor(first / rows);\n this.pageChange.emit({\n first,\n rows,\n page,\n pageCount: Math.ceil(total / rows),\n });\n } else {\n this.updateDisplayedData();\n }\n }\n\n /** Resets the table to the first page. */\n reset() {\n this.goToFirst();\n }\n\n /** Resolves the row action label, static or per-row function. */\n getRowActionLabel(action: RowAction, rowData: any): string {\n return typeof action.label === 'function' ? action.label(rowData) : action.label;\n }\n\n /**\n * Resolves the row action icon: a lucide component, a function returning\n * the icon name, or a raw string resolved by the central icon map.\n */\n getRowActionIconName(action: RowAction, rowData: any): any {\n const icon = action.icon;\n if (typeof icon === 'function') {\n if (icon.prototype === undefined) {\n return icon(rowData);\n }\n return icon;\n }\n return icon;\n }\n\n /** Resolves the CSS class of a row action, static or per-row function. */\n getRowActionClass(action: RowAction, rowData: any): string {\n if (!action.class) return '';\n return typeof action.class === 'function' ? action.class(rowData) : action.class;\n }\n\n /** Whether a header action is disabled. */\n isHeaderActionDisabled(action: TableAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n\n /** Whether a header action is visible. */\n isHeaderActionVisible(action: TableAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n /** Whether a row action is disabled for the given row. */\n isRowActionDisabled(action: RowAction, rowData: any): boolean {\n return action.isDisabled ? action.isDisabled(rowData) : false;\n }\n\n /** Whether a row action is visible for the given row. */\n isRowActionVisible(action: RowAction, rowData: any): boolean {\n return action.isVisible ? action.isVisible(rowData) : true;\n }\n\n /** Truncates a value with an ellipsis past the given character limit. */\n truncate(value: any, limit: number = 30): string {\n if (value === null || value === undefined) return '';\n const str = String(value);\n return str.length > limit ? str.slice(0, limit) + '\\u2026' : str;\n }\n\n /** Resolves the value displayed inside a tag cell, static or per-row function. */\n getTagValue(col: Column, rowData: any): string {\n return col.tagValue ? col.tagValue(rowData) : String(rowData[col.field] ?? '');\n }\n\n /** Resolves and validates the tag severity, falling back to 'secondary'. */\n getTagSeverity(col: Column, rowData: any): TagSeverity {\n const raw = col.tagSeverity ? col.tagSeverity(rowData) : 'secondary';\n const allowed: TagSeverity[] = [\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'contrast',\n ];\n return allowed.includes(raw as TagSeverity) ? (raw as TagSeverity) : 'secondary';\n }\n\n /** Resolves whether the tag in a cell is rounded, static or per-row function. */\n getTagRounded(col: Column, rowData: any): boolean {\n if (typeof col.tagRounded === 'function') return col.tagRounded(rowData);\n return col.tagRounded ?? false;\n }\n\n /** Resolves the icon shown inside a tag cell, static or per-row function. */\n getTagIcon(col: Column, rowData: any): string {\n if (typeof col.tagIcon === 'function') return col.tagIcon(rowData);\n return col.tagIcon ?? '';\n }\n\n /** Resolves the CSS styles of a tag cell, static or per-row function. */\n getTagStyle(col: Column, rowData: any): Record<string, string | number> {\n return col.tagStyle ? col.tagStyle(rowData) || {} : {};\n }\n\n /**\n * trackBy for row identity: prefers `id`/`_id` and falls back to the index.\n */\n trackByRow(row: any, index: number): any {\n return row?.id ?? row?._id ?? index;\n }\n\n /** Keyboard support (Enter/Space) for sorting a column header. */\n onHeaderKeydown(event: KeyboardEvent, col: Column) {\n if (col.field === 'actions' || !col.sortable) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleSort(col.field);\n }\n }\n\n /** Accessible aria-sort value for a given column header. */\n getAriaSort(col: Column): 'ascending' | 'descending' | 'none' {\n if (col.field === 'actions' || !col.sortable) return 'none';\n if (this.sortField() !== col.field) return 'none';\n return this.sortOrder() === 1 ? 'ascending' : 'descending';\n }\n}\n","<div class=\"space-y-2 min-[1440px]:space-y-3 mt-2 min-[1440px]:mt-3 animate-fade-in pb-8\">\n @if (showSearch() || filters().length > 0 || headerActions().length > 0) {\n <div class=\"card p-2 min-[1440px]:p-2.5 flex flex-row items-center justify-between gap-2\">\n <div class=\"flex items-center gap-2 min-[1440px]:gap-3 flex-1 min-w-0\">\n @if (showSearch()) {\n <div class=\"relative w-full md:w-52 min-[1440px]:w-56\">\n <label [for]=\"'shk-table-search'\" class=\"sr-only\">{{\n searchPlaceholder() || ('common.search_placeholder' | transloco)\n }}</label>\n <div class=\"absolute inset-y-0 left-0 pl-2.5 flex items-center pointer-events-none\">\n <svg\n [lucideIcon]=\"getIcon('search')\"\n class=\"w-3.5 h-3.5 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n </div>\n <input\n id=\"shk-table-search\"\n type=\"text\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($any($event.target).value)\"\n [placeholder]=\"searchPlaceholder() || ('common.search_placeholder' | transloco)\"\n class=\"block w-full pl-8 pr-3 py-1.5 text-xs border _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md leading-5 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:outline-none focus:bg-white dark:focus:[background-color:var(--shk-surface-800)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)]\"\n />\n </div>\n }\n @if (filters().length > 0) {\n <div\n class=\"flex _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] p-0.5 rounded-md ml-auto\"\n role=\"group\"\n >\n @for (f of filters(); track f.value) {\n <button\n type=\"button\"\n (click)=\"onFilterClick(f.value)\"\n [attr.aria-pressed]=\"f.value === activeFilter()\"\n class=\"px-2.5 min-[1440px]:px-3 py-1 text-xs font-medium rounded _shk-text-surface-700 dark:[color:var(--shk-surface-700)] transition-all\"\n [class]=\"\n f.value === activeFilter()\n ? 'bg-white shadow-sm dark:[background-color:var(--shk-surface-700)]'\n : ''\n \"\n >\n {{ f.label }}\n </button>\n }\n </div>\n }\n </div>\n @if (headerActions().length > 0) {\n <div class=\"flex items-center gap-1.5 shrink-0\">\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <button\n type=\"button\"\n [class]=\"\n 'inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed ' +\n (action.class || '')\n \"\n [disabled]=\"isHeaderActionDisabled(action)\"\n [attr.aria-label]=\"action.label\"\n (click)=\"action.onClick()\"\n >\n @if (action.icon) {\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n }\n {{ action.label }}\n </button>\n }\n }\n </div>\n }\n </div>\n }\n <div class=\"card p-0 overflow-hidden\" [class.shadow-lg]=\"hasShadow()\">\n <div class=\"table-scroll-wrapper _shk-scrollbar\">\n <table>\n <thead>\n <tr>\n @for (col of columnsWithActions(); track col.field) {\n <th\n scope=\"col\"\n (click)=\"col.field !== 'actions' && col.sortable && toggleSort(col.field)\"\n (keydown)=\"onHeaderKeydown($event, col)\"\n [tabindex]=\"col.field !== 'actions' && col.sortable ? 0 : -1\"\n [attr.role]=\"col.field !== 'actions' && col.sortable ? 'button' : null\"\n [attr.aria-sort]=\"getAriaSort(col)\"\n [attr.data-shk-actions]=\"col.field === 'actions' ? '' : null\"\n [style.cursor]=\"col.field !== 'actions' && col.sortable ? 'pointer' : 'default'\"\n [style.width]=\"col.field === 'actions' ? col.width : null\"\n [style.min-width]=\"col.field === 'actions' ? col.width : null\"\n [style.--shk-col-width]=\"col.field !== 'actions' ? getColumnWidth(col) : null\"\n class=\"px-2 min-[1440px]:px-3 py-2 min-[1440px]:py-2.5 text-left text-[10px] min-[1440px]:text-xs font-bold _shk-text-surface-500 dark:[color:var(--shk-surface-400)] uppercase tracking-wider _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border-b _shk-border dark:[border-color:var(--shk-surface-200)] focus:outline-none focus-visible:ring-1 focus-visible:[--tw-ring-color:var(--shk-primary-500)]\"\n >\n @if (col.field !== 'actions') {\n <div class=\"flex items-center justify-between gap-2\">\n <span>{{ col.header }}</span>\n <div class=\"flex items-center gap-1\">\n @if (col.sortable) {\n <shk-tooltip [text]=\"'table.tooltips.sort' | transloco\">\n @if (sortField() === col.field) {\n <svg\n [lucideIcon]=\"getIcon(sortOrder() === 1 ? 'arrow-up' : 'arrow-down')\"\n class=\"w-3.5 h-3.5 _shk-text-primary\"\n ></svg>\n } @else {\n <svg\n [lucideIcon]=\"getIcon('arrow-up-down')\"\n class=\"w-3.5 h-3.5 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n }\n </shk-tooltip>\n }\n @if (col.filter) {\n <shk-tooltip [text]=\"'table.tooltips.filter' | transloco\">\n <button\n type=\"button\"\n (click)=\"$event.stopPropagation(); toggleFilter(col.field)\"\n [attr.aria-label]=\"'table.tooltips.filter' | transloco\"\n [attr.aria-expanded]=\"showFilterInput()[col.field] || false\"\n class=\"_shk-text-surface-400 dark:[color:var(--shk-surface-500)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-300)] transition-colors\"\n >\n <svg\n [lucideIcon]=\"getIcon('filter')\"\n class=\"w-3.5 h-3.5\"\n [class._shk-text-primary]=\"hasFilterValue(col.field)\"\n ></svg>\n </button>\n </shk-tooltip>\n }\n </div>\n </div>\n @if (col.filter && showFilterInput()[col.field]) {\n <div\n class=\"mt-2\"\n [formGroup]=\"columnFiltersForm\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"relative\">\n @if (col.filterType !== 'select') {\n <label [for]=\"'shk-filter-' + col.field\" class=\"sr-only\">{{\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n }}</label>\n <input\n [id]=\"'shk-filter-' + col.field\"\n type=\"text\"\n [formControlName]=\"col.field\"\n class=\"w-full px-3 py-1.5 text-sm rounded-md border _shk-border dark:[border-color:var(--shk-surface-200)] bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] placeholder:[color:var(--shk-surface-400)] dark:placeholder:[color:var(--shk-surface-500)]\"\n [placeholder]=\"\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n \"\n />\n }\n @if (col.filterType === 'select') {\n <label [for]=\"'shk-filter-' + col.field\" class=\"sr-only\">{{\n col.filterPlaceholder || ('common.search_placeholder' | transloco)\n }}</label>\n <select\n [id]=\"'shk-filter-' + col.field\"\n [formControlName]=\"col.field\"\n class=\"w-full px-2 py-1 text-xs rounded-md border _shk-border dark:[border-color:var(--shk-surface-200)] bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:[border-color:var(--shk-primary-500)] focus:ring-1 focus:[--tw-ring-color:var(--shk-primary-500)] appearance-none\"\n >\n <option [ngValue]=\"null\">{{ 'table.filterAll' | transloco }}</option>\n @for (opt of col.filterOptions || []; track opt.value) {\n <option [ngValue]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n }\n @if (hasFilterValue(col.field) && col.filterType !== 'select') {\n <button\n type=\"button\"\n class=\"absolute right-2 top-1/2 -translate-y-1/2 _shk-text-surface-400 dark:[color:var(--shk-surface-500)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-300)]\"\n (click)=\"clearFilter(col.field)\"\n >\n <svg [lucideIcon]=\"getIcon('x')\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n }\n </div>\n </div>\n }\n } @else {\n <div class=\"flex items-center justify-center\">\n <span>{{ col.header }}</span>\n </div>\n }\n </th>\n }\n </tr>\n </thead>\n @if (loading()) {\n <tbody class=\"border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <tr>\n <td [attr.colspan]=\"columnsWithActions().length\" class=\"text-center py-12\">\n <div\n class=\"flex items-center justify-center\"\n role=\"status\"\n [attr.aria-label]=\"'common.loading' | transloco\"\n >\n <svg\n [lucideIcon]=\"getIcon('loader')\"\n class=\"w-6 h-6 animate-spin _shk-text-primary\"\n ></svg>\n </div>\n </td>\n </tr>\n </tbody>\n } @else if (effectiveDisplayedData().length === 0) {\n <tbody class=\"border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <tr>\n <td [attr.colspan]=\"columnsWithActions().length\" class=\"text-center py-12\">\n <div class=\"flex flex-col items-center\">\n <div\n class=\"w-16 h-16 _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] rounded-full flex items-center justify-center mb-4\"\n >\n <svg\n [lucideIcon]=\"getIcon('inbox')\"\n class=\"w-8 h-8 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"\n ></svg>\n </div>\n <p\n class=\"text-lg font-semibold _shk-text-surface-600 dark:[color:var(--shk-surface-300)]\"\n >\n {{ emptyMessage() || ('common.no_records' | transloco) }}\n </p>\n </div>\n </td>\n </tr>\n </tbody>\n } @else {\n <tbody>\n @for (rowData of effectiveDisplayedData(); track trackByRow(rowData, $index)) {\n <tr\n class=\"hover:[background-color:color-mix(in srgb,var(--shk-primary-50)30%,transparent)] dark:hover:[background-color:color-mix(in srgb,var(--shk-primary-900)10%,transparent)] transition-colors duration-200 border-b _shk-border dark:[border-color:var(--shk-surface-100)]\"\n >\n @for (col of columnsWithActions(); track col.field) {\n <td\n [attr.data-shk-actions]=\"col.field === 'actions' ? '' : null\"\n class=\"px-2 min-[1440px]:px-3 py-2 min-[1440px]:py-2.5 text-xs font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)] whitespace-nowrap\"\n [style.overflow]=\"col.field === 'actions' ? 'visible' : 'hidden'\"\n [style.text-overflow]=\"col.field === 'actions' ? 'clip' : 'ellipsis'\"\n [style.--shk-col-width]=\"col.field !== 'actions' ? getColumnWidth(col) : null\"\n >\n @if (col.field !== 'actions') {\n @if (col.template === 'tag') {\n <shk-tag\n [value]=\"getTagValue(col, rowData)\"\n [severity]=\"getTagSeverity(col, rowData)\"\n [rounded]=\"getTagRounded(col, rowData)\"\n [icon]=\"getTagIcon(col, rowData)\"\n [style]=\"getTagStyle(col, rowData)\"\n />\n } @else if (col.format) {\n <span>{{ col.format(rowData) }}</span>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n customTemplates()[col.field] || defaultTemplate;\n context: { $implicit: rowData, field: col.field }\n \"\n ></ng-container>\n }\n } @else {\n <div class=\"flex items-center justify-start gap-px\">\n @for (action of rowActions(); track $index) {\n @if (isRowActionVisible(action, rowData)) {\n <div class=\"relative group\">\n <shk-tooltip\n [text]=\"getRowActionLabel(action, rowData)\"\n position=\"top\"\n >\n <button\n type=\"button\"\n (click)=\"action.onClick(rowData)\"\n [class]=\"\n 'table-action-btn hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] rounded-md ' +\n getRowActionClass(action, rowData)\n \"\n [disabled]=\"isRowActionDisabled(action, rowData) || false\"\n [attr.aria-label]=\"getRowActionLabel(action, rowData)\"\n >\n <svg\n [lucideIcon]=\"getIcon(getRowActionIconName(action, rowData))\"\n class=\"w-4 h-4\"\n ></svg>\n </button>\n </shk-tooltip>\n </div>\n }\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n }\n </table>\n <ng-template #defaultTemplate let-rowData let-field=\"field\">\n {{ truncate(rowData[field], 30) }}\n </ng-template>\n </div>\n <div\n class=\"flex items-center justify-between gap-4 px-2 min-[1440px]:px-3 py-2 border-t _shk-border dark:[border-color:var(--shk-surface-100)]\"\n >\n <div class=\"text-xs _shk-text-surface-600 dark:[color:var(--shk-surface-400)]\">\n {{ pageReport() }}\n </div>\n <div\n class=\"flex items-center gap-0.5\"\n role=\"navigation\"\n >\n <button\n type=\"button\"\n (click)=\"goToFirst()\"\n [disabled]=\"isFirstPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevrons-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"isFirstPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-4 h-4\"></svg>\n </button>\n <span\n class=\"px-2 text-xs font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n >{{ currentPage() }} / {{ totalPages() }}</span\n >\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"isLastPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-4 h-4\"></svg>\n </button>\n <button\n type=\"button\"\n (click)=\"goToLast()\"\n [disabled]=\"isLastPage()\"\n class=\"p-1 _shk-text-surface-500 hover:[color:var(--shk-surface-700)] dark:[color:var(--shk-surface-400)] dark:hover:[color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed rounded transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('chevrons-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n <div\n class=\"flex items-center gap-1.5 text-xs _shk-text-surface-600 dark:[color:var(--shk-surface-400)]\"\n >\n <label [for]=\"'shk-rows-per-page'\">{{ 'table.rows' | transloco }}</label>\n <select\n id=\"shk-rows-per-page\"\n [value]=\"rowsPerPageLocal()\"\n (change)=\"onRowsPerPageChange($any($event.target).value)\"\n class=\"border _shk-border dark:[border-color:var(--shk-surface-200)] rounded px-2 py-1 text-xs bg-white dark:[background-color:var(--shk-surface-100)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)] focus:outline-none focus:[border-color:var(--shk-primary-500)]\"\n >\n @for (opt of rowsPerPageOptions(); track opt) {\n <option [value]=\"opt\">{{ opt }}</option>\n }\n </select>\n </div>\n </div>\n </div>\n</div>\n","import {\n Component,\n HostListener,\n PLATFORM_ID,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { LucideLayoutDashboard, LucideDynamicIcon, LucideMenu, LucideHouse, LucideWarehouse } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\nexport interface SidebarItem {\n id: string;\n label: string;\n icon?: string | any;\n route?: string;\n children?: SidebarItem[];\n roles?: string[];\n badge?: string | number;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface SidebarGroup {\n id?: string;\n label?: string;\n items: SidebarItem[];\n}\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Collapsible vertical navigation sidebar with groups, icons, badges,\n * role-based filtering, responsive mobile drawer and tooltips.\n */\n@Component({\n selector: 'shk-sidebar',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon, TooltipComponent],\n templateUrl: './sidebar.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n\n .sidebar-transition {\n transition:\n width 0.3s cubic-bezier(0.4, 0, 0.2, 1),\n transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n .sidebar-scroll {\n overflow-y: auto;\n overflow-x: visible;\n }\n\n @media (min-width: 1024px) {\n .sidebar-mobile-transform {\n transform: none !important;\n }\n }\n `,\n ],\n})\nexport class SidebarComponent {\n private platformId = inject(PLATFORM_ID);\n /** Flat list of navigation items (used when no groups are provided). */\n items = input<SidebarItem[]>([]);\n /** Grouped navigation items; takes precedence over `items`. */\n groups = input<SidebarGroup[]>([]);\n /** Brand title shown at the top of the sidebar. */\n title = input<string>('');\n /** Subtitle under the title. */\n subtitle = input<string>('');\n /** Brand logo image/url shown at the top. */\n logo = input<string>('');\n /** id of the item currently highlighted as active. */\n activeItemId = input<string>('');\n /** Role used to filter items that declare `roles`. */\n userRole = input<string>('');\n /** Whether the sidebar can collapse into a rail. */\n collapsible = input<boolean>(true);\n /** Shows the expand/collapse toggle button. */\n showToggle = input<boolean>(true);\n /** Enables the mobile drawer behaviour below lg breakpoint. */\n responsive = input<boolean>(true);\n /** Keeps the sidebar fixed while the page scrolls. */\n fixed = input<boolean>(false);\n /** Adds a drop shadow to the sidebar. */\n hasShadow = input<boolean>(true);\n /** Width in expanded state. */\n expandedWidth = input<string>('16rem');\n /** Width when collapsed. */\n collapsedWidth = input<string>('5rem');\n /** Group ids opened by default on load. */\n defaultExpanded = input<string[]>([]);\n /** Optional transform applied to item labels (e.g. i18n). */\n labelPipe = input<(label: string) => string>((label: string) => label);\n /** Tooltip for the expand action. */\n expandTooltip = input<string>('Expandir');\n /** Tooltip for the collapse action. */\n collapseTooltip = input<string>('Colapsar');\n\n /** Collapsed state, bindable with [(collapsed)]. */\n collapsed = model<boolean>(false);\n /** Mobile drawer open state, bindable with [(mobileOpen)]. */\n mobileOpen = model<boolean>(false);\n\n /** Emitted when a navigation item is clicked. */\n itemClick = output<SidebarItem>();\n /** Emitted with the new collapsed state after toggling. */\n toggle = output<boolean>();\n\n protected getIcon = (name: any) => getIconFromCentral(name, LucideMenu);\n /** Currently selected item id. */\n protected selectedId = signal('');\n /** Set of group ids currently expanded. */\n protected expandedGroups = signal<Set<string>>(new Set());\n\n private isBrowser = false;\n\n constructor() {\n if (isPlatformBrowser(this.platformId)) {\n this.isBrowser = isPlatformBrowser(this.platformId);\n }\n\n effect(() => {\n this.selectedId.set(this.activeItemId());\n });\n\n effect(() => {\n const active = this.activeItemId();\n if (!active) return;\n const parent = this.navItems().find((item) => item.children?.some((c) => c.id === active));\n if (parent) {\n this.expandedGroups.update((set) => {\n if (set.has(parent.id)) return set;\n const next = new Set(set);\n next.add(parent.id);\n return next;\n });\n }\n });\n\n effect(() => {\n const defs = this.defaultExpanded();\n if (!defs.length) return;\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n defs.forEach((id) => next.add(id));\n return next;\n });\n });\n }\n\n /** Current sidebar width depending on the collapsed state. */\n protected width = computed(() =>\n this.collapsed() ? this.collapsedWidth() : this.expandedWidth(),\n );\n\n /** Navigation items after group flattening and role filtering. */\n protected navItems = computed<SidebarItem[]>(() => {\n const role = this.userRole();\n const base = this.groups().length ? this.groups().flatMap((g) => g.items) : this.items();\n return base.filter((item) => {\n if (!item.roles || item.roles.length === 0) return true;\n return role ? item.roles.includes(role) : false;\n });\n });\n\n /** Closes the mobile drawer when the window grows below lg. */\n @HostListener('window:resize', ['$event'])\n onResize(_event: Event): void {\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.set(false);\n }\n }\n\n /** Applies the `labelPipe` transform to an item label. */\n protected label(item: SidebarItem): string {\n return this.labelPipe()(item.label);\n }\n\n /** Whether the item matches the selected id. */\n protected isItemActive(item: SidebarItem): boolean {\n return !!item.id && item.id === this.selectedId();\n }\n\n /** Whether one of the item's children is currently active. */\n protected isGroupActive(item: SidebarItem): boolean {\n return item.children?.some((c) => c.id === this.selectedId()) ?? false;\n }\n\n /** Whether a group is expanded. */\n protected isGroupExpanded(item: SidebarItem): boolean {\n return this.expandedGroups().has(item.id);\n }\n\n /** Toggles the expanded state of a group. */\n protected toggleGroup(item: SidebarItem): void {\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n if (next.has(item.id)) {\n next.delete(item.id);\n } else {\n next.add(item.id);\n }\n return next;\n });\n }\n\n /** Selects an item, emits `itemClick` and closes the mobile drawer when needed. */\n protected onItemClick(item: SidebarItem): void {\n if (item.disabled) return;\n this.selectedId.set(item.id);\n this.itemClick.emit(item);\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.set(false);\n }\n }\n\n /** Toggles collapse (desktop) or the mobile drawer (below lg). */\n protected onToggle(): void {\n if (this.responsive() && this.isBrowser && window.innerWidth < 1024) {\n this.mobileOpen.update((v) => !v);\n } else {\n this.collapsed.update((v) => !v);\n this.toggle.emit(this.collapsed());\n }\n }\n}\n","@if (responsive() && mobileOpen()) {\n <!-- Mobile overlay backdrop (sibling of aside: must NOT be inside the\n transformed aside, otherwise it becomes its containing block and\n only covers the sidebar, also blocking nav clicks on mobile) -->\n <div\n class=\"fixed inset-0 bg-black/50 z-30 lg:hidden\"\n (click)=\"mobileOpen.set(false)\"\n ></div>\n}\n\n<aside\n [class.fixed]=\"fixed()\"\n [class.relative]=\"!fixed()\"\n [class.h-screen]=\"fixed()\"\n [class.h-full]=\"!fixed()\"\n class=\"top-0 left-0 flex flex-col shrink-0 sidebar-transition sidebar-mobile-transform z-40 _shk-bg-white dark:[background-color:var(--shk-surface-50)] border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [class.shadow-sm]=\"hasShadow()\"\n [style.width]=\"width()\"\n [style.transform]=\"responsive() ? (mobileOpen() ? 'translateX(0)' : 'translateX(-100%)') : null\"\n>\n <!-- Logo / Brand -->\n @if (logo() || title() || subtitle()) {\n <div\n class=\"flex items-center h-20 px-4 border-b _shk-border dark:[border-color:var(--shk-surface-100)] shrink-0\"\n >\n <div class=\"flex items-center gap-3 overflow-hidden\">\n @if (logo()) {\n <img [src]=\"logo()\" alt=\"Logo\" class=\"h-16 w-16 shrink-0 object-contain\" />\n }\n @if (!collapsed() && (title() || subtitle())) {\n <div class=\"flex flex-col leading-tight whitespace-nowrap\">\n @if (title()) {\n <span class=\"text-lg font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">\n {{ title() }}\n </span>\n }\n @if (subtitle()) {\n <span class=\"text-sm _shk-text-surface-500 dark:[color:var(--shk-surface-500)]\">\n {{ subtitle() }}\n </span>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Toggle button -->\n @if (showToggle() && collapsible()) {\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n class=\"group absolute -right-3 top-20 z-50 w-6 h-6 rounded-full bg-white dark:[background-color:var(--shk-surface-100)] border _shk-border dark:[border-color:var(--shk-surface-200)] shadow-md max-lg:hidden flex items-center justify-center _shk-text-surface-600 dark:[color:var(--shk-surface-600)] hover:[background-color:var(--shk-primary-50)] dark:hover:[background-color:var(--shk-surface-200)] hover:[color:var(--shk-primary-600)] dark:hover:[color:var(--shk-primary-400)] transition-colors\"\n >\n @if (collapsed()) {\n <svg [lucideIcon]=\"getIcon('chevron-right')\" class=\"w-3 h-3\"></svg>\n } @else {\n <svg [lucideIcon]=\"getIcon('chevron-left')\" class=\"w-3 h-3\"></svg>\n }\n <span\n class=\"absolute left-full ml-1 top-1/2 -translate-y-1/2 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\"\n >\n {{ collapsed() ? expandTooltip() : collapseTooltip() }}\n </span>\n </button>\n }\n\n <ng-content select=\"[sidebarHeader]\"></ng-content>\n\n <!-- Custom content between header and nav -->\n <ng-content select=\"[sidebarContent]\"></ng-content>\n\n <!-- Navigation -->\n <nav class=\"flex-1 sidebar-scroll _shk-scrollbar py-4 px-3\">\n <ul class=\"space-y-1\">\n @for (item of navItems(); track item.id) {\n @if (item.separator) {\n <li class=\"my-2 border-t _shk-border dark:[border-color:var(--shk-surface-200)]\"></li>\n }\n\n @if (item.children?.length) {\n <!-- Group -->\n <li>\n @if (collapsed()) {\n <shk-tooltip [text]=\"label(item)\" position=\"right\" mode=\"fixed\">\n <div\n class=\"flex items-center justify-center px-3 py-2.5 rounded-lg transition-all duration-200\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class._shk-text-surface-500]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n </div>\n </shk-tooltip>\n } @else {\n <button\n type=\"button\"\n (click)=\"toggleGroup(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 group relative\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class.shadow-md]=\"isGroupActive(item)\"\n [class._shk-text-surface-700]=\"!isGroupActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isGroupActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isGroupActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item) }}</span>\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 transition-transform duration-200 shrink-0\"\n [class.rotate-180]=\"isGroupExpanded(item)\"\n ></svg>\n </button>\n\n @if (isGroupExpanded(item)) {\n <ul class=\"ml-3 mt-1 space-y-1 border-l-2 _shk-border dark:[border-color:var(--shk-surface-200)] pl-2\">\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(child)\"\n class=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary-soft]=\"isItemActive(child)\"\n [class._shk-bg-primary-soft-dark]=\"isItemActive(child)\"\n [class._shk-text-primary-700]=\"isItemActive(child)\"\n [class.dark:[color:var(--shk-primary-300)]]=\"isItemActive(child)\"\n [class._shk-text-surface-600]=\"!isItemActive(child)\"\n [class.dark:[color:var(--shk-surface-400)]]=\"!isItemActive(child)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(child)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(child)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(child)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(child)\"\n >\n @if (child.icon) {\n <svg [lucideIcon]=\"getIcon(child.icon)\" class=\"w-4 h-4 shrink-0\"></svg>\n }\n <span class=\"whitespace-nowrap overflow-hidden\">{{ label(child) }}</span>\n @if (isItemActive(child)) {\n <span class=\"w-1.5 h-1.5 rounded-full _shk-bg-primary shrink-0 ml-auto\"></span>\n }\n </button>\n </li>\n }\n </ul>\n }\n }\n </li>\n } @else {\n <!-- Standalone item -->\n <li>\n @if (collapsed()) {\n <shk-tooltip [text]=\"label(item)\" position=\"right\" mode=\"fixed\">\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center justify-center px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n </button>\n </shk-tooltip>\n } @else {\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(item)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item) }}</span>\n @if (item.badge !== undefined) {\n <span\n class=\"text-xs font-bold px-2 py-0.5 rounded-full _shk-bg-primary _shk-text-white shrink-0\"\n [class.hidden]=\"collapsed()\"\n >\n {{ item.badge }}\n </span>\n }\n @if (isItemActive(item)) {\n <span class=\"w-1.5 h-1.5 rounded-full bg-white shrink-0\"></span>\n }\n </button>\n }\n </li>\n }\n }\n </ul>\n </nav>\n\n <!-- Footer -->\n <div class=\"shrink-0 p-2 [&:empty]:hidden\">\n <ng-content select=\"[sidebarFooter]\"></ng-content>\n </div>\n</aside>\n","import {\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon, LucideMenu } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\nimport { TooltipComponent } from '../tooltip/tooltip.component';\n\nexport interface RailSidebarItem {\n id: string;\n label: string;\n icon?: string | any;\n routerLink?: string;\n children?: RailSidebarItem[];\n roles?: string[];\n badge?: string | number;\n disabled?: boolean;\n separator?: boolean;\n}\n\nexport interface RailSidebarSection {\n key: string;\n label: string;\n icon?: string | any;\n routerLink?: string;\n matchPrefixes?: string[];\n items?: RailSidebarItem[];\n}\n\nexport interface RailSidebarSectionEvent {\n key: string;\n routerLink?: string;\n}\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Narrow \"rail\" sidebar that expands into sections. Supports sections, roles,\n * language switching, collapse/expand and responsive tooltips.\n */\n@Component({\n selector: 'shk-rail-sidebar',\n standalone: true,\n imports: [CommonModule, LucideDynamicIcon, TooltipComponent],\n templateUrl: './rail-sidebar.component.html',\n styleUrls: ['./rail-sidebar.component.css'],\n})\nexport class RailSidebarComponent {\n /** Sections presented as expandable areas of the rail. */\n sections = input<RailSidebarSection[]>([]);\n /** Current location url used to detect the active section/item. */\n activeUrl = input<string>('');\n /** Key of the active section, bindable with [(activeSectionKey)]. */\n activeSectionKey = model<string>('');\n /** Collapsed (rail only) state, bindable with [(collapsed)]. */\n collapsed = model<boolean>(false);\n /** Active language code. */\n activeLang = input<string>('es');\n /** Languages available in the language switcher. */\n langs = input<string[]>(['es', 'en']);\n /** Brand logo image/url. */\n logo = input<string>('');\n /** Application name shown when expanded. */\n appName = input<string>('');\n /** Role used to filter items that declare `roles`. */\n userRole = input<string>('');\n /** Optional transform applied to item labels (e.g. i18n). */\n labelPipe = input<(label: string) => string>((label: string) => label);\n /** Width of the collapsed rail. */\n railWidth = input<string>('4.5rem');\n /** Width when a section is expanded. */\n expandedWidth = input<string>('16.5rem');\n /** Tooltip for the workspace/home action. */\n workspaceTooltip = input<string>('Inicio');\n /** Tooltip for the logout action. */\n logoutTooltip = input<string>('Cerrar sesión');\n /** Tooltip for collapsing the sidebar. */\n collapseTooltip = input<string>('Colapsar');\n /** Tooltip for expanding the sidebar. */\n expandTooltip = input<string>('Expandir');\n\n /** Emitted when a section is selected, with its key and optional route. */\n sectionSelected = output<RailSidebarSectionEvent>();\n /** Emitted when a navigation item is clicked. */\n itemClick = output<RailSidebarItem>();\n /** Emitted with the next language code when the user switches language. */\n setLang = output<string>();\n /** Emitted when the user requests to log out. */\n logoutRequested = output<void>();\n /** Emitted with the new collapsed state after toggling. */\n toggleSidebar = output<boolean>();\n /** Emitted when the workspace/home entry is clicked. */\n workspaceClick = output<void>();\n\n protected getIcon = (name: any) => getIconFromCentral(name, LucideMenu);\n /** Set of group ids currently expanded. */\n protected expandedGroups = signal<Set<string>>(new Set());\n\n constructor() {\n effect(() => {\n const url = this.activeUrl();\n if (!url) return;\n const section = this.sections().find((s) => {\n if (s.matchPrefixes?.length) {\n return s.matchPrefixes.some((prefix) => url.startsWith(prefix));\n }\n return s.routerLink ? url.startsWith(s.routerLink) : false;\n });\n if (section) {\n this.activeSectionKey.set(section.key);\n }\n });\n }\n\n /** Current sidebar width depending on the collapsed state. */\n protected width = computed(() =>\n this.collapsed() ? this.railWidth() : this.expandedWidth(),\n );\n\n /** The section currently selected. */\n protected activeSection = computed<RailSidebarSection | null>(\n () =>\n this.sections().find((s) => s.key === this.activeSectionKey()) ?? null,\n );\n\n /** Items of the active section, filtered by role. */\n protected navItems = computed<RailSidebarItem[]>(() => {\n const role = this.userRole();\n const items = this.activeSection()?.items ?? [];\n return items.filter((item) => {\n if (!item.roles || item.roles.length === 0) return true;\n return role ? item.roles.includes(role) : false;\n });\n });\n\n /** Applies the `labelPipe` transform to a label. */\n protected label(label: string): string {\n return this.labelPipe()(label);\n }\n\n /** Whether the section matches the active key. */\n protected isSectionActive(section: RailSidebarSection): boolean {\n return section.key === this.activeSectionKey();\n }\n\n /** Whether the item is the best route match for the active url. */\n protected isItemActive(item: RailSidebarItem): boolean {\n if (!item.routerLink) return false;\n return this.bestMatchItem() === item;\n }\n\n /** Whether one of the item's children matches the active url. */\n protected isGroupActive(item: RailSidebarItem): boolean {\n return (\n item.children?.some(\n (c) => c.routerLink && this.matchesUrl(c.routerLink, this.activeUrl()),\n ) ?? false\n );\n }\n\n /** Exact or prefix match between a router link and the active url. */\n private matchesUrl(routerLink: string, url: string): boolean {\n return url === routerLink || url.startsWith(routerLink + '/');\n }\n\n /** Longest (most specific) item whose route matches the active url. */\n private bestMatchItem(): RailSidebarItem | null {\n const url = this.activeUrl();\n let best: RailSidebarItem | null = null;\n for (const item of this.navItems()) {\n if (item.routerLink && this.matchesUrl(item.routerLink, url)) {\n if (!best || item.routerLink.length > best.routerLink!.length) {\n best = item;\n }\n }\n for (const child of item.children ?? []) {\n if (!child.routerLink || !this.matchesUrl(child.routerLink, url)) continue;\n if (!best || child.routerLink.length > best.routerLink!.length) {\n best = child;\n }\n }\n }\n return best;\n }\n\n /** Whether a group is expanded. */\n protected isGroupExpanded(item: RailSidebarItem): boolean {\n return this.expandedGroups().has(item.id);\n }\n\n /** Toggles the expanded state of a group. */\n protected toggleGroup(item: RailSidebarItem): void {\n this.expandedGroups.update((set) => {\n const next = new Set(set);\n if (next.has(item.id)) {\n next.delete(item.id);\n } else {\n next.add(item.id);\n }\n return next;\n });\n }\n\n /** Selects a section, emits `sectionSelected` and expands the rail when collapsed. */\n protected onSectionClick(section: RailSidebarSection): void {\n this.activeSectionKey.set(section.key);\n this.sectionSelected.emit({ key: section.key, routerLink: section.routerLink });\n if (this.collapsed()) {\n this.collapsed.set(false);\n this.toggleSidebar.emit(false);\n }\n }\n\n /** Emits `itemClick` for a navigation item (skipping disabled items). */\n protected onItemClick(item: RailSidebarItem): void {\n if (item.disabled) return;\n this.itemClick.emit(item);\n }\n\n /** Emits `workspaceClick` and expands the sidebar if it was collapsed. */\n protected onWorkspace(): void {\n this.workspaceClick.emit();\n if (this.collapsed()) {\n this.collapsed.set(false);\n this.toggleSidebar.emit(false);\n }\n }\n\n /** Cycles to the next language and emits `setLang`. */\n protected onToggleLang(): void {\n const langs = this.langs();\n if (langs.length === 0) return;\n const idx = langs.indexOf(this.activeLang());\n const next = langs[(idx + 1) % langs.length] ?? langs[0];\n this.setLang.emit(next);\n }\n\n /** Toggles collapse and emits `toggleSidebar`. */\n protected onToggleSidebar(): void {\n this.collapsed.update((v) => !v);\n this.toggleSidebar.emit(this.collapsed());\n }\n}\n","<aside\n class=\"h-full flex overflow-hidden shrink-0 _shk-bg-white dark:[background-color:var(--shk-surface-50)] border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [style.width]=\"width()\"\n>\n <!-- Rail: vertical icon column -->\n <div\n class=\"h-full flex flex-col items-center shrink-0 px-[0.3rem] py-2 gap-1 border-r _shk-border dark:[border-color:var(--shk-surface-100)]\"\n [style.width]=\"railWidth()\"\n >\n <!-- Workspace / logo -->\n <div class=\"flex items-center justify-center w-full\">\n <button\n type=\"button\"\n (click)=\"onWorkspace()\"\n [class.is-collapsed]=\"collapsed()\"\n class=\"rail-workspace w-[3.2rem] h-[3.2rem] rounded-xl _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] border-none grid place-items-center p-0 relative transition-all\"\n [title]=\"workspaceTooltip()\"\n >\n @if (logo()) {\n <img [src]=\"logo()\" alt=\"Logo\" class=\"rail-app-icon w-8 h-8 object-contain\" />\n } @else {\n <svg [lucideIcon]=\"getIcon('menu')\" class=\"rail-app-icon w-6 h-6 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"></svg>\n }\n @if (collapsed()) {\n <svg [lucideIcon]=\"getIcon('panel-right')\" class=\"rail-toggle-icon w-5 h-5 _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"></svg>\n }\n </button>\n </div>\n\n <!-- Section actions -->\n <div class=\"rail-actions flex-1 flex flex-col items-center gap-1 pt-1\">\n @for (section of sections(); track section.key) {\n <shk-tooltip [text]=\"label(section.label)\" position=\"right\" mode=\"fixed\">\n <button\n type=\"button\"\n (click)=\"onSectionClick(section)\"\n class=\"rail-icon w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [class.is-active]=\"isSectionActive(section)\"\n [attr.aria-label]=\"label(section.label)\"\n >\n <svg [lucideIcon]=\"getIcon(section.icon)\" class=\"w-5 h-5\"></svg>\n </button>\n </shk-tooltip>\n }\n </div>\n\n <!-- Bottom: language + logout -->\n <div class=\"rail-bottom mt-auto flex flex-col items-center gap-1\">\n <button\n type=\"button\"\n (click)=\"onToggleLang()\"\n class=\"rail-icon w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [title]=\"activeLang()\"\n >\n <div class=\"flex flex-col items-center gap-[0.15rem]\">\n <svg [lucideIcon]=\"getIcon('globe')\" class=\"w-5 h-5\"></svg>\n <span class=\"rail-lang-code text-[0.5rem] font-bold tracking-[0.05em] leading-none\">{{ activeLang() | uppercase }}</span>\n </div>\n </button>\n\n <button\n type=\"button\"\n (click)=\"logoutRequested.emit()\"\n class=\"rail-icon rail-logout w-[3.4rem] h-[3.4rem] rounded-[0.85rem] grid place-items-center transition-all cursor-pointer\"\n [title]=\"logoutTooltip()\"\n >\n <svg [lucideIcon]=\"getIcon('log-out')\" class=\"w-5 h-5\"></svg>\n </button>\n </div>\n </div>\n\n <!-- Nav: section panel (hidden when collapsed) -->\n @if (!collapsed()) {\n <div class=\"flex-1 min-w-0 flex flex-col _shk-bg-white dark:[background-color:var(--shk-surface-50)]\">\n <!-- Brand header -->\n <div class=\"flex items-center justify-between gap-2 px-3 py-4 border-b _shk-border dark:[border-color:var(--shk-surface-100)]\">\n <span class=\"nav-app text-base font-bold whitespace-nowrap overflow-hidden text-ellipsis _shk-text-surface-800 dark:[color:var(--shk-surface-800)]\">\n {{ appName() }}\n </span>\n <button\n type=\"button\"\n (click)=\"onToggleSidebar()\"\n class=\"nav-toggle w-[1.8rem] h-[1.8rem] rounded-lg border-none bg-transparent grid place-items-center cursor-pointer shrink-0 transition-colors _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\"\n [title]=\"collapseTooltip()\"\n >\n <svg [lucideIcon]=\"getIcon('panel-right')\" class=\"w-4 h-4\"></svg>\n </button>\n </div>\n\n <!-- Menu -->\n <nav class=\"flex-1 overflow-y-auto _shk-scrollbar px-2 py-3\">\n @if (activeSection()) {\n <div class=\"px-2 pb-3\">\n <span class=\"nav-section-label text-xs font-bold tracking-[0.08em] uppercase _shk-text-surface-400 dark:[color:var(--shk-surface-500)] block whitespace-nowrap overflow-hidden text-ellipsis\">\n {{ label(activeSection()!.label) }}\n </span>\n </div>\n }\n\n <ul class=\"space-y-1\">\n @for (item of navItems(); track item.id) {\n @if (item.separator) {\n <li class=\"my-2 border-t _shk-border dark:[border-color:var(--shk-surface-200)]\"></li>\n }\n\n @if (item.children?.length) {\n <!-- Expandable group -->\n <li>\n <button\n type=\"button\"\n (click)=\"toggleGroup(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isGroupActive(item)\"\n [class._shk-text-white]=\"isGroupActive(item)\"\n [class.shadow-md]=\"isGroupActive(item)\"\n [class._shk-text-surface-700]=\"!isGroupActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isGroupActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isGroupActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isGroupActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item.label) }}</span>\n <svg\n [lucideIcon]=\"getIcon('chevron-down')\"\n class=\"w-4 h-4 transition-transform duration-200 shrink-0\"\n [class.rotate-180]=\"isGroupExpanded(item)\"\n ></svg>\n </button>\n\n @if (isGroupExpanded(item)) {\n <ul class=\"ml-3 mt-1 space-y-1 border-l-2 _shk-border dark:[border-color:var(--shk-surface-200)] pl-2\">\n @for (child of item.children; track child.id) {\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(child)\"\n class=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary-soft]=\"isItemActive(child)\"\n [class._shk-bg-primary-soft-dark]=\"isItemActive(child)\"\n [class._shk-text-primary-700]=\"isItemActive(child)\"\n [class.dark:[color:var(--shk-primary-300)]]=\"isItemActive(child)\"\n [class._shk-text-surface-600]=\"!isItemActive(child)\"\n [class.dark:[color:var(--shk-surface-400)]]=\"!isItemActive(child)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(child)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(child)\"\n [class.hover:[color:var(--shk-surface-900)]]=\"!isItemActive(child)\"\n [class.dark:hover:[color:var(--shk-surface-700)]]=\"!isItemActive(child)\"\n >\n @if (child.icon) {\n <svg [lucideIcon]=\"getIcon(child.icon)\" class=\"w-4 h-4 shrink-0\"></svg>\n }\n <span class=\"whitespace-nowrap overflow-hidden\">{{ label(child.label) }}</span>\n @if (isItemActive(child)) {\n <span class=\"w-1.5 h-1.5 rounded-full _shk-bg-primary shrink-0 ml-auto\"></span>\n }\n </button>\n </li>\n }\n </ul>\n }\n </li>\n } @else {\n <!-- Standalone item -->\n <li>\n <button\n type=\"button\"\n (click)=\"onItemClick(item)\"\n class=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-all duration-200\"\n [class._shk-bg-primary]=\"isItemActive(item)\"\n [class._shk-text-white]=\"isItemActive(item)\"\n [class.shadow-md]=\"isItemActive(item)\"\n [class._shk-text-surface-700]=\"!isItemActive(item)\"\n [class.dark:[color:var(--shk-surface-600)]]=\"!isItemActive(item)\"\n [class.hover:[background-color:var(--shk-surface-100)]]=\"!isItemActive(item)\"\n [class.dark:hover:[background-color:var(--shk-surface-200)]]=\"!isItemActive(item)\"\n >\n @if (item.icon) {\n <svg [lucideIcon]=\"getIcon(item.icon)\" class=\"w-5 h-5 shrink-0\"></svg>\n }\n <span class=\"flex-1 text-left whitespace-nowrap overflow-hidden\">{{ label(item.label) }}</span>\n @if (item.badge !== undefined) {\n <span class=\"text-xs font-bold px-2 py-0.5 rounded-full _shk-bg-primary _shk-text-white shrink-0\">\n {{ item.badge }}\n </span>\n }\n </button>\n </li>\n }\n }\n </ul>\n </nav>\n </div>\n }\n</aside>\n","import {\n Component,\n input,\n viewChild,\n ElementRef,\n effect,\n untracked,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport { Chart, registerables } from 'chart.js';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Chart.js wrapper that renders line, bar, pie, doughnut or polarArea charts\n * and updates them reactively as the inputs change.\n */\n@Component({\n selector: 'shk-chart',\n standalone: true,\n template: `\n <div class=\"relative h-full w-full\">\n <canvas #canvas></canvas>\n </div>\n `,\n})\nexport class ChartComponent implements AfterViewInit, OnDestroy {\n /** Guarantees Chart.js plugins are only registered once. */\n private static registered = false;\n\n /** Type of chart to render. */\n type = input<'line' | 'bar' | 'pie' | 'doughnut' | 'polarArea'>('bar');\n /** Chart.js datasets payload. */\n data = input<any>({ datasets: [] });\n /** Chart.js options object. */\n options = input<any>({});\n\n /** Reference to the inner canvas element. */\n private canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n /** Live Chart.js instance. */\n private chartInstance: Chart | null = null;\n /** Whether the view has been initialized yet. */\n private initialized = false;\n\n constructor() {\n if (!ChartComponent.registered) {\n Chart.register(...registerables);\n ChartComponent.registered = true;\n }\n\n effect(() => {\n const t = this.type();\n const d = this.data();\n const o = this.options();\n untracked(() => {\n if (!this.initialized) return;\n this.updateChart(t, d, o);\n });\n });\n }\n\n /** Creates the initial chart once the canvas is available. */\n ngAfterViewInit(): void {\n this.initialized = true;\n this.initChart();\n }\n\n /** Destroys the Chart.js instance. */\n ngOnDestroy(): void {\n this.chartInstance?.destroy();\n }\n\n /** Clears the canvas by reassigning its width. */\n private resetCanvas(): void {\n const canvas = this.canvasRef().nativeElement;\n canvas.width = canvas.width;\n }\n\n /** Creates a new Chart.js instance on the canvas. */\n private initChart(): void {\n this.resetCanvas();\n const canvas = this.canvasRef().nativeElement;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n this.chartInstance = new Chart(ctx, {\n type: this.type(),\n data: this.deepClone(this.data()),\n options: this.deepClone(this.options()),\n });\n this.chartInstance.resize();\n }\n\n /** Deep clones a value to detach it from Angular's reactive objects. */\n private deepClone<T>(value: T): T {\n try {\n if (typeof structuredClone === 'function') return structuredClone(value);\n } catch {}\n return JSON.parse(JSON.stringify(value));\n }\n\n /** Applies the new data/options, rebuilding the chart when the type changes. */\n private updateChart(type: string, data: any, options: any): void {\n if (!this.chartInstance) {\n this.initChart();\n return;\n }\n\n const config = this.chartInstance.config as any;\n if (type !== config.type) {\n this.chartInstance.stop();\n this.chartInstance.destroy();\n this.chartInstance = null;\n this.resetCanvas();\n this.initChart();\n return;\n }\n\n this.chartInstance.data = data;\n this.chartInstance.options = options;\n this.chartInstance.update();\n }\n}\n","/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Default dataset colors used by the ChartComponent when no palette is provided. */\nexport const COLOR_PALETTE = [\n { bg: 'rgba(59, 130, 246, 0.2)', border: 'rgb(59, 130, 246)' },\n { bg: 'rgba(34, 197, 94, 0.2)', border: 'rgb(34, 197, 94)' },\n { bg: 'rgba(249, 115, 22, 0.2)', border: 'rgb(249, 115, 22)' },\n { bg: 'rgba(139, 92, 246, 0.2)', border: 'rgb(139, 92, 246)' },\n { bg: 'rgba(236, 72, 153, 0.2)', border: 'rgb(236, 72, 153)' },\n { bg: 'rgba(6, 182, 212, 0.2)', border: 'rgb(6, 182, 212)' },\n];\n\n/**\n * Reads the current `--shk-*` CSS variables from the document and returns\n * the text, muted and border colors used by charts to follow the active theme.\n */\nexport function readThemeColors() {\n const docStyle = getComputedStyle(document.documentElement);\n return {\n text: docStyle.getPropertyValue('--shk-surface-900') || '#27272a',\n muted: docStyle.getPropertyValue('--shk-surface-500') || '#71717a',\n border: docStyle.getPropertyValue('--shk-surface-200') || '#e4e4e7',\n };\n}","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n LucideDynamicIcon,\n LucideCircleQuestionMark,\n LucideBus,\n LucideCar,\n LucideHotel,\n LucideMapPin,\n LucideMountain,\n LucidePackage,\n LucideShield,\n LucideShip,\n LucideTag,\n LucideTicket,\n LucideUserRound,\n LucideUtensils,\n} from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** A chip shown under a sub item (time, pricing model, quantity, etc). */\nexport interface TimelineMeta {\n icon: string | any;\n label?: string;\n value: string;\n}\n\n/** A row inside a timeline item (e.g. an activity of a tour day). */\nexport interface TimelineSubItem {\n id: string | number;\n title: string;\n subtitle?: string;\n /** Used to look up icon / color in `iconMap` and `iconColors`. */\n type?: string;\n /** Overrides the resolved icon (name or component). */\n icon?: string | any;\n /** Hex background for the icon box (fallback). */\n color?: string;\n /** Hex text color for the icon (fallback). */\n colorText?: string;\n /** Custom CSS classes for the icon box (takes precedence over inline colors). */\n iconClass?: string;\n optional?: boolean;\n optionalLabel?: string;\n meta?: TimelineMeta[];\n price?: string | number;\n}\n\n/** A single event in the timeline (e.g. a tour day). */\nexport interface TimelineItem {\n id: string | number;\n /** Text shown inside the marker (falls back to the auto index). */\n markerText?: string | number;\n title?: string;\n subtitle?: string;\n description?: string;\n /** Small pill shown above the title (e.g. \"Día 1\"). */\n badge?: string | number;\n badgeIcon?: string | any;\n /** CSS classes for the marker (falls back to the cycled gradient palette). */\n color?: string;\n subItems?: TimelineSubItem[];\n}\n\n/** A button rendered in the header. */\nexport interface TimelineAction {\n label: string;\n icon: string | any;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\n/** An action rendered in the item card footer. */\nexport interface TimelineItemAction {\n label: string | ((item: TimelineItem) => string);\n icon: string | any | ((item: TimelineItem) => string | any);\n onClick: (item: TimelineItem) => void;\n class?: string | ((item: TimelineItem) => string);\n isVisible?: (item: TimelineItem) => boolean;\n isDisabled?: (item: TimelineItem) => boolean;\n}\n\n/** An action rendered on hover over a sub item. */\nexport interface TimelineSubItemAction {\n label: string | ((item: TimelineItem, subItem: TimelineSubItem) => string);\n icon: string | any | ((item: TimelineItem, subItem: TimelineSubItem) => string | any);\n onClick: (item: TimelineItem, subItem: TimelineSubItem) => void;\n isVisible?: (item: TimelineItem, subItem: TimelineSubItem) => boolean;\n isDisabled?: (item: TimelineItem, subItem: TimelineSubItem) => boolean;\n}\n\nexport type TimelineAlignment = 'left' | 'alternate';\nexport type TimelineMarkerSize = 'sm' | 'md' | 'lg';\n\nexport const DEFAULT_MARKER_GRADIENTS: string[] = [\n 'bg-gradient-to-br from-blue-500 to-blue-600',\n 'bg-gradient-to-br from-emerald-500 to-emerald-600',\n 'bg-gradient-to-br from-violet-500 to-violet-600',\n 'bg-gradient-to-br from-orange-500 to-orange-600',\n 'bg-gradient-to-br from-rose-500 to-rose-600',\n 'bg-gradient-to-br from-cyan-500 to-cyan-600',\n 'bg-gradient-to-br from-amber-500 to-amber-600',\n 'bg-gradient-to-br from-indigo-500 to-indigo-600',\n 'bg-gradient-to-br from-teal-500 to-teal-600',\n 'bg-gradient-to-br from-pink-500 to-pink-600',\n];\n\n/** Supplier-type style palette used by the original wac-app timeline. */\nexport const DEFAULT_SUPPLIER_ICON_COLORS: Record<\n string,\n { bg: string; text: string }\n> = {\n accommodation: { bg: '#3d5a80', text: '#ffffff' },\n air_tickets: { bg: '#98c1d9', text: '#293241' },\n rent_a_car: { bg: '#ee6c4d', text: '#ffffff' },\n excursion: { bg: '#e0fbfc', text: '#293241' },\n transfer: { bg: '#293241', text: '#ffffff' },\n cruise: { bg: '#3d5a80', text: '#ffffff' },\n insurance: { bg: '#98c1d9', text: '#293241' },\n restaurant: { bg: '#6b7280', text: '#ffffff' },\n visit: { bg: '#14b8a6', text: '#ffffff' },\n guide: { bg: '#06b6d4', text: '#ffffff' },\n package: { bg: '#84cc16', text: '#ffffff' },\n other: { bg: '#e0fbfc', text: '#293241' },\n};\n\n/** Maps a sub-item `type` to a lucide icon component. */\nexport const DEFAULT_SUPPLIER_TYPE_ICONS: Record<string, any> = {\n accommodation: LucideHotel,\n air_tickets: LucideTicket,\n rent_a_car: LucideCar,\n excursion: LucideMountain,\n transfer: LucideBus,\n cruise: LucideShip,\n insurance: LucideShield,\n restaurant: LucideUtensils,\n visit: LucideMapPin,\n guide: LucideUserRound,\n package: LucidePackage,\n other: LucideTag,\n};\n\n@Component({\n selector: 'shk-timeline',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './timeline.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .timeline-icon-btn {\n padding: 0.375rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.5rem;\n color: var(--shk-primary-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out,\n opacity 0.15s ease-in-out;\n }\n .timeline-icon-btn:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-primary-50) 60%, transparent);\n color: var(--shk-primary-700);\n }\n .timeline-icon-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .timeline-icon-btn svg {\n width: 0.875rem !important;\n height: 0.875rem !important;\n }\n .shk-timeline-card {\n animation: shk-timeline-fade-in 0.3s ease-out;\n }\n @keyframes shk-timeline-fade-in {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class TimelineComponent {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideCircleQuestionMark);\n\n /** Timeline data. */\n items = input<TimelineItem[]>([]);\n\n // ---------- Layout ----------\n /** 'left' = line and markers on the left; 'alternate' = cards alternate around a centered line on lg+. */\n alignment = input<TimelineAlignment>('alternate');\n /** Shows/hides the vertical connector line. */\n showLine = input<boolean>(true);\n /** Marker diameter. */\n markerSize = input<TimelineMarkerSize>('md');\n /** Gradient classes cycled across markers when the item has no `color`. */\n markerGradients = input<string[]>(DEFAULT_MARKER_GRADIENTS);\n /** Shows the info column on the opposite side of the card (alternate mode, lg+). */\n showOpposite = input<boolean>(true);\n /** Shows the item description. */\n showDescription = input<boolean>(true);\n /** Shows meta chips inside sub items. */\n showSubItemMeta = input<boolean>(true);\n /** Shows the price of each sub item. */\n showSubItemPrice = input<boolean>(true);\n /** Auto-append \"N {subItemCountLabel}\" under the title when the item has no subtitle. */\n showSubItemCount = input<boolean>(false);\n subItemCountLabel = input<string>('elementos');\n\n // ---------- Header ----------\n showHeader = input<boolean>(true);\n headerTitle = input<string>('');\n /** Convenience \"add\" button in the header. */\n showAddItem = input<boolean>(false);\n addItemLabel = input<string>('Añadir');\n addItemIcon = input<string>('plus');\n addItemTooltip = input<string>('Añadir elemento');\n headerActions = input<TimelineAction[]>([]);\n\n // ---------- Actions ----------\n /** Renders \"+ Añadir sub-elemento\" in each card footer. */\n showAddSubItem = input<boolean>(false);\n addSubItemLabel = input<string>('Añadir');\n addSubItemTooltip = input<string>('Añadir sub-elemento');\n itemActions = input<TimelineItemAction[]>([]);\n subItemActions = input<TimelineSubItemAction[]>([]);\n\n // ---------- Sub-item icon mapping ----------\n /** Maps a sub-item `type` to a lucide icon (name or component). */\n iconMap = input<{ [type: string]: string | any }>({});\n /** Maps a sub-item `type` to its icon-box colors. */\n iconColors = input<{ [type: string]: { bg: string; text: string } }>({});\n /** Icon used when nothing matches. */\n fallbackIcon = input<string | any>('circle-help');\n\n // ---------- Empty state ----------\n showEmptyState = input<boolean>(true);\n emptyMessage = input<string>('Sin elementos');\n emptyIcon = input<string | any>('calendar-days');\n\n // ---------- Labels ----------\n editTooltip = input<string>('Editar');\n deleteTooltip = input<string>('Eliminar');\n optionalLabel = input<string>('Opcional');\n noSubItemsMessage = input<string>('');\n\n /** Custom content templates: keys 'marker', 'opposite', 'content', 'description', 'subItem', 'empty'. */\n customTemplates = input<{ [key: string]: any }>({});\n\n // ---------- Outputs ----------\n addItem = output<void>();\n addSubItem = output<TimelineItem>();\n itemClick = output<TimelineItem>();\n subItemClick = output<{ item: TimelineItem; subItem: TimelineSubItem }>();\n\n // ---------- Helpers ----------\n markerText(item: TimelineItem, index: number): string | number {\n return item.markerText ?? index + 1;\n }\n\n markerClass(item: TimelineItem, index: number): string {\n const base = 'flex items-center justify-center rounded-full text-white shadow-md';\n const size =\n this.markerSize() === 'sm'\n ? 'w-8 h-8 text-xs'\n : this.markerSize() === 'lg'\n ? 'w-12 h-12 text-base'\n : 'w-10 h-10 text-sm';\n const color = item.color || this.markerGradients()[index % this.markerGradients().length];\n return `${base} ${size} ${color}`;\n }\n\n markerColumnClass(): string {\n const size =\n this.markerSize() === 'sm' ? 'w-8' : this.markerSize() === 'lg' ? 'w-12' : 'w-10';\n return `relative z-10 flex justify-center shrink-0 ${size}`;\n }\n\n alternateMarkerColumnClass(): string {\n return `${this.markerColumnClass()} lg:absolute lg:left-1/2 lg:-translate-x-1/2 lg:top-0`;\n }\n\n lineClass(): string {\n const pos =\n this.markerSize() === 'sm' ? 'left-4' : this.markerSize() === 'lg' ? 'left-6' : 'left-5';\n const base = `absolute top-4 bottom-4 w-px _shk-bg-surface-200 dark:[background-color:var(--shk-surface-200)] ${pos}`;\n if (this.alignment() === 'alternate') {\n return `${base} lg:left-1/2 lg:-translate-x-1/2`;\n }\n return base;\n }\n\n subItemIconName(sub: TimelineSubItem): string {\n const type = sub.type || '';\n return sub.icon || this.iconMap()[type] || this.fallbackIcon();\n }\n\n subItemStyle(sub: TimelineSubItem): { [key: string]: string } | undefined {\n const palette = this.iconColors()[sub.type || ''];\n if (palette) return { 'background-color': palette.bg, color: palette.text };\n return {\n 'background-color': sub.color || '#6b7280',\n color: sub.colorText || '#ffffff',\n };\n }\n\n // ---------- Header actions ----------\n isHeaderActionVisible(action: TimelineAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n isHeaderActionDisabled(action: TimelineAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n\n // ---------- Item actions ----------\n getItemActionLabel(action: TimelineItemAction, item: TimelineItem): string {\n return typeof action.label === 'function' ? action.label(item) : action.label;\n }\n\n getItemActionIconName(action: TimelineItemAction, item: TimelineItem): any {\n const icon = action.icon;\n if (typeof icon === 'function') {\n if (icon.prototype === undefined) {\n return icon(item);\n }\n return icon;\n }\n return icon;\n }\n\n getItemActionClass(action: TimelineItemAction, item: TimelineItem): string {\n if (!action.class) return '';\n return typeof action.class === 'function' ? action.class(item) : action.class;\n }\n\n isItemActionVisible(action: TimelineItemAction, item: TimelineItem): boolean {\n return action.isVisible ? action.isVisible(item) : true;\n }\n\n isItemActionDisabled(action: TimelineItemAction, item: TimelineItem): boolean {\n return action.isDisabled ? action.isDisabled(item) : false;\n }\n\n // ---------- Sub-item actions ----------\n getSubItemActionLabel(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): string {\n return typeof action.label === 'function' ? action.label(item, sub) : action.label;\n }\n\n getSubItemActionIconName(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): any {\n const icon = action.icon;\n if (typeof icon === 'function') {\n if (icon.prototype === undefined) {\n return icon(item, sub);\n }\n return icon;\n }\n return icon;\n }\n\n isSubItemActionVisible(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): boolean {\n return action.isVisible ? action.isVisible(item, sub) : true;\n }\n\n isSubItemActionDisabled(action: TimelineSubItemAction, item: TimelineItem, sub: TimelineSubItem): boolean {\n return action.isDisabled ? action.isDisabled(item, sub) : false;\n }\n}\n","<div class=\"space-y-4\">\n\n <!-- ============ Header ============ -->\n @if (showHeader() && (headerTitle() || showAddItem() || headerActions().length > 0)) {\n <div class=\"flex flex-wrap items-center justify-between gap-2\">\n @if (headerTitle()) {\n <div class=\"text-sm font-semibold _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\">\n {{ headerTitle() }}\n </div>\n }\n <div class=\"flex items-center gap-1.5 ml-auto\">\n @if (showAddItem()) {\n <button\n type=\"button\"\n (click)=\"addItem.emit()\"\n [attr.aria-label]=\"addItemTooltip()\"\n class=\"inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon(addItemIcon())\" class=\"w-3.5 h-3.5\"></svg>\n {{ addItemLabel() }}\n </button>\n }\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <button\n type=\"button\"\n [class]=\"action.class || 'inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md _shk-bg-primary text-white hover:[background-color:var(--shk-primary-700)] transition-colors disabled:opacity-50 disabled:cursor-not-allowed'\"\n [disabled]=\"isHeaderActionDisabled(action)\"\n (click)=\"action.onClick()\"\n >\n @if (action.icon) {\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n }\n {{ action.label }}\n </button>\n }\n }\n </div>\n </div>\n }\n\n <!-- ============ Timeline ============ -->\n @if (items().length > 0) {\n <div class=\"relative\">\n @if (showLine()) {\n <div [class]=\"lineClass()\" aria-hidden=\"true\"></div>\n }\n\n @for (item of items(); track item.id; let i = $index) {\n @if (alignment() === 'alternate') {\n <div class=\"relative flex items-start gap-4 lg:grid lg:grid-cols-2 lg:gap-0\">\n <!-- Marker (centered on desktop) -->\n <div [class]=\"alternateMarkerColumnClass()\">\n <span [class]=\"markerClass(item, i)\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['marker'] || defaultMarker; context: { $implicit: item, index: i }\"\n ></ng-container>\n </span>\n </div>\n\n <!-- Content card -->\n <div\n class=\"flex-1 min-w-0\"\n [class.lg:order-1]=\"$even\"\n [class.lg:order-2]=\"!$even\"\n [class.lg:pr-12]=\"$even\"\n [class.lg:pl-12]=\"!$even\"\n >\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['content'] || card; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n\n <!-- Opposite info -->\n @if (showOpposite()) {\n <div\n class=\"hidden lg:flex lg:items-center\"\n [class.lg:order-2]=\"$even\"\n [class.lg:order-1]=\"!$even\"\n [class.lg:pl-12]=\"$even\"\n [class.lg:justify-end]=\"!$even\"\n [class.lg:pr-12]=\"!$even\"\n >\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['opposite'] || itemInfo; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n }\n </div>\n } @else {\n <!-- Left alignment -->\n <div class=\"relative flex items-start gap-4\">\n <div [class]=\"markerColumnClass()\">\n <span [class]=\"markerClass(item, i)\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['marker'] || defaultMarker; context: { $implicit: item, index: i }\"\n ></ng-container>\n </span>\n </div>\n <div class=\"flex-1 min-w-0\">\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['content'] || card; context: { $implicit: item, index: i }\"\n ></ng-container>\n </div>\n </div>\n }\n }\n </div>\n } @else if (showEmptyState()) {\n <!-- ============ Empty state ============ -->\n <div class=\"text-center py-12\">\n @if (customTemplates()['empty']) {\n <ng-container *ngTemplateOutlet=\"customTemplates()['empty']\"></ng-container>\n } @else {\n <div class=\"w-16 h-16 mx-auto mb-4 _shk-bg-surface-100 dark:[background-color:var(--shk-surface-100)] rounded-full flex items-center justify-center\">\n <svg [lucideIcon]=\"getIcon(emptyIcon())\" class=\"w-8 h-8 _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\"></svg>\n </div>\n <p class=\"text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">{{ emptyMessage() }}</p>\n }\n </div>\n }\n\n <!-- ============ Templates ============ -->\n\n <ng-template #defaultMarker let-item let-index=\"index\">\n <span class=\"font-bold\">{{ markerText(item, index) }}</span>\n </ng-template>\n\n <ng-template #itemInfo let-item>\n <div>\n @if (item.badge !== undefined && item.badge !== null && item.badge !== '') {\n <div class=\"mb-2\">\n <span class=\"inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-semibold _shk-bg-surface-100 dark:[background-color:var(--shk-surface-200)] _shk-text-surface-600 dark:[color:var(--shk-surface-600)]\">\n @if (item.badgeIcon) {\n <svg [lucideIcon]=\"getIcon(item.badgeIcon)\" class=\"w-3 h-3\"></svg>\n }\n {{ item.badge }}\n </span>\n </div>\n }\n @if (item.title) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\">{{ item.title }}</div>\n }\n @let subCount = (item.subItems?.length || 0);\n @if (item.subtitle || (showSubItemCount() && subCount > 0)) {\n <div class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] mt-1\">\n {{ item.subtitle || (subCount + ' ' + subItemCountLabel()) }}\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #card let-item>\n @let subItems = item.subItems || [];\n <div class=\"shk-timeline-card mb-4 bg-white dark:[background-color:var(--shk-surface-50)] rounded-xl border _shk-border dark:[border-color:var(--shk-surface-200)] shadow-sm overflow-hidden\">\n <!-- Header (mobile in alternate, always in left) -->\n <div class=\"flex items-center gap-2 px-4 pt-4 pb-2\" [class.lg:hidden]=\"alignment() === 'alternate'\">\n <ng-container *ngTemplateOutlet=\"itemInfo; context: { $implicit: item }\"></ng-container>\n </div>\n\n <!-- Description -->\n @if (showDescription() && item.description) {\n <div class=\"px-4 pt-3\">\n @if (customTemplates()['description']) {\n <ng-container *ngTemplateOutlet=\"customTemplates()['description']; context: { $implicit: item }\"></ng-container>\n } @else {\n <p class=\"text-sm _shk-text-surface-600 dark:[color:var(--shk-surface-600)] leading-relaxed\">{{ item.description }}</p>\n }\n </div>\n }\n\n <!-- Sub items -->\n @if (subItems.length > 0) {\n <div class=\"mt-2\">\n @for (sub of subItems; track sub.id) {\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['subItem'] || defaultSubItem; context: { $implicit: item, subItem: sub }\"\n ></ng-container>\n }\n </div>\n } @else if (noSubItemsMessage()) {\n <div class=\"px-4 py-6 text-center\">\n <div class=\"inline-flex items-center gap-2 text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-500)]\">\n <svg [lucideIcon]=\"getIcon('info')\" class=\"w-4 h-4\"></svg>\n <span class=\"italic\">{{ noSubItemsMessage() }}</span>\n </div>\n </div>\n }\n\n <!-- Footer actions -->\n @if (showAddSubItem() || itemActions().length > 0) {\n <div class=\"flex items-center gap-1 px-4 py-2 _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border-t _shk-border dark:[border-color:var(--shk-surface-100)]\">\n @if (showAddSubItem()) {\n <button\n type=\"button\"\n (click)=\"addSubItem.emit(item)\"\n class=\"relative group inline-flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium _shk-text-primary hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] rounded-lg transition-colors\"\n >\n <svg [lucideIcon]=\"getIcon('circle-plus')\" class=\"w-3.5 h-3.5\"></svg>\n {{ addSubItemLabel() }}\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ addSubItemTooltip() }}\n </span>\n </button>\n }\n <div class=\"flex-1\"></div>\n @for (action of itemActions(); track $index) {\n @if (isItemActionVisible(action, item)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick(item)\"\n [class]=\"'timeline-icon-btn ' + getItemActionClass(action, item)\"\n [disabled]=\"isItemActionDisabled(action, item)\"\n [attr.aria-label]=\"getItemActionLabel(action, item)\"\n >\n <svg [lucideIcon]=\"getIcon(getItemActionIconName(action, item))\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ getItemActionLabel(action, item) }}\n </span>\n </div>\n }\n }\n </div>\n }\n </div>\n </ng-template>\n\n <ng-template #defaultSubItem let-item let-sub=\"subItem\">\n <div class=\"px-4 py-3 border-t [border-color:var(--shk-surface-100)] dark:[border-color:var(--shk-surface-700)] hover:[background-color:color-mix(in srgb,var(--shk-primary-50)30%,transparent)] dark:hover:[background-color:color-mix(in srgb,var(--shk-primary-900)10%,transparent)] transition-colors duration-200 group\">\n <div class=\"flex items-start gap-3\">\n <span\n [class]=\"sub.iconClass || 'flex items-center justify-center w-9 h-9 rounded-lg shrink-0 mt-0.5'\"\n [style]=\"sub.iconClass ? undefined : subItemStyle(sub)\"\n >\n <svg [lucideIcon]=\"getIcon(subItemIconName(sub))\" class=\"w-4 h-4\"></svg>\n </span>\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"flex items-center gap-2 flex-wrap\">\n @if (sub.optional) {\n <span class=\"text-[10px] font-semibold uppercase tracking-wide px-1.5 py-0.5 rounded _shk-bg-amber-soft _shk-text-amber-600 dark:[color:var(--shk-amber-400)]\">\n {{ sub.optionalLabel || optionalLabel() }}\n </span>\n }\n <span class=\"font-medium _shk-text-surface-800 dark:[color:var(--shk-surface-800)] text-sm truncate\">{{ sub.title }}</span>\n @if (sub.subtitle) {\n <span class=\"text-xs _shk-text-surface-400 dark:[color:var(--shk-surface-500)] truncate\">· {{ sub.subtitle }}</span>\n }\n </div>\n\n @if (showSubItemMeta() && (sub.meta?.length || 0) > 0) {\n <div class=\"flex flex-wrap items-center gap-x-3 gap-y-1 mt-1.5 text-xs _shk-text-surface-500 dark:[color:var(--shk-surface-500)]\">\n @for (m of sub.meta!; track $index) {\n <span class=\"flex items-center gap-1\">\n <svg [lucideIcon]=\"getIcon(m.icon)\" class=\"w-3 h-3\"></svg>\n @if (m.label) {\n <span class=\"font-medium\">{{ m.label }}:</span>\n }\n {{ m.value }}\n </span>\n }\n </div>\n }\n </div>\n\n <div class=\"flex items-center gap-0.5 shrink-0\">\n @if (showSubItemPrice() && sub.price !== undefined && sub.price !== null && sub.price !== '') {\n <span class=\"font-semibold _shk-text-surface-700 dark:[color:var(--shk-surface-700)] text-xs mr-1\">{{ sub.price }}</span>\n }\n @for (action of subItemActions(); track $index) {\n @if (isSubItemActionVisible(action, item, sub)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick(item, sub)\"\n class=\"timeline-icon-btn opacity-100 lg:opacity-0 lg:group-hover:opacity-100 transition-opacity\"\n [disabled]=\"isSubItemActionDisabled(action, item, sub)\"\n [attr.aria-label]=\"getSubItemActionLabel(action, item, sub)\"\n >\n <svg [lucideIcon]=\"getIcon(getSubItemActionIconName(action, item, sub))\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ getSubItemActionLabel(action, item, sub) }}\n </span>\n </div>\n }\n }\n </div>\n </div>\n </div>\n </ng-template>\n\n</div>\n","import { Component, input, model, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon, LucideChevronRight } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/** An action button rendered on the right side of the fieldset header. */\nexport interface FieldsetHeaderAction {\n label: string;\n icon: string | any;\n onClick: () => void;\n class?: string;\n isVisible?: () => boolean;\n isDisabled?: () => boolean;\n}\n\nlet fieldsetCounter = 0;\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Collapsible content group with a legend header, optional leading icon,\n * badge and action buttons on the right side.\n */\n@Component({\n selector: 'shk-fieldset',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './fieldset.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .shk-fieldset-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border-radius: 0.5rem;\n color: var(--shk-surface-400);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-fieldset-toggle:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n color: var(--shk-surface-700);\n }\n .shk-fieldset-toggle:disabled {\n cursor: default;\n }\n .shk-fieldset-toggle svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .fieldset-action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.375rem;\n border-radius: 0.5rem;\n color: var(--shk-primary-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out,\n opacity 0.15s ease-in-out;\n }\n .fieldset-action-btn:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-primary-50) 60%, transparent);\n color: var(--shk-primary-700);\n }\n .fieldset-action-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n .fieldset-action-btn svg {\n width: 0.875rem !important;\n height: 0.875rem !important;\n }\n .shk-fieldset-content {\n animation: shk-fieldset-fade 0.25s ease-out;\n }\n @keyframes shk-fieldset-fade {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class FieldsetComponent {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideChevronRight);\n\n /** Title shown in the header. */\n legend = input<string>('');\n /** Collapsed state (default: collapsed). Two-way bindable with [(collapsed)]. */\n collapsed = model<boolean>(true);\n /** Whether the header toggles the content. */\n toggleable = input<boolean>(true);\n /** Shows the expand/collapse icon button. */\n showToggleIcon = input<boolean>(true);\n /** Optional leading icon shown next to the legend. */\n icon = input<string | any>('');\n /** Optional badge/count shown after the legend. */\n badge = input<string | number>('');\n /** CSS classes for the badge (override). */\n badgeClass = input<string>('');\n /** Icon shown when collapsed. */\n collapsedIcon = input<string>('chevron-right');\n /** Icon shown when expanded. */\n expandedIcon = input<string>('chevron-down');\n /** Action buttons rendered on the right side of the header. */\n headerActions = input<FieldsetHeaderAction[]>([]);\n /** Custom content templates: key 'legend' (context: $implicit collapsed, expanded). */\n customTemplates = input<{ [key: string]: any }>({});\n /** CSS classes for the extra shadow styling of the panel. */\n hasShadow = input<boolean>(true);\n /** Accessible label for the expand action. */\n expandLabel = input<string>('Expandir');\n /** Accessible label for the collapse action. */\n collapseLabel = input<string>('Colapsar');\n\n /** Emits the new expanded state when toggled. */\n toggle = output<boolean>();\n /** Emitted when the fieldset is expanded. */\n expand = output<void>();\n /** Emitted when the fieldset is collapsed. */\n collapse = output<void>();\n\n /** Stable id linking the header button and the content region. */\n contentId = `shk-fieldset-content-${++fieldsetCounter}`;\n\n /** Toggles the collapsed state and emits the new state (unless not toggleable). */\n onToggle(): void {\n if (!this.toggleable()) return;\n const wasCollapsed = this.collapsed();\n const nowExpanded = wasCollapsed;\n this.collapsed.set(!wasCollapsed);\n this.toggle.emit(nowExpanded);\n if (nowExpanded) {\n this.expand.emit();\n } else {\n this.collapse.emit();\n }\n }\n\n /** Whether a header action can be rendered. */\n isHeaderActionVisible(action: FieldsetHeaderAction): boolean {\n return action.isVisible ? action.isVisible() : true;\n }\n\n /** Whether a header action should be disabled. */\n isHeaderActionDisabled(action: FieldsetHeaderAction): boolean {\n return action.isDisabled ? action.isDisabled() : false;\n }\n}\n","<div\n class=\"rounded-xl bg-white dark:[background-color:var(--shk-surface-50)] border _shk-border dark:[border-color:var(--shk-surface-200)] overflow-hidden\"\n [class.shadow-sm]=\"hasShadow()\"\n>\n <div\n class=\"flex items-center gap-2 px-4 py-3\"\n [class.border-b]=\"!collapsed()\"\n [class._shk-border]=\"!collapsed()\"\n [class.dark:[border-color:var(--shk-surface-200)]]=\"!collapsed()\"\n >\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n [disabled]=\"!toggleable()\"\n [attr.aria-expanded]=\"!collapsed()\"\n [attr.aria-controls]=\"contentId\"\n class=\"flex items-center gap-2 flex-1 min-w-0 text-left group disabled:cursor-default\"\n >\n @if (customTemplates()['legend']) {\n <ng-container\n *ngTemplateOutlet=\"customTemplates()['legend']; context: { $implicit: collapsed(), expanded: !collapsed() }\"\n ></ng-container>\n } @else {\n @if (icon()) {\n <svg [lucideIcon]=\"getIcon(icon())\" class=\"w-4 h-4 _shk-text-primary shrink-0\"></svg>\n }\n <span class=\"font-semibold text-sm _shk-text-surface-800 dark:[color:var(--shk-surface-800)] truncate\">\n {{ legend() }}\n </span>\n @if (badge() !== undefined && badge() !== null && badge() !== '') {\n <span\n [class]=\"badgeClass() || 'inline-flex items-center px-2 py-0.5 rounded-full text-xs font-semibold _shk-bg-primary-soft _shk-text-primary-700 dark:[background-color:var(--shk-primary-900)] dark:[color:var(--shk-primary-300)] shrink-0'\"\n >\n {{ badge() }}\n </span>\n }\n }\n </button>\n\n @if (headerActions().length > 0) {\n <div class=\"flex items-center gap-0.5 shrink-0\">\n @for (action of headerActions(); track $index) {\n @if (isHeaderActionVisible(action)) {\n <div class=\"relative group\">\n <button\n type=\"button\"\n (click)=\"action.onClick()\"\n [class]=\"'fieldset-action-btn ' + (action.class || '')\"\n [disabled]=\"isHeaderActionDisabled(action)\"\n [attr.aria-label]=\"action.label\"\n >\n <svg [lucideIcon]=\"getIcon(action.icon)\" class=\"w-3.5 h-3.5\"></svg>\n </button>\n <span class=\"absolute bottom-full left-1/2 -translate-x-1/2 mb-1 px-2 py-1 text-xs _shk-bg-tooltip _shk-text-tooltip rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition pointer-events-none z-[9999] shadow-lg\">\n {{ action.label }}\n </span>\n </div>\n }\n }\n </div>\n }\n\n @if (toggleable() && showToggleIcon()) {\n <button\n type=\"button\"\n (click)=\"onToggle()\"\n [attr.aria-label]=\"collapsed() ? expandLabel() : collapseLabel()\"\n class=\"shk-fieldset-toggle shrink-0\"\n [disabled]=\"!toggleable()\"\n >\n <svg [lucideIcon]=\"getIcon(collapsed() ? collapsedIcon() : expandedIcon())\" class=\"w-4 h-4 transition-transform\"></svg>\n </button>\n }\n </div>\n\n @if (!collapsed()) {\n <div [id]=\"contentId\" class=\"shk-fieldset-content px-4 py-3.5\">\n <ng-content></ng-content>\n </div>\n }\n</div>\n","import {\n Component,\n Directive,\n TemplateRef,\n ChangeDetectionStrategy,\n computed,\n contentChildren,\n input,\n model,\n output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LucideDynamicIcon, LucideChevronRight } from '@lucide/angular';\nimport { getIcon as getIconFromCentral } from '../utils/icons';\n\n/** A step of the wizard shown in the stepper. */\nexport interface WizardStep {\n id: string | number;\n label: string;\n /** Optional lucide icon rendered inside the step circle. */\n icon?: string;\n /** Overrides the primary footer button label for this step. */\n primaryLabel?: string;\n /** Overrides the primary footer button icon for this step. */\n primaryIcon?: string;\n}\n\n/** Declares a step's content template: <ng-template shkWizardStepContent=\"stepId\">…</ng-template>. */\n@Directive({\n selector: 'ng-template[shkWizardStepContent]',\n standalone: true,\n})\nexport class ShkWizardStepContent {\n stepId = input.required<string | number>({ alias: 'shkWizardStepContent' });\n constructor(public templateRef: TemplateRef<unknown>) {}\n}\n\nlet wizardCounter = 0;\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Multi-step wizard with a progress stepper, header, footer actions and\n * content templates declared with `shkWizardStepContent`.\n */\n@Component({\n selector: 'shk-wizard',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, LucideDynamicIcon],\n templateUrl: './wizard.component.html',\n styles: [\n `\n :host {\n display: block;\n }\n .shk-wizard-icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border-radius: 9999px;\n color: var(--shk-surface-600);\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-wizard-icon-btn:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n color: var(--shk-surface-800);\n }\n .shk-wizard-icon-btn:disabled {\n cursor: default;\n }\n .shk-wizard-icon-btn svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-stepper-dot {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 9999px;\n font-size: 0.875rem;\n font-weight: 700;\n flex-shrink: 0;\n transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out;\n }\n .shk-wizard-stepper-dot svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-btn-secondary {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--shk-surface-700);\n background-color: transparent;\n border: 1px solid var(--shk-surface-200);\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out,\n color 0.15s ease-in-out;\n }\n .shk-wizard-btn-secondary:hover:not(:disabled) {\n background-color: var(--shk-surface-100);\n border-color: var(--shk-surface-300);\n color: var(--shk-surface-900);\n }\n .shk-wizard-btn-secondary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .shk-wizard-btn-secondary svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-btn-primary {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: #fff;\n background-color: var(--shk-primary-600);\n box-shadow: 0 6px 20px -6px color-mix(in srgb, var(--shk-primary-600) 55%, transparent);\n transition: background-color 0.15s ease-in-out, opacity 0.15s ease-in-out;\n }\n .shk-wizard-btn-primary:hover:not(:disabled) {\n background-color: var(--shk-primary-700);\n }\n .shk-wizard-btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n }\n .shk-wizard-btn-primary svg {\n width: 1rem !important;\n height: 1rem !important;\n }\n .shk-wizard-spin {\n animation: shk-wizard-spin 0.8s linear infinite;\n }\n @keyframes shk-wizard-spin {\n to {\n transform: rotate(360deg);\n }\n }\n .shk-wizard-fade {\n animation: shk-wizard-fade 0.25s ease-out;\n }\n @keyframes shk-wizard-fade {\n from {\n opacity: 0;\n transform: translateY(4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n `,\n ],\n})\nexport class WizardComponent {\n protected getIcon = (name: any) => getIconFromCentral(name, LucideChevronRight);\n\n /** Steps definition shown in the stepper and used to resolve step content. */\n steps = input<WizardStep[]>([]);\n /** Active step id. Two-way bindable with [(currentStep)]. Null resolves to the first step. */\n currentStep = model<string | number | null>(null);\n\n // Header\n /** Shows the sticky header (back button + title). */\n showHeader = input<boolean>(true);\n headerTitle = input<string>('');\n headerSubtitle = input<string>('');\n /** Shows the round back button in the header. */\n showBackButton = input<boolean>(true);\n backTooltip = input<string>('Atrás');\n /** Optional lucide icon shown before the title. */\n headerIcon = input<string>('');\n\n // Stepper\n /** Shows the progress stepper (hide it for edit mode, like wac-app does). */\n showStepper = input<boolean>(true);\n /** Lets the user click on previous steps to jump back. */\n stepperClickable = input<boolean>(false);\n\n // Footer\n showFooter = input<boolean>(true);\n /** Shows a \"Paso X / N\" counter on the left of the footer. */\n showStepCounter = input<boolean>(false);\n stepCounterPrefix = input<string>('Paso');\n /** Shows the Cancel button on the first step (instead of a back button). */\n showCancel = input<boolean>(true);\n /** Auto-advances to the next step on the primary button when it is not the last step. */\n advanceOnNext = input<boolean>(true);\n\n prevLabel = input<string>('Atrás');\n prevIcon = input<string>('chevron-left');\n cancelLabel = input<string>('Cancelar');\n cancelIcon = input<string>('x');\n nextLabel = input<string>('Continuar');\n nextIcon = input<string>('chevron-right');\n finishLabel = input<string>('Finalizar');\n finishIcon = input<string>('check');\n\n /** Overrides the primary footer button label for every step. */\n primaryLabel = input<string | null>(null);\n /** Overrides the primary footer button icon for every step. */\n primaryIcon = input<string | null>(null);\n /** Shows a loading spinner on the primary button and disables it. */\n primaryLoading = input<boolean>(false);\n /** Disables the primary footer button (e.g. while the step form is invalid). */\n primaryDisabled = input<boolean>(false);\n\n // Outputs\n back = output<void>();\n cancel = output<void>();\n prev = output<void>();\n next = output<void>();\n finish = output<void>();\n stepChange = output<{ step: WizardStep | null; index: number }>();\n\n readonly stepContents = contentChildren(ShkWizardStepContent);\n\n currentIndex = computed(() => {\n const id = this.currentStep();\n if (id == null) return this.steps().length > 0 ? 0 : -1;\n return this.steps().findIndex((s) => s.id === id);\n });\n\n currentStepObj = computed(() => this.steps()[this.currentIndex()] ?? null);\n isFirstStep = computed(() => this.currentIndex() === 0);\n isLastStep = computed(() => this.currentIndex() === this.steps().length - 1);\n\n primaryActionLabel = computed(() => {\n if (this.primaryLabel()) return this.primaryLabel()!;\n const step = this.currentStepObj();\n if (step?.primaryLabel) return step.primaryLabel;\n return this.isLastStep() ? this.finishLabel() : this.nextLabel();\n });\n\n primaryActionIcon = computed(() => {\n if (this.primaryIcon()) return this.primaryIcon()!;\n const step = this.currentStepObj();\n if (step?.primaryIcon) return step.primaryIcon;\n return this.isLastStep() ? this.finishIcon() : this.nextIcon();\n });\n\n getStepTemplate(id: string | number): TemplateRef<unknown> | undefined {\n return this.stepContents().find((c) => c.stepId() === id)?.templateRef;\n }\n\n goTo(stepId: string | number): void {\n const idx = this.steps().findIndex((s) => s.id === stepId);\n if (idx < 0) return;\n if (this.currentStep() === stepId) return;\n this.currentStep.set(stepId);\n this.stepChange.emit({ step: this.steps()[idx], index: idx });\n }\n\n onPrev(): void {\n const idx = this.currentIndex();\n if (idx <= 0) return;\n this.prev.emit();\n this.goTo(this.steps()[idx - 1].id);\n }\n\n onNext(): void {\n const idx = this.currentIndex();\n const next = this.steps()[idx + 1];\n if (!next) return;\n this.next.emit();\n if (this.advanceOnNext()) {\n this.goTo(next.id);\n }\n }\n\n onPrimary(): void {\n if (this.primaryLoading() || this.primaryDisabled()) return;\n if (this.isLastStep()) {\n this.finish.emit();\n } else {\n this.onNext();\n }\n }\n}\n","<div class=\"min-h-full bg-transparent\">\n\n <!-- ============ Sticky Header + Stepper ============ -->\n @if (showHeader()) {\n <div\n class=\"sticky top-0 z-20 bg-white dark:[background-color:var(--shk-surface-50)] border-b _shk-border dark:[border-color:var(--shk-surface-200)] shadow-sm\"\n >\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-4\">\n <div class=\"flex items-center gap-4 mb-4\">\n @if (showBackButton()) {\n <button\n type=\"button\"\n (click)=\"back.emit()\"\n [attr.aria-label]=\"backTooltip()\"\n [attr.title]=\"backTooltip()\"\n class=\"shk-wizard-icon-btn shrink-0\"\n >\n <svg [lucideIcon]=\"getIcon('arrow-left')\" class=\"w-4 h-4\"></svg>\n </button>\n }\n <div class=\"flex-1 min-w-0 flex items-center gap-2.5\">\n @if (headerIcon()) {\n <span class=\"w-9 h-9 rounded-lg _shk-bg-primary-soft _shk-text-primary flex items-center justify-center shrink-0\">\n <svg [lucideIcon]=\"getIcon(headerIcon())\" class=\"w-4 h-4\"></svg>\n </span>\n }\n <div class=\"min-w-0\">\n <h1 class=\"text-xl font-bold _shk-text-surface-800 dark:[color:var(--shk-surface-800)] truncate\">\n {{ headerTitle() }}\n </h1>\n @if (headerSubtitle()) {\n <p class=\"text-xs _shk-text-surface-500 dark:[color:var(--shk-surface-500)] mt-0.5 truncate\">\n {{ headerSubtitle() }}\n </p>\n }\n </div>\n </div>\n <ng-content select=\"[shkWizardHeaderActions]\"></ng-content>\n </div>\n\n <!-- Stepper -->\n @if (showStepper() && steps().length > 1) {\n <div class=\"flex items-center gap-2 w-full max-w-3xl mx-auto\">\n @for (step of steps(); track step.id; let i = $index, last = $last) {\n <div class=\"flex items-center gap-3 shrink-0\">\n <button\n type=\"button\"\n (click)=\"goTo(step.id)\"\n [disabled]=\"!stepperClickable() || currentIndex() < i\"\n [attr.aria-label]=\"step.label\"\n class=\"shk-wizard-stepper-dot\"\n [class._shk-bg-primary]=\"currentIndex() > i || currentIndex() === i\"\n [class.text-white]=\"currentIndex() > i || currentIndex() === i\"\n [class._shk-bg-surface-200]=\"currentIndex() < i\"\n [class._shk-text-surface-500]=\"currentIndex() < i\"\n [class.cursor-pointer]=\"stepperClickable() && currentIndex() >= i\"\n [class.cursor-default]=\"!stepperClickable() || currentIndex() < i\"\n >\n @if (currentIndex() > i) {\n <svg [lucideIcon]=\"getIcon(step.icon || 'check')\" class=\"w-4 h-4\"></svg>\n } @else if (step.icon) {\n <svg [lucideIcon]=\"getIcon(step.icon)\" class=\"w-4 h-4\"></svg>\n } @else {\n {{ i + 1 }}\n }\n </button>\n <span\n class=\"text-sm font-semibold transition-colors whitespace-nowrap hidden sm:inline\"\n [class._shk-text-surface-800]=\"currentIndex() === i\"\n [class._shk-text-surface-500]=\"currentIndex() !== i\"\n [class.dark:[color:var(--shk-surface-800)]]=\"currentIndex() === i\"\n [class.dark:[color:var(--shk-surface-500)]]=\"currentIndex() !== i\"\n >\n {{ step.label }}\n </span>\n </div>\n\n @if (!last) {\n <div class=\"flex-1 h-0.5 _shk-bg-surface-200 dark:[background-color:var(--shk-surface-200)] relative overflow-hidden rounded-full\">\n <div\n class=\"absolute inset-y-0 left-0 _shk-bg-primary transition-all duration-300\"\n [class.w-full]=\"currentIndex() > i\"\n [class.w-0]=\"currentIndex() <= i\"\n ></div>\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- ============ Active step content ============ -->\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-6 pb-28\">\n @if (currentIndex() >= 0) {\n @if (getStepTemplate(steps()[currentIndex()].id); as tpl) {\n <div class=\"shk-wizard-fade\" [style.view-transition-name]=\"'shk-wizard-step'\">\n <ng-container\n *ngTemplateOutlet=\"tpl; context: { step: currentStepObj(), index: currentIndex() }\"\n ></ng-container>\n </div>\n } @else {\n <p class=\"text-sm _shk-text-surface-400 dark:[color:var(--shk-surface-400)]\">\n No hay contenido definido para el paso «{{ steps()[currentIndex()].label }}».\n </p>\n }\n }\n </div>\n\n <!-- ============ Sticky Footer ============ -->\n @if (showFooter() && steps().length > 0) {\n <div\n class=\"sticky bottom-0 z-20 bg-white dark:[background-color:var(--shk-surface-50)] border-t _shk-border dark:[border-color:var(--shk-surface-200)] shadow-[0_-4px_12px_rgba(0,0,0,0.04)] mt-8\"\n >\n <div class=\"w-full px-4 sm:px-6 lg:px-8 py-4 flex items-center justify-end gap-3\">\n @if (showStepCounter()) {\n <span class=\"text-sm _shk-text-surface-500 dark:[color:var(--shk-surface-500)] mr-auto\">\n {{ stepCounterPrefix() }} {{ currentIndex() + 1 }} / {{ steps().length }}\n </span>\n }\n\n @if (isFirstStep()) {\n @if (showCancel()) {\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"shk-wizard-btn-secondary\">\n @if (cancelIcon()) {\n <svg [lucideIcon]=\"getIcon(cancelIcon())\" class=\"w-4 h-4\"></svg>\n }\n {{ cancelLabel() }}\n </button>\n }\n } @else {\n <button type=\"button\" (click)=\"onPrev()\" class=\"shk-wizard-btn-secondary\">\n <svg [lucideIcon]=\"getIcon(prevIcon())\" class=\"w-4 h-4\"></svg>\n {{ prevLabel() }}\n </button>\n }\n\n <button\n type=\"button\"\n (click)=\"onPrimary()\"\n [disabled]=\"primaryDisabled() || primaryLoading()\"\n class=\"shk-wizard-btn-primary\"\n >\n @if (primaryLoading()) {\n <svg [lucideIcon]=\"getIcon('loader-circle')\" class=\"w-4 h-4 shk-wizard-spin\"></svg>\n } @else {\n @if (primaryActionIcon()) {\n <svg [lucideIcon]=\"getIcon(primaryActionIcon())\" class=\"w-4 h-4\"></svg>\n }\n }\n {{ primaryActionLabel() }}\n </button>\n </div>\n </div>\n }\n</div>\n","import { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\nexport type SkeletonShape = 'rectangle' | 'circle';\nexport type SkeletonAnimation = 'wave' | 'pulse' | 'none';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Placeholder block shown while content is loading. */\n@Component({\n selector: 'shk-skeleton',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"'shk-skeleton ' + styleClass()\"\n [class.shk-skeleton-circle]=\"shape() === 'circle'\"\n [class.shk-skeleton-animate-wave]=\"animation() === 'wave'\"\n [class.shk-skeleton-animate-pulse]=\"animation() === 'pulse'\"\n [style]=\"rootStyle()\"\n aria-hidden=\"true\"\n ></div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .shk-skeleton {\n position: relative;\n overflow: hidden;\n background-color: var(--shk-skeleton-bg);\n }\n .shk-skeleton-circle {\n border-radius: 9999px;\n }\n .shk-skeleton-animate-wave::after {\n content: '';\n position: absolute;\n inset: 0;\n background-image: linear-gradient(\n 90deg,\n transparent,\n var(--shk-skeleton-highlight) 50%,\n transparent\n );\n animation: shk-skeleton-wave 1.6s ease-in-out infinite;\n }\n .shk-skeleton-animate-pulse {\n animation: shk-skeleton-pulse 2s ease-in-out infinite;\n }\n @keyframes shk-skeleton-wave {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n @keyframes shk-skeleton-pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.55;\n }\n }\n `,\n ],\n})\nexport class SkeletonComponent {\n /** Shape of the skeleton: rectangle (default) or circle. */\n shape = input<SkeletonShape>('rectangle');\n /** When shape is circle, sets both width and height. */\n size = input<string>('');\n /** Width of the rectangle skeleton. */\n width = input<string>('100%');\n /** Height of the rectangle skeleton. */\n height = input<string>('1rem');\n /** Custom border radius (rectangle only). */\n borderRadius = input<string>('');\n /** Animation effect: 'wave' (default), 'pulse' or 'none'. */\n animation = input<SkeletonAnimation>('wave');\n /** Inline styles applied to the skeleton block. */\n style = input<Record<string, string | number>>({});\n /** Extra CSS classes. */\n styleClass = input<string>('');\n\n protected rootStyle = computed(() => {\n const s: Record<string, string | number> = {};\n if (this.shape() === 'circle') {\n s['width'] = this.size() || this.width();\n s['height'] = this.size() || this.height();\n s['borderRadius'] = '9999px';\n } else {\n s['width'] = this.width();\n s['height'] = this.height();\n s['borderRadius'] = this.borderRadius() || '0.25rem';\n }\n return { ...s, ...this.style() };\n });\n}\n","import { Component, computed, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { LucideDynamicIcon } from '@lucide/angular';\nimport { getIcon } from '../utils/icons';\n\nexport type ButtonSeverity =\n 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' | 'help' | 'contrast';\nexport type ButtonSize = 'small' | 'large';\nexport type ButtonIconPosition = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Generic button with icon, severity variants, loading state and sizes. */\n@Component({\n selector: 'shk-button',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LucideDynamicIcon],\n template: `\n <button\n [attr.type]=\"type()\"\n class=\"shk-button\"\n [class.shk-button-primary]=\"severity() === 'primary' || !severity()\"\n [class.shk-button-secondary]=\"severity() === 'secondary'\"\n [class.shk-button-success]=\"severity() === 'success'\"\n [class.shk-button-info]=\"severity() === 'info'\"\n [class.shk-button-warning]=\"severity() === 'warning'\"\n [class.shk-button-danger]=\"severity() === 'danger'\"\n [class.shk-button-help]=\"severity() === 'help'\"\n [class.shk-button-contrast]=\"severity() === 'contrast'\"\n [class.shk-button-outlined]=\"outlined()\"\n [class.shk-button-text]=\"text()\"\n [class.shk-button-raised]=\"raised()\"\n [class.shk-button-rounded]=\"rounded()\"\n [class.shk-button-sm]=\"size() === 'small'\"\n [class.shk-button-lg]=\"size() === 'large'\"\n [class.shk-button-icon-right]=\"iconPos() === 'right'\"\n [class.shk-button-icon-top]=\"iconPos() === 'top'\"\n [class.shk-button-icon-bottom]=\"iconPos() === 'bottom'\"\n [class.shk-button-icon-only]=\"iconOnly()\"\n [class.shk-button-loading]=\"loading()\"\n [class]=\"styleClass()\"\n [style]=\"style()\"\n [disabled]=\"disabled() || loading()\"\n [attr.aria-label]=\"ariaLabel() || undefined\"\n [attr.title]=\"title() || undefined\"\n (click)=\"onClick.emit($event)\"\n >\n @if (loading()) {\n <svg [lucideIcon]=\"getIcon(loadingIcon())\" class=\"shk-button-icon shk-button-spin\"></svg>\n } @else if (icon()) {\n <svg [lucideIcon]=\"getIcon(icon())\" class=\"shk-button-icon\"></svg>\n }\n @if (label()) {\n <span>{{ loading() && loadingText() ? loadingText() : label() }}</span>\n }\n <ng-content></ng-content>\n </button>\n `,\n styles: [\n `\n :host {\n display: inline-block;\n }\n .shk-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n border: 1px solid transparent;\n font-size: 0.875rem;\n font-weight: 500;\n line-height: 1.25rem;\n cursor: pointer;\n user-select: none;\n white-space: nowrap;\n transition:\n background-color 0.15s ease-in-out,\n border-color 0.15s ease-in-out,\n color 0.15s ease-in-out,\n box-shadow 0.15s ease-in-out,\n opacity 0.15s ease-in-out;\n }\n .shk-button:focus-visible {\n outline: 2px solid var(--shk-primary-400);\n outline-offset: 2px;\n }\n .shk-button:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n }\n .shk-button-icon {\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n }\n\n .shk-button-primary {\n --shk-btn-bg: var(--shk-primary-600);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-primary-600);\n }\n .shk-button-secondary {\n --shk-btn-bg: var(--shk-surface-100);\n --shk-btn-color: var(--shk-surface-700);\n --shk-btn-border: var(--shk-surface-200);\n }\n .shk-button-success {\n --shk-btn-bg: var(--shk-success-600);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-success-600);\n }\n .shk-button-info {\n --shk-btn-bg: var(--shk-info-600);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-info-600);\n }\n .shk-button-warning {\n --shk-btn-bg: var(--shk-warning-600);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-warning-600);\n }\n .shk-button-danger {\n --shk-btn-bg: var(--shk-error-600);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-error-600);\n }\n .shk-button-help {\n --shk-btn-bg: var(--shk-primary-500);\n --shk-btn-color: #ffffff;\n --shk-btn-border: var(--shk-primary-500);\n }\n .shk-button-contrast {\n --shk-btn-bg: var(--shk-surface-900);\n --shk-btn-color: var(--shk-surface-50);\n --shk-btn-border: var(--shk-surface-900);\n }\n\n .shk-button {\n background-color: var(--shk-btn-bg);\n color: var(--shk-btn-color);\n border-color: var(--shk-btn-border);\n }\n .shk-button:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-btn-bg) 88%, #000000);\n }\n .shk-button-outlined,\n .shk-button-text {\n background-color: transparent;\n }\n .shk-button-outlined {\n border-color: var(--shk-btn-color);\n }\n .shk-button-text {\n border-color: transparent;\n }\n .shk-button-text:hover:not(:disabled),\n .shk-button-outlined:hover:not(:disabled) {\n background-color: color-mix(in srgb, var(--shk-btn-color) 12%, transparent);\n }\n .shk-button-raised {\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.06),\n 0 4px 8px rgba(0, 0, 0, 0.1);\n }\n .shk-button-rounded {\n border-radius: 9999px;\n }\n .shk-button-sm {\n padding: 0.375rem 0.75rem;\n font-size: 0.8125rem;\n }\n .shk-button-sm .shk-button-icon {\n width: 0.875rem;\n height: 0.875rem;\n }\n .shk-button-lg {\n padding: 0.75rem 1.5rem;\n font-size: 1rem;\n }\n .shk-button-lg .shk-button-icon {\n width: 1.25rem;\n height: 1.25rem;\n }\n .shk-button-icon-only {\n padding: 0.5rem;\n }\n .shk-button-sm.shk-button-icon-only {\n padding: 0.375rem;\n }\n .shk-button-lg.shk-button-icon-only {\n padding: 0.75rem;\n }\n .shk-button-icon-right {\n flex-direction: row-reverse;\n }\n .shk-button-icon-top {\n flex-direction: column;\n }\n .shk-button-icon-bottom {\n flex-direction: column-reverse;\n }\n .shk-button-loading .shk-button-spin {\n animation: shk-button-spin 1s linear infinite;\n }\n @keyframes shk-button-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ],\n})\nexport class ButtonComponent {\n /** Text shown inside the button. */\n label = input<string>('');\n /** Optional leading lucide icon name or component. */\n icon = input<string | any>('');\n /** Position of the icon relative to the label. */\n iconPos = input<ButtonIconPosition>('left');\n /** Color variant. Defaults to 'primary'. */\n severity = input<ButtonSeverity>('primary');\n /** Transparent background with a colored border. */\n outlined = input<boolean>(false);\n /** Borderless button with a colored label. */\n text = input<boolean>(false);\n /** Adds a soft shadow. */\n raised = input<boolean>(false);\n /** Fully rounded corners (pill). */\n rounded = input<boolean>(false);\n /** Size variant. */\n size = input<ButtonSize | undefined>(undefined);\n /** Disables the button. */\n disabled = input<boolean>(false);\n /** Shows a spinner and disables the button. */\n loading = input<boolean>(false);\n /** Icon shown while loading. Defaults to 'refresh'. */\n loadingIcon = input<string>('refresh');\n /** Optional text shown instead of the label while loading. */\n loadingText = input<string>('');\n /** Native button type. */\n type = input<'button' | 'submit' | 'reset'>('button');\n /** Accessible label when the button is icon-only. */\n ariaLabel = input<string>('');\n /** Native title tooltip. */\n title = input<string>('');\n /** Inline styles applied to the button. */\n style = input<Record<string, string | number>>({});\n /** Extra CSS classes. */\n styleClass = input<string>('');\n\n /** Emitted on click with the original MouseEvent. */\n onClick = output<MouseEvent>();\n\n protected getIcon = getIcon;\n\n protected iconOnly = computed(() => !this.label() && !!this.icon());\n}\n","import {\n Component,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n ElementRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** SVG radial knob with drag and keyboard support. Implements ControlValueAccessor. */\n@Component({\n selector: 'shk-knob',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"shk-knob\"\n [class.shk-knob-disabled]=\"effectiveDisabled()\"\n [style]=\"{ width: size() + 'px', height: size() + 'px' }\"\n >\n <svg\n #knobSvg\n class=\"shk-knob-svg\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"ariaLabel() || 'Valor'\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n [class.shk-knob-svg-focusable]=\"!effectiveDisabled()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (keydown.arrowup)=\"updateByKey(step())\"\n (keydown.arrowright)=\"updateByKey(step())\"\n (keydown.arrowdown)=\"updateByKey(-step())\"\n (keydown.arrowleft)=\"updateByKey(-step())\"\n >\n <path\n [attr.d]=\"rangeArc()\"\n fill=\"none\"\n [style.stroke]=\"rangeColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n ></path>\n <path\n [attr.d]=\"valueArc()\"\n fill=\"none\"\n [style.stroke]=\"valueColor()\"\n [attr.stroke-width]=\"strokeWidth()\"\n stroke-linecap=\"round\"\n ></path>\n </svg>\n @if (showValue()) {\n <div class=\"shk-knob-label\">{{ value() }}</div>\n }\n </div>\n `,\n styles: [\n `\n .shk-knob {\n position: relative;\n display: inline-block;\n }\n .shk-knob-svg {\n display: block;\n touch-action: none;\n }\n .shk-knob-svg-focusable {\n cursor: pointer;\n outline: none;\n }\n .shk-knob-svg-focusable:focus-visible {\n border-radius: 9999px;\n outline: 2px solid var(--shk-primary-400);\n outline-offset: 2px;\n }\n .shk-knob-disabled {\n opacity: 0.55;\n }\n .shk-knob-disabled .shk-knob-svg {\n cursor: not-allowed;\n }\n .shk-knob-label {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 1.125rem;\n font-weight: 600;\n color: var(--shk-surface-800);\n pointer-events: none;\n user-select: none;\n }\n `,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => KnobComponent),\n multi: true,\n },\n ],\n})\nexport class KnobComponent implements ControlValueAccessor {\n /** Current value. Two-way bindable with [(value)]. */\n value = model<number>(0);\n /** Minimum value. */\n min = input<number>(0);\n /** Maximum value. */\n max = input<number>(100);\n /** Increment used by arrows and pointer drag rounding. */\n step = input<number>(1);\n /** Diameter of the knob in px. */\n size = input<number>(100);\n /** Thickness of the arc stroke. */\n strokeWidth = input<number>(14);\n /** Color of the filled arc. */\n valueColor = input<string>('var(--shk-primary-600)');\n /** Color of the track arc. */\n rangeColor = input<string>('var(--shk-surface-200)');\n /** Whether the current value is shown in the center. */\n showValue = input<boolean>(true);\n /** Disables user interaction. */\n disabled = input<boolean>(false);\n /** Blocks editing but keeps the control styled as enabled. */\n readonly = input<boolean>(false);\n /** Accessible label. */\n ariaLabel = input<string>('');\n\n /** Emitted when the knob value changes. */\n change = output<number>();\n /** Emitted when the user releases the pointer. */\n end = output<number>();\n\n protected knobSvg = viewChild<ElementRef<SVGElement>>('knobSvg');\n\n private onChange: (value: number) => void = () => {};\n private onTouched: () => void = () => {};\n private dragging = false;\n private formDisabled = signal(false);\n\n /** Effective disabled state combining the `disabled` input and the form binding. */\n protected effectiveDisabled = computed(() => this.disabled() || this.formDisabled());\n\n protected r = computed(() => (this.size() - this.strokeWidth()) / 2);\n protected center = computed(() => this.size() / 2);\n protected fraction = computed(() => {\n const range = this.max() - this.min();\n if (range <= 0) return 0;\n return Math.max(0, Math.min(1, (this.value() - this.min()) / range));\n });\n protected rangeArc = computed(() => this.getArcPath(135, 405));\n protected valueArc = computed(() => this.getArcPath(135, 135 + 270 * this.fraction()));\n\n writeValue(value: any): void {\n this.value.set(this.clamp(Number(value) || this.min()));\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.formDisabled.set(isDisabled);\n }\n\n onPointerDown(event: PointerEvent): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n this.dragging = true;\n this.knobSvg()?.nativeElement.setPointerCapture(event.pointerId);\n this.applyEvent(event);\n }\n\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n this.applyEvent(event);\n }\n\n onPointerUp(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n try {\n this.knobSvg()?.nativeElement.releasePointerCapture(event.pointerId);\n } catch {\n /* noop */\n }\n this.change.emit(this.value());\n this.end.emit(this.value());\n }\n\n updateByKey(step: number): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n this.setValue(this.value() + step);\n this.onTouched();\n }\n\n private applyEvent(event: PointerEvent): void {\n const svg = this.knobSvg()?.nativeElement;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const angle = Math.atan2(event.clientY - cy, event.clientX - cx);\n const deg = ((angle * 180) / Math.PI + 360) % 360;\n let t = deg - 135;\n if (t < 0) t += 360;\n let fraction: number;\n if (t > 270) {\n fraction = 360 - t < t - 270 ? 0 : 1;\n } else {\n fraction = t / 270;\n }\n const raw = this.min() + fraction * (this.max() - this.min());\n this.setValue(raw);\n this.onTouched();\n }\n\n private setValue(raw: number): void {\n const rounded = Math.round(raw / this.step()) * this.step();\n const clamped = this.clamp(rounded);\n this.value.set(clamped);\n this.onChange(clamped);\n }\n\n private clamp(value: number): number {\n return Math.max(this.min(), Math.min(this.max(), value));\n }\n\n private getArcPath(startDeg: number, endDeg: number): string {\n const cx = this.center();\n const cy = this.center();\n const r = this.r();\n const start = this.anglePoint(cx, cy, r, startDeg);\n const end = this.anglePoint(cx, cy, r, endDeg);\n const largeArc = endDeg - startDeg > 180 ? '1' : '0';\n return `M ${start.x.toFixed(2)} ${start.y.toFixed(2)} A ${r.toFixed(2)} ${r.toFixed(2)} 0 ${largeArc} 1 ${end.x.toFixed(2)} ${end.y.toFixed(2)}`;\n }\n\n private anglePoint(\n cx: number,\n cy: number,\n r: number,\n angleDeg: number,\n ): { x: number; y: number } {\n const rad = (Math.PI * angleDeg) / 180;\n return {\n x: cx + r * Math.cos(rad),\n y: cy + r * Math.sin(rad),\n };\n }\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Circular indeterminate spinner. */\n@Component({\n selector: 'shk-loading-spinner',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"shk-loading-spinner\"\n [style]=\"{\n width: size(),\n height: size(),\n }\"\n role=\"status\"\n aria-label=\"Cargando\"\n >\n <div\n class=\"shk-loading-spinner-circle\"\n [style]=\"{\n borderWidth: thickness(),\n borderTopColor: color() || undefined,\n }\"\n ></div>\n </div>\n @if (label()) {\n <span class=\"shk-loading-spinner-label\">{{ label() }}</span>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n }\n .shk-loading-spinner {\n display: inline-block;\n }\n .shk-loading-spinner-circle {\n width: 100%;\n height: 100%;\n border-radius: 9999px;\n border-style: solid;\n border-color: color-mix(in srgb, var(--shk-primary-600) 20%, transparent);\n border-top-color: var(--shk-primary-600);\n animation: shk-loading-spin 0.8s linear infinite;\n }\n .shk-loading-spinner-label {\n font-size: 0.8125rem;\n color: var(--shk-surface-500);\n }\n @keyframes shk-loading-spin {\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ],\n})\nexport class LoadingSpinnerComponent {\n /** Diameter of the spinner. */\n size = input<string>('2rem');\n /** Border thickness in px. */\n thickness = input<number>(3);\n /** Color of the moving arc. Defaults to the primary token. */\n color = input<string>('');\n /** Optional text shown under the spinner. */\n label = input<string>('');\n}\n","import { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Progress bar with an indeterminate sweep or a determinate percentage. */\n@Component({\n selector: 'shk-loading-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"shk-loading-bar\"\n [class.shk-loading-bar-indeterminate]=\"indeterminate()\"\n [style]=\"{ height: height(), borderRadius: rounded() ? '9999px' : undefined }\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"indeterminate() ? undefined : progress()\"\n aria-label=\"Progreso\"\n >\n <div\n class=\"shk-loading-bar-fill\"\n [style]=\"fillStyle()\"\n [style.background-color]=\"color() || undefined\"\n [style.border-radius]=\"rounded() ? '9999px' : undefined\"\n ></div>\n </div>\n `,\n styles: [\n `\n .shk-loading-bar {\n width: 100%;\n position: relative;\n overflow: hidden;\n background-color: var(--shk-surface-200);\n }\n .shk-loading-bar-fill {\n height: 100%;\n background-color: var(--shk-primary-600);\n transition: width 0.3s ease-in-out;\n }\n .shk-loading-bar-indeterminate .shk-loading-bar-fill {\n width: 40%;\n animation: shk-loading-bar-sweep 1.2s ease-in-out infinite;\n }\n @keyframes shk-loading-bar-sweep {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(350%);\n }\n }\n `,\n ],\n})\nexport class LoadingBarComponent {\n /** Height of the bar. */\n height = input<string>('0.25rem');\n /** When true the bar animates without a known percentage. */\n indeterminate = input<boolean>(true);\n /** Current progress 0-100 when `indeterminate` is false. */\n progress = input<number>(0);\n /** Fill color. Defaults to the primary token. */\n color = input<string>('');\n /** Renders fully rounded ends. */\n rounded = input<boolean>(true);\n\n /** Fill width/style for the determinate mode, empty for indeterminate. */\n protected fillStyle = computed(() => {\n if (this.indeterminate()) return {};\n return { width: `${Math.max(0, Math.min(100, this.progress()))}%` };\n });\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport { LoadingSpinnerComponent } from './loading-spinner.component';\n\n/** Backdrop style behind the overlay: none, light or dark. */\nexport type LoadingOverlayBackdrop = 'transparent' | 'light' | 'dark';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Wraps content and shows a centered spinner over it while `visible` is true. */\n@Component({\n selector: 'shk-loading-overlay',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LoadingSpinnerComponent],\n template: `\n <div\n class=\"shk-loading-overlay\"\n [class.shk-loading-overlay-light]=\"backdrop() === 'light'\"\n [class.shk-loading-overlay-dark]=\"backdrop() === 'dark'\"\n >\n <ng-content></ng-content>\n @if (visible()) {\n <div class=\"shk-loading-overlay-layer\">\n <shk-loading-spinner [size]=\"spinnerSize()\" [color]=\"color()\" [label]=\"message()\" />\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .shk-loading-overlay {\n position: relative;\n min-height: 1.5rem;\n }\n .shk-loading-overlay-layer {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n }\n .shk-loading-overlay-light .shk-loading-overlay-layer {\n background-color: rgba(255, 255, 255, 0.65);\n }\n .dark .shk-loading-overlay-light .shk-loading-overlay-layer {\n background-color: rgba(0, 0, 0, 0.55);\n }\n .shk-loading-overlay-dark .shk-loading-overlay-layer {\n background-color: rgba(0, 0, 0, 0.4);\n }\n `,\n ],\n})\nexport class LoadingOverlayComponent {\n /** Controls whether the spinner layer is shown. */\n visible = input<boolean>(false);\n /** Optional text under the spinner. */\n message = input<string>('');\n /** Diameter of the spinner. */\n spinnerSize = input<string>('2.5rem');\n /** Spinner color. Defaults to the primary token. */\n color = input<string>('');\n /** Backdrop behind the spinner. */\n backdrop = input<LoadingOverlayBackdrop>('transparent');\n}\n","import { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Bouncing dots loading indicator. */\n@Component({\n selector: 'shk-loading-dots',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"shk-loading-dots\" role=\"status\" aria-label=\"Cargando\">\n @for (dot of dots(); track $index) {\n <span\n class=\"shk-loading-dot\"\n [style]=\"{\n width: size(),\n height: size(),\n backgroundColor: color() || undefined,\n animationDelay: $index * 0.12 + 's',\n }\"\n ></span>\n }\n </span>\n @if (label()) {\n <span class=\"shk-loading-dots-label\">{{ label() }}</span>\n }\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n }\n .shk-loading-dots {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n }\n .shk-loading-dot {\n border-radius: 9999px;\n background-color: var(--shk-primary-600);\n animation: shk-loading-dots-bounce 1.4s ease-in-out infinite;\n }\n .shk-loading-dots-label {\n font-size: 0.8125rem;\n color: var(--shk-surface-500);\n }\n @keyframes shk-loading-dots-bounce {\n 0%,\n 80%,\n 100% {\n transform: scale(0.6);\n opacity: 0.5;\n }\n 40% {\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n ],\n})\nexport class LoadingDotsComponent {\n /** Diameter of each dot. */\n size = input<string>('0.5rem');\n /** Dot color. Defaults to the primary token. */\n color = input<string>('');\n /** Number of dots. */\n count = input<number>(3);\n /** Optional text shown next to the dots. */\n label = input<string>('');\n\n /** Array of dot indices to render based on the `count` input. */\n protected dots = computed(() => Array.from({ length: Math.max(1, this.count()) }));\n}\n","import { Injectable, signal } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Shared state between shk-abs and its tab/tabpanel children. */\n@Injectable()\nexport class TabsService {\n /** Currently active tab value. */\n readonly active = signal<any>(undefined);\n\n /** Sets the active tab to the given value. */\n select(value: any): void {\n this.active.set(value);\n }\n}\n","import { Component, effect, inject, model, input, ChangeDetectionStrategy } from '@angular/core';\nimport { TabsService } from './tabs.service';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Container for tab panels. Renders its projected shk-tablist/shh-tab content. */\n@Component({\n selector: 'shk-tabs',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TabsService],\n template: `\n <div class=\"shk-tabs\">\n <ng-content></ng-content>\n </div>\n `,\n})\nexport class TabsComponent {\n /** Currently active tab value. Two-way bindable with [(value)]. */\n value = model<any>(undefined);\n /** Allows the tab header to scroll horizontally when it overflows. */\n scrollable = input<boolean>(false);\n\n /** Shared service used to sync the active tab with the children. */\n protected tabsSvc = inject(TabsService);\n\n constructor() {\n // Push external value changes into the shared service.\n effect(() => {\n this.tabsSvc.active.set(this.value());\n });\n // Reflect child-side selections back into the two-way value.\n effect(() => {\n const active = this.tabsSvc.active();\n if (active !== this.value()) {\n this.value.set(active);\n }\n });\n }\n}\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Horizontal bar that contains the shk-tab headers. */\n@Component({\n selector: 'shk-tablist',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"shk-tablist\"\n [class.shk-tablist-scrollable]=\"scrollable()\"\n [class]=\"styleClass()\"\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n >\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n .shk-tablist {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n flex-wrap: wrap;\n border-bottom: 1px solid var(--shk-surface-200);\n }\n .dark .shk-tablist {\n border-bottom-color: var(--shk-surface-200);\n }\n .shk-tablist-scrollable {\n flex-wrap: nowrap;\n overflow-x: auto;\n scrollbar-width: thin;\n }\n .shk-tablist-scrollable::-webkit-scrollbar {\n height: 6px;\n }\n .shk-tablist-scrollable::-webkit-scrollbar-thumb {\n background: var(--shk-surface-300);\n border-radius: 9999px;\n }\n `,\n ],\n})\nexport class TablistComponent {\n /** Allows the header to scroll horizontally when it overflows. */\n scrollable = input<boolean>(false);\n /** Extra CSS classes. */\n styleClass = input<string>('');\n}\n","import { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { TabsService } from './tabs.service';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** A single tab header. Clicking it activates the matching panel. */\n@Component({\n selector: 'shk-tab',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n type=\"button\"\n class=\"shk-tab\"\n [class]=\"styleClass()\"\n [class.shk-tab-active]=\"active()\"\n [class.shk-tab-disabled]=\"disabled()\"\n role=\"tab\"\n [attr.aria-selected]=\"active()\"\n [disabled]=\"disabled()\"\n (click)=\"select()\"\n >\n <ng-content></ng-content>\n </button>\n `,\n styles: [\n `\n .shk-tab {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.625rem 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--shk-surface-500);\n background: transparent;\n border: none;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n cursor: pointer;\n white-space: nowrap;\n transition:\n color 0.15s ease-in-out,\n border-color 0.15s ease-in-out,\n background-color 0.15s ease-in-out;\n }\n .shk-tab:hover:not(:disabled):not(.shk-tab-active) {\n color: var(--shk-surface-800);\n }\n .shk-tab-active {\n color: var(--shk-primary-600);\n border-bottom-color: var(--shk-primary-600);\n font-weight: 600;\n }\n .dark .shk-tab-active {\n color: var(--shk-primary-400);\n border-bottom-color: var(--shk-primary-400);\n }\n .shk-tab:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `,\n ],\n})\nexport class TabComponent {\n /** Value that links this tab to its panel. */\n value = input<any>(undefined);\n /** Disables the tab. */\n disabled = input<boolean>(false);\n /** Extra CSS classes. */\n styleClass = input<string>('');\n\n /** Shared service used to read the active tab value. */\n protected tabsSvc = inject(TabsService);\n /** Whether this tab is the active one. */\n protected active = computed(() => this.tabsSvc.active() === this.value());\n\n /** Activates this tab through the shared service. */\n select(): void {\n if (this.disabled()) return;\n this.tabsSvc.select(this.value());\n }\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Container that groups the shk-tabpanel content sections. */\n@Component({\n selector: 'shk-tabpanels',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"shk-tabpanels\">\n <ng-content></ng-content>\n </div>\n `,\n})\nexport class TabpanelsComponent {}\n","import { Component, computed, inject, input, ChangeDetectionStrategy } from '@angular/core';\nimport { TabsService } from './tabs.service';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** Content section shown only while its value is the active tab. */\n@Component({\n selector: 'shk-tabpanel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (active()) {\n <div class=\"shk-tabpanel\" role=\"tabpanel\">\n <ng-content></ng-content>\n </div>\n }\n `,\n})\nexport class TabPanelComponent {\n /** Value that links this panel to its tab. */\n value = input<any>(undefined);\n\n /** Shared service used to read the active tab value. */\n protected tabsSvc = inject(TabsService);\n /** Whether this panel is the active one. */\n protected active = computed(() => this.tabsSvc.active() === this.value());\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/** A single breadcrumb entry with an optional navigation route. */\nexport interface BreadcrumbItem {\n label: string;\n route?: string;\n}\n\n/**\n * Global breadcrumb state. Components and pages write the current trail via\n * `set()` and observatories read it through `breadcrumbs$`.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class BreadcrumbService {\n /** Internal buffer holding the current breadcrumb trail. */\n private breadcrumbsSubject = new BehaviorSubject<BreadcrumbItem[]>([]);\n /** Observable emitted with the latest breadcrumb trail. */\n breadcrumbs$: Observable<BreadcrumbItem[]> = this.breadcrumbsSubject.asObservable();\n\n /** Replaces the whole breadcrumb trail. */\n set(items: BreadcrumbItem[]): void {\n this.breadcrumbsSubject.next(items);\n }\n\n /** Empties the breadcrumb trail. */\n clear(): void {\n this.breadcrumbsSubject.next([]);\n }\n\n /** Returns the breadcrumb trail currently held (snapshot). */\n getCurrent(): BreadcrumbItem[] {\n return this.breadcrumbsSubject.getValue();\n }\n}","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BreadcrumbItem, BreadcrumbService } from './breadcrumb.service';\n\nexport type BreadcrumbSeparator = 'chevron' | 'slash' | 'arrow';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Navigation breadcrumb showing the current page hierarchy. Can be fed with\n * static items or driven by the shared BreadcrumbService.\n */\n@Component({\n selector: 'shk-breadcrumb',\n standalone: true,\n imports: [RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <nav class=\"shk-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"shk-breadcrumb-list\">\n @for (item of resolvedItems(); track $index; let last = $last) {\n <li class=\"shk-breadcrumb-item\">\n @if (!last && item.route) {\n <a\n [routerLink]=\"item.route\"\n class=\"shk-breadcrumb-link\"\n [attr.aria-current]=\"null\"\n >\n {{ item.label }}\n </a>\n } @else {\n <span\n class=\"shk-breadcrumb-current\"\n [attr.aria-current]=\"last ? 'page' : null\"\n >\n {{ item.label }}\n </span>\n }\n @if (!last) {\n <span class=\"shk-breadcrumb-separator\" aria-hidden=\"true\">\n @switch (separator()) {\n @case ('slash') {\n <span class=\"shk-breadcrumb-separator-text\">/</span>\n }\n @case ('arrow') {\n <span class=\"shk-breadcrumb-separator-text\">&gt;</span>\n }\n @default {\n <svg\n class=\"shk-breadcrumb-separator-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n }\n }\n </span>\n }\n </li>\n }\n </ol>\n </nav>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .shk-breadcrumb-list {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.375rem;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n }\n .shk-breadcrumb-item {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n min-width: 0;\n }\n .shk-breadcrumb-link {\n color: var(--shk-surface-500);\n text-decoration: none;\n transition: color 0.15s ease;\n cursor: pointer;\n }\n .shk-breadcrumb-link:hover {\n color: var(--shk-primary-600);\n }\n .shk-breadcrumb-current {\n color: var(--shk-primary-700);\n font-weight: 600;\n }\n .shk-breadcrumb-separator {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--shk-surface-300);\n user-select: none;\n margin: 0 0.25rem;\n }\n .shk-breadcrumb-separator-text {\n font-size: 0.875rem;\n }\n .shk-breadcrumb-separator-icon {\n width: 0.875rem;\n height: 0.875rem;\n }\n `,\n ],\n})\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\n private readonly breadcrumbService = inject(BreadcrumbService);\n\n /** Static list of breadcrumb items. Takes precedence over the service items. */\n items = input<BreadcrumbItem[]>([]);\n /** Visual separator between items: 'chevron', 'slash' or 'arrow'. */\n separator = input<BreadcrumbSeparator>('chevron');\n /** When true, subscribes to the BreadcrumbService to resolve items. */\n useService = input<boolean>(true);\n\n /** Items received from the BreadcrumbService. */\n protected serviceItems = signal<BreadcrumbItem[]>([]);\n\n /** Final items: static `items` if provided, otherwise the service items. */\n protected resolvedItems = computed<BreadcrumbItem[]>(() => {\n const staticItems = this.items();\n if (staticItems.length > 0) return staticItems;\n if (this.useService()) return this.serviceItems();\n return [];\n });\n\n /** Active subscription to the breadcrumb stream. */\n private serviceSub: { unsubscribe(): void } | null = null;\n\n constructor() {\n effect(() => {\n this.resolvedItems();\n });\n }\n\n /** Subscribes to the BreadcrumbService when `useService` is enabled. */\n ngOnInit(): void {\n if (this.useService()) {\n this.serviceSub = this.breadcrumbService.breadcrumbs$.subscribe((items) => {\n this.serviceItems.set(items);\n });\n }\n }\n\n /** Unsubscribes from the breadcrumb stream to avoid leaks. */\n ngOnDestroy(): void {\n this.serviceSub?.unsubscribe();\n }\n}\n","/* Theme — import theme.css in your global styles.css:\n @import '@shirkasoft/ui-components/theme.css';\n Override --shk-* CSS variables at :root or .dark to theme.\n*/\nexport { TextFieldComponent } from './lib/text-field/text-field.component';\nexport { NotificationComponent } from './lib/notification/notification.component';\nexport type { NotificationPosition } from './lib/notification/notification.component';\nexport { NotificationService } from './lib/notification/notification.service';\nexport type { Notification } from './lib/notification/notification.service';\nexport { ToggleComponent } from './lib/toggle/toggle.component';\nexport { PriceInputComponent } from './lib/price-input/price-input.component';\nexport { DatePickerComponent } from './lib/date-picker/date-picker.component';\nexport type { DatePickerView } from './lib/date-picker/date-picker.component';\nexport { ConfirmDialogComponent } from './lib/confirm-dialog/confirm-dialog.component';\nexport { ConfirmDialogService } from './lib/confirm-dialog/confirm-dialog.service';\nexport type { ConfirmConfig } from './lib/confirm-dialog/confirm-dialog.service';\nexport { ModalComponent } from './lib/modal/modal.component';\nexport { ModalService } from './lib/modal/modal.service';\nexport type { ModalConfig } from './lib/modal/modal.service';\nexport { SelectComponent } from './lib/select/select.component';\nexport type { SelectOption } from './lib/select/select.component';\nexport { FileUploadComponent } from './lib/file-upload/file-upload.component';\nexport type { FileUploadError } from './lib/file-upload/file-upload.component';\nexport { TableComponent } from './lib/table/table.component';\nexport type {\n Column,\n TableAction,\n RowAction,\n PageChangeEvent,\n FilterChangeEvent,\n} from './lib/table/table.component';\nexport { TooltipComponent } from './lib/tooltip/tooltip.component';\nexport { SidebarComponent } from './lib/sidebar/sidebar.component';\nexport type { SidebarItem, SidebarGroup } from './lib/sidebar/sidebar.component';\nexport { RailSidebarComponent } from './lib/rail-sidebar/rail-sidebar.component';\nexport type {\n RailSidebarItem,\n RailSidebarSection,\n RailSidebarSectionEvent,\n} from './lib/rail-sidebar/rail-sidebar.component';\nexport { ChartComponent } from './lib/chart/chart.component';\nexport { COLOR_PALETTE, readThemeColors } from './lib/chart/chart.utils';\nexport { TimelineComponent } from './lib/timeline/timeline.component';\nexport {\n DEFAULT_MARKER_GRADIENTS,\n DEFAULT_SUPPLIER_TYPE_ICONS,\n DEFAULT_SUPPLIER_ICON_COLORS,\n} from './lib/timeline/timeline.component';\nexport type {\n TimelineItem,\n TimelineSubItem,\n TimelineMeta,\n TimelineAction,\n TimelineItemAction,\n TimelineSubItemAction,\n TimelineAlignment,\n TimelineMarkerSize,\n} from './lib/timeline/timeline.component';\nexport { FieldsetComponent } from './lib/fieldset/fieldset.component';\nexport type { FieldsetHeaderAction } from './lib/fieldset/fieldset.component';\nexport { WizardComponent, ShkWizardStepContent } from './lib/wizard/wizard.component';\nexport type { WizardStep } from './lib/wizard/wizard.component';\nexport { SkeletonComponent } from './lib/skeleton/skeleton.component';\nexport type { SkeletonShape, SkeletonAnimation } from './lib/skeleton/skeleton.component';\nexport { TagComponent } from './lib/tag/tag.component';\nexport type { TagSeverity } from './lib/tag/tag.component';\nexport { ButtonComponent } from './lib/button/button.component';\nexport type { ButtonSeverity, ButtonSize, ButtonIconPosition } from './lib/button/button.component';\nexport { KnobComponent } from './lib/knob/knob.component';\nexport {\n LoadingSpinnerComponent,\n LoadingBarComponent,\n LoadingOverlayComponent,\n LoadingDotsComponent,\n} from './lib/loading';\nexport type { LoadingOverlayBackdrop } from './lib/loading';\nexport {\n TabsComponent,\n TablistComponent,\n TabComponent,\n TabpanelsComponent,\n TabPanelComponent,\n} from './lib/tabs';\nexport { BreadcrumbComponent } from './lib/breadcrumb';\nexport type { BreadcrumbSeparator } from './lib/breadcrumb';\nexport { BreadcrumbService } from './lib/breadcrumb';\nexport type { BreadcrumbItem } from './lib/breadcrumb';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getIconFromCentral","i1","i3"],"mappings":"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AAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EA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"}