ngx-lite-form 1.3.6 → 1.3.7
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":"ngx-lite-form.mjs","sources":["../../../projects/lite-form/src/lib/field-dto.ts","../../../projects/lite-form/src/lib/form-utils.ts","../../../projects/lite-form/src/lib/lite-input/lite-input.ts","../../../projects/lite-form/src/lib/lite-input/lite-input.html","../../../projects/lite-form/src/lib/lite-textarea/lite-textarea.ts","../../../projects/lite-form/src/lib/lite-textarea/lite-textarea.html","../../../projects/lite-form/src/lib/lite-select/lite-select.ts","../../../projects/lite-form/src/lib/lite-select/lite-select.html","../../../projects/lite-form/src/lib/lite-multi-select/lite-multi-select.ts","../../../projects/lite-form/src/lib/lite-multi-select/lite-multi-select.html","../../../projects/lite-form/src/lib/lite-radio/lite-radio.ts","../../../projects/lite-form/src/lib/lite-radio/lite-radio.html","../../../projects/lite-form/src/lib/lite-checkbox/lite-checkbox.ts","../../../projects/lite-form/src/lib/lite-checkbox/lite-checkbox.html","../../../projects/lite-form/src/lib/lite-date/lite-date.ts","../../../projects/lite-form/src/lib/lite-date/lite-date.html","../../../projects/lite-form/src/lib/lite-datetime/lite-datetime.ts","../../../projects/lite-form/src/lib/lite-datetime/lite-datetime.html","../../../projects/lite-form/src/lib/lite-password/lite-password.ts","../../../projects/lite-form/src/lib/lite-password/lite-password.html","../../../projects/lite-form/src/lib/lite-file/lite-file.ts","../../../projects/lite-form/src/lib/lite-file/lite-file.html","../../../projects/lite-form/src/lib/lite-snackbar/lite-snackbar.service.ts","../../../projects/lite-form/src/lib/lite-paginator/lite-paginator.ts","../../../projects/lite-form/src/lib/lite-paginator/lite-paginator.html","../../../projects/lite-form/src/lib/lite-table/lite-table.ts","../../../projects/lite-form/src/lib/lite-table/lite-table.html","../../../projects/lite-form/src/lib/lite-panel/lite-panel.ts","../../../projects/lite-form/src/lib/lite-panel/lite-panel.html","../../../projects/lite-form/src/lib/lite-loading/lite-loading.ts","../../../projects/lite-form/src/lib/lite-loading/lite-loading.html","../../../projects/lite-form/src/public-api.ts","../../../projects/lite-form/src/ngx-lite-form.ts"],"sourcesContent":["import { FormControl } from \"@angular/forms\";\n\nexport class FieldDto {\n label: string;\n formControl: FormControl;\n rows?: number;\n type?: 'text' | 'number';\n\n constructor(label: string, formControl: FormControl, rows: number = 2, type: 'text' | 'number' = 'text') {\n this.label = label;\n this.formControl = formControl;\n this.rows = rows;\n this.type = type;\n }\n}\n\nexport abstract class BaseSelectFieldDto<T = any> {\n label: string;\n options: T[];\n displayWith: (_option: T) => string;\n \n constructor(\n label: string,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n this.label = label;\n this.options = options;\n this.displayWith = displayWith;\n }\n}\n\nexport class SelectFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T>;\n \n constructor(\n label: string,\n formControl: FormControl<T>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class MultiSelectFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T[]>;\n \n constructor(\n label: string,\n formControl: FormControl<T[]>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class RadioFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T>;\n \n constructor(\n label: string,\n formControl: FormControl<T>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class FileFieldDto {\n label: string;\n formControl: FormControl;\n multiple?: boolean;\n accept?: string;\n maxFileSize?: number;\n maxFiles?: number;\n showPreview?: boolean;\n\n constructor(\n label: string,\n formControl: FormControl,\n multiple: boolean = true,\n accept: string = '*/*',\n maxFileSize: number = 10 * 1024 * 1024, // 10MB\n maxFiles: number = 10,\n showPreview: boolean = true\n ) {\n this.label = label;\n this.formControl = formControl;\n this.multiple = multiple;\n this.accept = accept;\n this.maxFileSize = maxFileSize;\n this.maxFiles = maxFiles;\n this.showPreview = showPreview;\n }\n}\n\nexport type SnackbarType = 'done' | 'warn' | 'error';\n\nexport class PaginatorFieldDto {\n currentPage: number;\n totalItems: number;\n itemsPerPage: number;\n\n constructor(\n currentPage: number = 1,\n totalItems: number = 0,\n itemsPerPage: number = 10\n ) {\n this.currentPage = currentPage;\n this.totalItems = totalItems;\n this.itemsPerPage = itemsPerPage;\n }\n}\n\nexport interface TableColumn {\n key: string;\n label: string;\n flex?: string;\n sortable?: boolean;\n cellTemplate?: (value: any, row: any) => string;\n // Optional type for special rendering. Defaults to 'text'.\n type?: 'text' | 'menu';\n // When type is 'menu', provide menu items shown in the row actions dropdown.\n menuItems?: Array<{ label: string; value: string; variant?: 'danger' | 'default' }>;\n}\n\nexport class TableFieldDto<T = any> {\n columns: TableColumn[];\n data: T[];\n showPaginator?: boolean;\n paginatorConfig: PaginatorFieldDto;\n\n constructor(\n columns: TableColumn[],\n data: T[],\n showPaginator: boolean = false,\n paginatorConfig: PaginatorFieldDto = new PaginatorFieldDto()\n ) {\n this.columns = columns;\n this.data = data;\n this.showPaginator = showPaginator;\n this.paginatorConfig = paginatorConfig;\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n/**\n * Utility class for form-related helper functions\n */\nexport class FormUtils {\n /**\n * Check if a FormControl has the required validator\n * @param control - The AbstractControl to check\n * @returns true if the control has a required validator, false otherwise\n */\n static isRequired(control: AbstractControl): boolean {\n if (control.validator) {\n const validator = control.validator({} as any);\n return validator && validator['required'];\n }\n return false;\n }\n\n /**\n * Check if a FormControl has any validation errors\n * @param control - The AbstractControl to check\n * @returns true if the control has errors, false otherwise\n */\n static hasErrors(control: AbstractControl): boolean {\n return control.invalid && (control.dirty || control.touched);\n }\n\n /**\n * Get all error keys for a FormControl\n * @param control - The AbstractControl to check\n * @returns array of error keys or empty array if no errors\n */\n static getErrors(control: AbstractControl): string[] {\n if (control.errors) {\n return Object.keys(control.errors);\n }\n return [];\n }\n\n /**\n * Get user-friendly error messages for a FormControl\n * @param control - The AbstractControl to check\n * @param fieldLabel - The label of the field for error messages\n * @returns array of user-friendly error messages\n */\n static getErrorMessages(control: AbstractControl, fieldLabel: string): string[] {\n const errorMessages: string[] = [];\n \n if (control.errors) {\n if (control.errors['required']) {\n errorMessages.push(`${fieldLabel} is required`);\n }\n if (control.errors['email']) {\n errorMessages.push(`${fieldLabel} must be a valid email`);\n }\n if (control.errors['minlength']) {\n errorMessages.push(`${fieldLabel} must be at least ${control.errors['minlength'].requiredLength} characters`);\n }\n if (control.errors['maxlength']) {\n errorMessages.push(`${fieldLabel} must be no more than ${control.errors['maxlength'].requiredLength} characters`);\n }\n \n // Handle any other validation errors\n const allErrors = FormUtils.getErrors(control);\n const handledErrors = ['required', 'email', 'minlength', 'maxlength'];\n const unhandledErrors = allErrors.filter(error => !handledErrors.includes(error));\n \n unhandledErrors.forEach(error => {\n errorMessages.push(`${fieldLabel} is invalid: ${error}`);\n });\n }\n \n return errorMessages;\n }\n\n /**\n * Get the first error message for a FormControl\n * @param control - The AbstractControl to check\n * @returns the first error key or null if no errors\n */\n static getFirstError(control: AbstractControl): string | null {\n if (control.errors) {\n return Object.keys(control.errors)[0];\n }\n return null;\n }\n\n /**\n * Get detailed password error messages for a FormControl\n * @param control - The AbstractControl to check\n * @param fieldLabel - The label of the field for error messages\n * @returns array of detailed password error messages\n */\n static getPasswordErrorMessages(control: AbstractControl, fieldLabel: string): string[] {\n const errorMessages: string[] = [];\n \n if (control.errors) {\n // Required validation\n if (control.errors['required']) {\n errorMessages.push(`${fieldLabel} is required`);\n }\n \n // Length validations\n if (control.errors['minlength']) {\n const requiredLength = control.errors['minlength'].requiredLength;\n const actualLength = control.errors['minlength'].actualLength;\n errorMessages.push(`${fieldLabel} must be at least ${requiredLength} characters (currently ${actualLength})`);\n }\n \n if (control.errors['maxlength']) {\n const requiredLength = control.errors['maxlength'].requiredLength;\n const actualLength = control.errors['maxlength'].actualLength;\n errorMessages.push(`${fieldLabel} must be no more than ${requiredLength} characters (currently ${actualLength})`);\n }\n \n // Pattern validation with detailed feedback\n if (control.errors['pattern']) {\n const value = control.value || '';\n const patternRequiredValue = control.errors['pattern'].requiredPattern;\n \n // Analyze the actual pattern to provide specific feedback\n const missingRequirements: string[] = [];\n \n // Check what the actual pattern requires by analyzing the regex\n if (patternRequiredValue) {\n // Check if the pattern requires lowercase letters\n if (patternRequiredValue.includes('(?=.*[a-z])') && !/[a-z]/.test(value)) {\n missingRequirements.push('at least one lowercase letter (a-z)');\n }\n \n // Check if the pattern requires uppercase letters\n if (patternRequiredValue.includes('(?=.*[A-Z])') && !/[A-Z]/.test(value)) {\n missingRequirements.push('at least one uppercase letter (A-Z)');\n }\n \n // Check if the pattern requires digits\n if ((patternRequiredValue.includes('(?=.*\\\\d)') || patternRequiredValue.includes('(?=.*[0-9])')) && !/\\d/.test(value)) {\n missingRequirements.push('at least one number (0-9)');\n }\n \n // Check if the pattern requires special characters\n if (patternRequiredValue.includes('(?=.*[@$!%*?&]') && !/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(value)) {\n missingRequirements.push('at least one special character (!@#$%^&*()_+-=[]{}|;\\':\",./<>?)');\n }\n \n // Check for minimum length in pattern (e.g., {8,} or {8,50})\n const lengthMatch = patternRequiredValue.match(/\\{(\\d+),?\\d*\\}/);\n if (lengthMatch) {\n const minLength = parseInt(lengthMatch[1]);\n if (value.length < minLength) {\n missingRequirements.push(`at least ${minLength} characters`);\n }\n }\n \n // Check if spaces are not allowed\n if (patternRequiredValue.includes('[A-Za-z\\\\d') && !patternRequiredValue.includes('\\\\s') && /\\s/.test(value)) {\n missingRequirements.push('no spaces allowed');\n }\n }\n \n // Fallback to generic checks if pattern analysis didn't find specific requirements\n if (missingRequirements.length === 0) {\n // Check for common password requirements as fallback\n if (!/[a-z]/.test(value)) {\n missingRequirements.push('at least one lowercase letter (a-z)');\n }\n \n if (!/[A-Z]/.test(value)) {\n missingRequirements.push('at least one uppercase letter (A-Z)');\n }\n \n if (!/\\d/.test(value)) {\n missingRequirements.push('at least one number (0-9)');\n }\n \n if (!/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(value)) {\n missingRequirements.push('at least one special character (!@#$%^&*()_+-=[]{}|;\\':\",./<>?)');\n }\n }\n \n if (missingRequirements.length > 0) {\n errorMessages.push(`${fieldLabel} must contain ${missingRequirements.join(', ')}`);\n } else {\n // Show the actual pattern if we can't determine specific requirements\n errorMessages.push(`${fieldLabel} does not match required pattern: ${patternRequiredValue}`);\n }\n }\n \n // Custom password complexity validator\n if (control.errors['passwordComplexity']) {\n const complexity = control.errors['passwordComplexity'];\n const missing: string[] = [];\n \n if (!complexity.hasUpperCase) missing.push('uppercase letter');\n if (!complexity.hasLowerCase) missing.push('lowercase letter');\n if (!complexity.hasNumeric) missing.push('number');\n if (!complexity.hasSpecial) missing.push('special character');\n if (!complexity.minLength) missing.push('minimum length requirement');\n \n if (missing.length > 0) {\n errorMessages.push(`${fieldLabel} is missing: ${missing.join(', ')}`);\n }\n }\n \n // Password mismatch (for confirm password fields)\n if (control.errors['passwordMismatch']) {\n errorMessages.push(`${fieldLabel} does not match the password`);\n }\n \n // Common password validator\n if (control.errors['commonPassword']) {\n errorMessages.push(`${fieldLabel} is too common. Please choose a more secure password`);\n }\n \n // Password history validator\n if (control.errors['passwordHistory']) {\n errorMessages.push(`${fieldLabel} has been used recently. Please choose a different password`);\n }\n \n // Handle any other validation errors not specifically handled\n const allErrors = FormUtils.getErrors(control);\n const handledErrors = [\n 'required', 'minlength', 'maxlength', 'pattern', \n 'passwordComplexity', 'passwordMismatch', 'commonPassword', 'passwordHistory'\n ];\n const unhandledErrors = allErrors.filter(error => !handledErrors.includes(error));\n \n unhandledErrors.forEach(error => {\n errorMessages.push(`${fieldLabel} validation error: ${error}`);\n });\n }\n \n return errorMessages;\n }\n\n /**\n * Analyze password strength and return feedback\n * @param password - The password string to analyze\n * @returns object with strength score and detailed feedback\n */\n static analyzePasswordStrength(password: string): {\n score: number;\n level: 'Very Weak' | 'Weak' | 'Fair' | 'Good' | 'Strong';\n feedback: string[];\n } {\n const feedback: string[] = [];\n let score = 0;\n \n if (!password) {\n return { score: 0, level: 'Very Weak', feedback: ['Password is required'] };\n }\n \n // Length scoring\n if (password.length >= 8) score += 1;\n else feedback.push('Use at least 8 characters');\n \n if (password.length >= 12) score += 1;\n else if (password.length >= 8) feedback.push('Consider using 12+ characters for better security');\n \n // Character variety scoring\n if (/[a-z]/.test(password)) score += 1;\n else feedback.push('Add lowercase letters');\n \n if (/[A-Z]/.test(password)) score += 1;\n else feedback.push('Add uppercase letters');\n \n if (/\\d/.test(password)) score += 1;\n else feedback.push('Add numbers');\n \n if (/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(password)) score += 1;\n else feedback.push('Add special characters');\n \n // Additional checks\n if (!/(.)\\1{2,}/.test(password)) score += 1;\n else feedback.push('Avoid repeating characters');\n \n if (!/^(.{1,2})\\1+$/.test(password)) score += 1;\n else feedback.push('Avoid repetitive patterns');\n \n // Determine strength level\n let level: 'Very Weak' | 'Weak' | 'Fair' | 'Good' | 'Strong';\n if (score <= 2) level = 'Very Weak';\n else if (score <= 4) level = 'Weak';\n else if (score <= 5) level = 'Fair';\n else if (score <= 6) level = 'Good';\n else level = 'Strong';\n \n return { score, level, feedback };\n }\n}\n","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-input',\n templateUrl: `./lite-input.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteInput {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n \n readonly FormUtils = FormUtils;\n\n constructor() {\n effect(() => {\n // console.log('LiteInput initialized with control:', this.control());\n\n });\n }\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n}\n","<div class=\"lite-input\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <input type=\"text\" [formControl]=\"control().formControl\" placeholder=\"\" [ngClass]=\"{'invalid': hasErrors()}\" />\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().formControl.value }}</div>\n }\n</div>","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-textarea',\n \n templateUrl: `./lite-textarea.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteTextarea {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n \n // Make FormUtils available to the template\n readonly FormUtils = FormUtils;\n \n constructor() {\n effect(() => {\n // Initialization logic can go here if needed\n });\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n}\n","<div class=\"lite-textarea\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <textarea [formControl]=\"control().formControl\" placeholder=\"\" rows=\"{{ control().rows }}\" [ngClass]=\"{'invalid': hasErrors()}\"></textarea>\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().formControl.value }}</div>\n }\n</div>","import { Component, effect, input, ElementRef, HostListener } from '@angular/core';\nimport { SelectFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-select',\n \n templateUrl: `./lite-select.html`,\n styleUrls: [`../lite-styles.scss`],\n animations: [\n trigger('toggleView', [\n state('collapse', style({ height: 0, borderStyle: 'none' })),\n state('expand', style({ height: '*', borderStyle: 'solid' })),\n transition('collapse <=> expand', animate('300ms ease-in-out'))\n ])\n ]\n})\nexport class LiteSelect {\n inEdit = input<boolean>(true);\n control = input<SelectFieldDto>({ label: '', formControl: new FormControl(null), options: [], displayWith: (option) => option });\n showOptions = 'collapse';\n \n // Separate input text from FormControl value\n inputText = '';\n \n readonly FormUtils = FormUtils;\n \n constructor(private _elementRef: ElementRef) {\n effect(() => {\n // Sync inputText with FormControl value when it changes\n const value = this.control().formControl.value;\n if (value && typeof value === 'object') {\n this.inputText = this.control().displayWith(value);\n } else if (!value) {\n this.inputText = '';\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showOptions === 'expand') {\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.showOptions = 'collapse';\n }\n }\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n optionSelected(option: any): void {\n this.control().formControl.setValue(option);\n this.inputText = this.control().displayWith(option);\n this.showOptions = 'collapse';\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.inputText = target.value;\n // Note: FormControl value is only updated when a valid option is selected\n }\n\n onInputBlur(): void {\n this.showOptions = 'collapse';\n // If the typed text matches an option exactly, select it\n const matchingOption = this.control().options.find(option => \n this.control().displayWith(option).toLowerCase() === this.inputText.toLowerCase()\n );\n \n if (matchingOption) {\n this.control().formControl.setValue(matchingOption);\n this.inputText = this.control().displayWith(matchingOption);\n } else {\n // If no match and FormControl has a value, reset inputText to show the current selection\n const currentValue = this.control().formControl.value;\n if (currentValue && typeof currentValue === 'object') {\n this.inputText = this.control().displayWith(currentValue);\n }\n // If no current selection and no match, leave inputText as typed for user feedback\n }\n }\n\n getDisplayValue(): string {\n return this.inputText;\n }\n\n hasTypedValue(): boolean {\n // Check if user has typed something that doesn't match any option\n if (!this.inputText.trim()) return false;\n \n // Check if the current inputText matches any valid option's display value\n const matchesValidOption = this.control().options.some(option => \n this.control().displayWith(option).toLowerCase() === this.inputText.toLowerCase()\n );\n \n return !matchesValidOption;\n }\n\n getFilteredOptions(): any[] {\n if (!this.inputText.trim()) {\n return this.control().options;\n }\n \n return this.control().options.filter(option =>\n this.control().displayWith(option).toLowerCase().includes(this.inputText.toLowerCase())\n );\n }\n\n shouldShowPlaceholder(): boolean {\n // Only show placeholder when label is floating (not overlapping)\n return this.showOptions === 'expand' || !!this.getDisplayValue() || this.hasTypedValue();\n }\n}\n","<div class=\"lite-select\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <input type=\"text\" [value]=\"getDisplayValue()\" (input)=\"onInputChange($event)\" [ngClass]=\"{'selected': control().formControl.value, 'invalid': hasErrors()}\"\n (focus)=\"showOptions = 'expand'\" (blur)=\"onInputBlur()\" \n [placeholder]=\"shouldShowPlaceholder() ? 'Type to search...' : ''\" />\n <div class=\"options\" [@toggleView]=\"showOptions\">\n @for (option of getFilteredOptions(); track option) {\n <div class=\"option\" (click)=\"optionSelected(option)\">{{ control().displayWith(option) }}</div>\n }\n </div>\n <div class=\"label\" [ngClass]=\"{float: showOptions=='expand' || getDisplayValue() || hasTypedValue()}\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"arrow_box\" (click)=\"showOptions = showOptions === 'expand' ? 'collapse' : 'expand'\"><div class=\"arrow\"></div></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().displayWith(control().formControl.value) }}</div>\n }\n</div>","import { Component, effect, input, ElementRef, HostListener, ViewChild, AfterViewInit } from '@angular/core';\nimport { MultiSelectFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-multi-select',\n \n templateUrl: `./lite-multi-select.html`,\n styleUrls: [`../lite-styles.scss`],\n animations: [\n trigger('toggleView', [\n state('collapse', style({ height: 0, opacity: 0 })),\n state('expand', style({ height: '*', opacity: 1 })),\n transition('collapse <=> expand', animate('300ms ease-in-out'))\n ])\n ]\n})\nexport class LiteMultiSelect implements AfterViewInit {\n inEdit = input<boolean>(true);\n control = input<MultiSelectFieldDto>({ \n label: '', \n formControl: new FormControl<any[]>([], { nonNullable: true }), \n options: [], \n displayWith: (option) => option \n });\n showOptions = 'collapse';\n \n // Separate input text for filtering from FormControl values\n inputText = '';\n isFocused = false;\n \n // Separate text for filtering options (different from display text)\n private filterText = '';\n \n // Container height variable\n containerHeight = '36px';\n \n @ViewChild('selectedItemsRef', { static: false }) selectedItemsRef?: ElementRef;\n \n readonly FormUtils = FormUtils;\n \n constructor(private _elementRef: ElementRef) {\n effect(() => {\n // Effect to react to FormControl value changes\n // Selected items are now displayed inline, so no need to update inputText\n const _values = this.control().formControl.value || [];\n // Component will re-render automatically when values change\n });\n \n // Subscribe to value changes to update container height\n effect(() => {\n const formControl = this.control().formControl;\n if (formControl) {\n formControl.valueChanges.subscribe(() => {\n this.updateContainerHeight();\n });\n }\n });\n }\n\n ngAfterViewInit(): void {\n // ViewChild will be available after view init\n // Set initial container height\n this.updateContainerHeight();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showOptions === 'expand') {\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.showOptions = 'collapse';\n this.filterText = ''; // Clear filter when closing\n // No need to update display text since selected items are shown inline\n }\n }\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n optionToggled(option: any): void {\n // Set flag to prevent dropdown from closing\n const currentValues = this.control().formControl.value || [];\n const isSelected = this.isOptionSelected(option);\n let newValues: any[];\n if (isSelected) {\n // Remove option\n newValues = currentValues.filter(value => \n JSON.stringify(value) !== JSON.stringify(option)\n );\n } else {\n // Add option\n newValues = [...currentValues, option];\n }\n this.control().formControl.setValue(newValues);\n // Height will be updated by valueChanges subscription\n }\n\n isOptionSelected(option: any): boolean {\n const currentValues = this.control().formControl.value || [];\n return currentValues.some(value => \n JSON.stringify(value) === JSON.stringify(option)\n );\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.inputText = target.value;\n this.filterText = target.value;\n // Input is used for filtering only - display is handled by selected items\n }\n\n onInputFocus(): void {\n this.showOptions = 'expand';\n this.isFocused = true;\n this.inputText = '';\n this.filterText = '';\n }\n\n onInputBlur(): void {\n this.isFocused = false;\n }\n\n getDisplayValue(): string {\n // Always return filter text for the input - selected items are shown separately\n return this.filterText;\n }\n\n updateDisplayText(): void {\n // No longer needed to update inputText since selected items are shown inline\n // This method can be kept for compatibility but doesn't need to do anything\n }\n\n hasTypedValue(): boolean {\n // Check if user is typing (for filtering)\n if (!this.filterText.trim()) return false;\n const values = this.control().formControl.value || [];\n if (values.length === 0) return true;\n if (values.length === 1) {\n return this.filterText !== this.control().displayWith(values[0]);\n }\n return this.filterText !== `${values.length} items selected`;\n }\n\n getFilteredOptions(): any[] {\n if (!this.filterText.trim()) {\n return this.control().options;\n }\n return this.control().options.filter(option =>\n this.control().displayWith(option).toLowerCase().includes(this.filterText.toLowerCase())\n );\n }\n\n getSelectedCount(): number {\n const values = this.control().formControl.value || [];\n return values.length;\n }\n\n hasSelection(): boolean {\n return this.getSelectedCount() > 0;\n }\n\n getSelectedItems(): any[] {\n return this.control().formControl.value || [];\n }\n\n removeSelectedItem(item: any): void {\n const currentValues = this.control().formControl.value || [];\n const newValues = currentValues.filter(value => \n JSON.stringify(value) !== JSON.stringify(item)\n );\n this.control().formControl.setValue(newValues);\n // Height will be updated by valueChanges subscription\n }\n\n private updateContainerHeight(): void {\n // Schedule height calculation for next tick to ensure DOM is updated\n setTimeout(() => {\n if (this.selectedItemsRef?.nativeElement) {\n const naturalHeight = this.selectedItemsRef.nativeElement.getBoundingClientRect().height;\n const baseHeight = 36;\n const padding = 4;\n this.containerHeight = `${Math.max(baseHeight, naturalHeight + padding)}px`;\n console.log('Updated container height', this.containerHeight, naturalHeight);\n } else if (!this.hasSelection()) {\n this.containerHeight = '36px';\n }\n }, 0);\n }\n shouldFloat() {\n return this.showOptions === 'expand' || this.hasSelection() || this.hasTypedValue();\n }\n\n shouldShowPlaceholder(): boolean {\n // Show placeholder when filtering or when no items are selected\n return (this.isFiltering() || !this.hasSelection()) && this.shouldFloat();\n }\n\n isFiltering(): boolean {\n return !!this.filterText.trim();\n }\n}\n","<div class=\"lite-multi-select\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"input-container\" \n [ngClass]=\"{'selected': hasSelection(), 'invalid': hasErrors()}\"\n [style.height]=\"containerHeight\">\n <!-- Selected items overlay on input -->\n @if (hasSelection() && !isFiltering() && !isFocused) {\n <div class=\"selected-items-inline\" #selectedItemsRef>\n @for (item of getSelectedItems(); track item) {\n <span class=\"selected-item-inline\">\n {{ control().displayWith(item) }}\n <button type=\"button\" class=\"remove-item-inline\" (click)=\"removeSelectedItem(item)\">×</button>\n </span>\n }\n </div>\n }\n <input type=\"text\" [value]=\"getDisplayValue()\" (input)=\"onInputChange($event)\" \n (focus)=\"onInputFocus()\" (blur)=\"onInputBlur()\"\n [placeholder]=\"shouldShowPlaceholder() ? 'Type to filter options...' : ''\" \n class=\"filter-input\" />\n </div>\n <div class=\"options\" [@toggleView]=\"showOptions\">\n <!-- Options list -->\n @for (option of getFilteredOptions(); track option) {\n <div class=\"option multi-option\" \n [ngClass]=\"{'selected': isOptionSelected(option)}\"\n (click)=\"optionToggled(option)\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(option)\" \n (click)=\"$event.stopPropagation(); optionToggled(option)\" readonly />\n <span class=\"option-text\">{{ control().displayWith(option) }}</span>\n </div>\n }\n @if (getFilteredOptions().length === 0) {\n <div class=\"no-options\">No options found</div>\n }\n </div>\n <div class=\"label\" [ngClass]=\"{float: shouldFloat()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </div>\n <div class=\"arrow_box\" (click)=\"showOptions = showOptions === 'expand' ? 'collapse' : 'expand'\">\n <div class=\"arrow\"></div>\n </div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @for (item of getSelectedItems(); track item) {\n <span class=\"item\">\n {{ control().displayWith(item) }}\n </span>\n }\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { RadioFieldDto } from '../field-dto';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-radio',\n \n templateUrl: './lite-radio.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LiteRadio {\n inEdit = input<boolean>(true);\n control = input<RadioFieldDto>({ \n label: '', \n formControl: new FormControl(''), \n options: [], \n displayWith: (option) => option \n });\n direction = input<'vertical' | 'horizontal'>('vertical');\n\n readonly FormUtils = FormUtils;\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onRadioChange(value: any): void {\n this.control().formControl.setValue(value);\n }\n\n isSelected(value: any): boolean {\n return this.control().formControl.value === value;\n }\n}\n","<div class=\"lite-radio\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"radio-container\">\n <div class=\"label\" [ngClass]=\"{'float': true}\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"radio-options\" [ngClass]=\"{'horizontal': direction() === 'horizontal', 'vertical': direction() === 'vertical'}\">\n @for (option of control().options; track option) {\n <label class=\"radio-option\">\n <input type=\"radio\" [value]=\"option\" [checked]=\"isSelected(option)\"\n (change)=\"onRadioChange(option)\" [name]=\"control().label + '_radio'\" class=\"radio-input\" />\n <span class=\"radio-label\">{{ control().displayWith(option) }}</span>\n </label>\n }\n </div>\n </div>\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @if (control().formControl.value) {\n {{ control().displayWith(control().formControl.value) }}\n } @else {\n <span class=\"no-value\">Not selected</span>\n }\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-checkbox',\n \n templateUrl: `./lite-checkbox.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteCheckbox {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl<boolean>(false, { nonNullable: true }) });\n \n readonly FormUtils = FormUtils;\n\n constructor() {\n effect(() => {\n // console.log('LiteCheckbox initialized with control:', this.control());\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onCheckboxChange(event: Event) {\n const target = event.target as HTMLInputElement;\n this.control().formControl.setValue(target.checked);\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n}\n","<div class=\"lite-checkbox\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <div class=\"checkbox-container\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" \n [checked]=\"control().formControl.value\" \n (change)=\"onCheckboxChange($event)\"\n class=\"checkbox-input\" />\n <div class=\"checkbox-text\">{{ control().label }}<span *ngIf=\"isRequired()\" class=\"required\">*</span></div>\n\n </label>\n </div>\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @if (control().formControl.value) {\n <span class=\"checked\">✓ Yes</span>\n } @else {\n <span class=\"unchecked\">✗ No</span>\n }\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n","import { Component, effect, input, signal, ElementRef, HostListener, computed } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { FieldDto } from '../field-dto';\n\ninterface CalendarDay {\n date: Date;\n day: number;\n isOtherMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart?: boolean;\n isRangeEnd?: boolean;\n isInRange?: boolean;\n}\n\nexport interface DateRangeFieldDto extends Omit<FieldDto, 'formControl'> {\n formControl: FormControl<string[]>;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-date',\n \n templateUrl: `./lite-date.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteDate {\n inEdit = input<boolean>(true);\n control = input<FieldDto | DateRangeFieldDto>({ \n label: '', \n formControl: new FormControl<string>('', { nonNullable: true }),\n });\n format = input<string>('dd/MM/yyyy');\n range = input<boolean>(false);\n \n // Calendar state\n currentMonth = signal<Date>(new Date());\n showCalendar = signal<boolean>(false);\n calendarPosition = signal<'bottom' | 'top'>('bottom');\n \n // Signal to track form control value changes for reactivity\n private formValueChangeSignal = signal<any>(null);\n \n // Second month for range selection\n secondMonth = computed(() => {\n const current = this.currentMonth();\n return new Date(current.getFullYear(), current.getMonth() + 1, 1);\n });\n \n // Computed calendar days - only recalculates when dependencies change\n calendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n this.formValueChangeSignal();\n return this.getMonthDays(this.currentMonth());\n });\n \n // Second month calendar days for range mode\n secondCalendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n this.formValueChangeSignal();\n return this.range() ? this.getMonthDays(this.secondMonth()) : [];\n });\n\n private getMonthDays(monthDate: Date): CalendarDay[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n \n // First day of the month\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n const days: CalendarDay[] = [];\n const today = new Date();\n const selectedValue = this.control().formControl.value;\n \n // Handle both single date and date range\n let selectedDates: Date[] = [];\n let rangeStart: Date | null = null;\n let rangeEnd: Date | null = null;\n \n if (this.range()) {\n // Range mode - value should be string[]\n const rangeValue = selectedValue as string[];\n if (rangeValue && rangeValue.length > 0) {\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n selectedDates.push(startDate);\n rangeStart = startDate;\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n selectedDates.push(endDate);\n rangeEnd = endDate;\n }\n }\n }\n } else {\n // Single mode - value should be string\n const singleValue = selectedValue as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n selectedDates.push(date);\n }\n }\n }\n \n // Only add days from the current month\n const previousMonth = new Date(firstDay);\n while (previousMonth.getDay() !== 0) {\n previousMonth.setDate(previousMonth.getDate() - 1);\n days.unshift({\n date: new Date(previousMonth),\n day: previousMonth.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(previousMonth, today),\n isSelected: selectedDates.some(selectedDate => this.isSameDay(previousMonth, selectedDate)),\n });\n }\n const currentDate = new Date(firstDay);\n while (currentDate <= lastDay) {\n const isToday = this.isSameDay(currentDate, today);\n const isSelected = selectedDates.some(selectedDate => this.isSameDay(currentDate, selectedDate));\n \n // Range styling flags\n const isRangeStart = rangeStart ? this.isSameDay(currentDate, rangeStart) : false;\n const isRangeEnd = rangeEnd ? this.isSameDay(currentDate, rangeEnd) : false;\n const isInRange = !!(rangeStart && rangeEnd && currentDate >= rangeStart && currentDate <= rangeEnd && !isRangeStart && !isRangeEnd);\n \n days.push({\n date: new Date(currentDate),\n day: currentDate.getDate(),\n isOtherMonth: false,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n const nextMonthDate = new Date(lastDay);\n while (nextMonthDate.getDay() < 6) {\n nextMonthDate.setDate(nextMonthDate.getDate() + 1);\n days.push({\n date: new Date(nextMonthDate),\n day: nextMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(nextMonthDate, today),\n isSelected: selectedDates.some(selectedDate => this.isSameDay(nextMonthDate, selectedDate)),\n });\n }\n return days;\n }\n \n readonly FormUtils = FormUtils;\n\n constructor(private _elementRef: ElementRef) {\n effect(() => {\n const control = this.control();\n // console.log('LiteDate initialized with control:', control);\n \n // Subscribe to form control value changes to trigger reactivity\n if (control && control.formControl) {\n const _subscription = control.formControl.valueChanges.subscribe(value => {\n console.log('Form value changed:', value);\n this.formValueChangeSignal.set(Date.now()); // Use timestamp to ensure change detection\n });\n \n // Initial trigger\n this.formValueChangeSignal.set(Date.now());\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this._elementRef.nativeElement.contains(event.target as Node)) {\n this.showCalendar.set(false);\n }\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onDateChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n \n if (!inputValue) {\n if (this.range()) {\n const newValue = ['', ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n } else {\n (this.control().formControl as FormControl<string>).setValue('');\n this.formValueChangeSignal.set(Date.now());\n }\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n return;\n }\n \n if (this.range()) {\n // Range mode - check if input contains \" - \" separator\n if (inputValue.includes(' - ')) {\n const rangeParts = inputValue.split(' - ');\n if (rangeParts.length === 2) {\n const startDateParsed = this.parseFormattedDate(rangeParts[0].trim(), this.format());\n const endDateParsed = this.parseFormattedDate(rangeParts[1].trim(), this.format());\n \n if (startDateParsed && endDateParsed) {\n // Store as ISO date strings for consistency\n const startIso = this.toLocalISOString(startDateParsed);\n const endIso = this.toLocalISOString(endDateParsed);\n \n // Ensure start date is before end date\n let newValue: string[];\n if (startDateParsed <= endDateParsed) {\n newValue = [startIso, endIso];\n } else {\n newValue = [endIso, startIso];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n } else {\n // If parsing fails, store the raw input values\n const newValue = [rangeParts[0].trim(), rangeParts[1].trim()];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Invalid range format, store as single date\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string[];\n if (parsedDate) {\n const isoString = this.toLocalISOString(parsedDate);\n newValue = [isoString, ''];\n } else {\n newValue = [inputValue, ''];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Single date input in range mode\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string[];\n if (parsedDate) {\n const isoString = this.toLocalISOString(parsedDate);\n newValue = [isoString, ''];\n } else {\n newValue = [inputValue, ''];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Single mode - try to parse the formatted date input\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string;\n if (parsedDate) {\n // Store as ISO date string for consistency\n newValue = this.toLocalISOString(parsedDate);\n } else {\n // If parsing fails, store the raw input value\n newValue = inputValue;\n }\n (this.control().formControl as FormControl<string>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n\n private parseFormattedDate(dateString: string, format: string): Date | null {\n try {\n // Create a regex pattern from the format\n let pattern = format\n .replace('dd', '(\\\\d{1,2})')\n .replace('MM', '(\\\\d{1,2})')\n .replace('yyyy', '(\\\\d{4})');\n \n const regex = new RegExp(`^${pattern}$`);\n const match = dateString.match(regex);\n \n if (!match) return null;\n \n // Extract parts based on format\n let day: number, month: number, year: number;\n \n if (format === 'dd/MM/yyyy') {\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n year = parseInt(match[3], 10);\n } else if (format === 'MM/dd/yyyy') {\n month = parseInt(match[1], 10) - 1; // Month is 0-indexed\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === 'yyyy-MM-dd') {\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n day = parseInt(match[3], 10);\n } else {\n // Default to dd/MM/yyyy\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n }\n \n const date = new Date(year, month, day);\n \n // Validate the date\n if (date.getFullYear() === year && \n date.getMonth() === month && \n date.getDate() === day) {\n return date;\n }\n \n return null;\n } catch {\n return null;\n }\n }\n\n getFormattedValue(): string {\n const value = this.control().formControl.value;\n if (!value) return '';\n \n if (this.range()) {\n // Range mode - value is string[]\n const rangeValue = value as string[];\n if (rangeValue && rangeValue.length >= 2) {\n const dates = [];\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n dates.push(this.formatDate(startDate, this.format()));\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n dates.push(this.formatDate(endDate, this.format()));\n }\n }\n if (dates.length === 2) {\n return `${dates[0]} - ${dates[1]}`;\n } else if (dates.length === 1) {\n return dates[0];\n }\n }\n return '';\n } else {\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue; // Return original value if invalid date\n }\n return '';\n }\n }\n\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n if (!value) return 'Not selected';\n \n if (this.range()) {\n // Range mode - value is string[]\n const rangeValue = value as string[];\n if (rangeValue && rangeValue.length >= 2) {\n const dates = [];\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n dates.push(this.formatDate(startDate, this.format()));\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n dates.push(this.formatDate(endDate, this.format()));\n }\n }\n if (dates.length === 2) {\n return `${dates[0]} - ${dates[1]}`;\n } else if (dates.length === 1) {\n return dates[0];\n }\n }\n return 'Not selected';\n } else {\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue;\n }\n return 'Not selected';\n }\n }\n\n private formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n \n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year);\n }\n\n // Calendar methods\n toggleCalendar(): void {\n if (!this.showCalendar()) {\n this.calculateCalendarPosition();\n this.setCalendarToSelectedDate();\n }\n this.showCalendar.set(!this.showCalendar());\n }\n\n private setCalendarToSelectedDate(): void {\n const selectedValue = this.control().formControl.value;\n if (selectedValue) {\n let selectedDate: Date | null = null;\n \n if (this.range()) {\n // Range mode - use first date if available\n const rangeValue = selectedValue as string[];\n if (rangeValue && rangeValue.length > 0 && rangeValue[0]) {\n selectedDate = new Date(rangeValue[0]);\n }\n } else {\n // Single mode\n const singleValue = selectedValue as string;\n if (singleValue) {\n selectedDate = new Date(singleValue);\n }\n }\n \n if (selectedDate && !isNaN(selectedDate.getTime())) {\n // Set calendar to show the month of the selected date\n const selectedMonth = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);\n this.currentMonth.set(selectedMonth);\n }\n }\n }\n\n private calculateCalendarPosition(): void {\n const element = this._elementRef.nativeElement;\n const rect = element.getBoundingClientRect();\n const calendarHeight = 300; // Approximate height of calendar panel\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n \n // If not enough space below and more space above, position on top\n if (spaceBelow < calendarHeight && spaceAbove > spaceBelow) {\n this.calendarPosition.set('top');\n } else {\n this.calendarPosition.set('bottom');\n }\n }\n\n getMonthYearDisplay(): string {\n const date = this.currentMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n getSecondMonthYearDisplay(): string {\n const date = this.secondMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newDate);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newDate);\n }\n\n selectDate(day: CalendarDay): void {\n const dateString = this.toLocalISOString(day.date);\n \n if (this.range()) {\n // Range mode - handle start and end date selection\n const currentValue = this.control().formControl.value as string[];\n const currentRange = currentValue || ['', ''];\n \n if (!currentRange[0] || (currentRange[0] && currentRange[1])) {\n // Set start date if no start date or both dates are set (reset)\n // Clear any existing range formatting by setting only the start date\n const newValue = [dateString, ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n } else {\n // Set end date\n const startDate = new Date(currentRange[0]);\n const endDate = new Date(dateString);\n \n // Check if clicking the same date as start date\n if (this.isSameDay(startDate, endDate)) {\n // Reset to just the start date\n const newValue = [dateString, ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n } else {\n // Ensure start date is before end date\n let newValue: string[];\n if (startDate <= endDate) {\n newValue = [currentRange[0], dateString];\n } else {\n newValue = [dateString, currentRange[0]];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n \n // Auto-hide calendar after 1 second when second date is selected\n setTimeout(() => {\n this.showCalendar.set(false);\n }, 1000);\n }\n }\n } else {\n // Single mode\n (this.control().formControl as FormControl<string>).setValue(dateString);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n this.showCalendar.set(false); // Close calendar after selection\n }\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n // Helper method to convert Date to ISO date string without timezone conversion\n private toLocalISOString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n}\n","<div class=\"lite-date\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <input type=\"text\" \n [value]=\"getFormattedValue()\" \n (change)=\"onDateChange($event)\"\n [class.invalid]=\"hasErrors()\"\n [placeholder]=\"range() ? format() + ' - ' + format() : format()\" />\n <label class=\"label\" [ngClass]=\"{'float': getFormattedValue()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"calendar_icon\" (click)=\"toggleCalendar()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"calendar\" viewBox=\"0 0 16 16\">\n <path d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1.5A1.5 1.5 0 0 1 16 2.5v11A1.5 1.5 0 0 1 14.5 15H1.5A1.5 1.5 0 0 1 0 13.5v-11A1.5 1.5 0 0 1 1.5 1H3V.5a.5.5 0 0 1 .5-.5zM1.5 2a.5.5 0 0 0-.5.5V4h14V2.5a.5.5 0 0 0-.5-.5H13v.5a.5.5 0 0 1-1 0V2H4v.5a.5.5 0 0 1-1 0V2H1.5zM15 5H1v8.5a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5V5z\"/>\n </svg>\n </div>\n \n @if (showCalendar()) {\n <div class=\"calendar-overlay\" [ngClass]=\"'position-' + calendarPosition()\">\n <ng-container *ngTemplateOutlet=\"calendarPanel\"></ng-container>\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n {{ getDisplayValue() }}\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n<ng-template #calendarPanel>\n <div class=\"calendar-panel\" [ngClass]=\"{'range-mode': range()}\">\n @if (range()) {\n <!-- Range mode: Two month calendars side by side -->\n <div class=\"dual-calendar\">\n <!-- First month -->\n <div class=\"calendar-month\">\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <div class=\"nav-spacer\"></div>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n \n <!-- Second month -->\n <div class=\"calendar-month\">\n <div class=\"calendar-header\">\n <div class=\"nav-spacer\"></div>\n <span class=\"month-year\">{{ getSecondMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of secondCalendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n } @else {\n <!-- Single month mode -->\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</ng-template>\n","import { Component, effect, input, signal, ElementRef, HostListener, computed } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { FieldDto } from '../field-dto';\n\ninterface CalendarDateTime {\n date: Date;\n day: number;\n isOtherMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-datetime',\n \n templateUrl: `./lite-datetime.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteDateTime {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ \n label: '', \n formControl: new FormControl<string>('', { nonNullable: true }),\n });\n format = input<string>('dd/MM/yyyy HH:mm');\n \n // Calendar state\n currentMonth = signal<Date>(new Date());\n showCalendar = signal<boolean>(false);\n calendarPosition = signal<'bottom' | 'top'>('bottom');\n formattedValue = signal<string>('');\n hourSet = new Array(24).fill(0).map((_, i) => i);\n minSet = new Array(12).fill(0).map((_, i) => i * 5);\n selectedHour = new Date().getHours();\n selectedMinute = 0;\n selectedDateTime: CalendarDateTime | null = null;\n // Signal to track form control value changes for reactivity\n // private formValueChangeSignal = signal<any>(null);\n \n // Computed calendar days - only recalculates when dependencies change\n calendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n // this.formValueChangeSignal();\n return this.getMonthDays(this.currentMonth());\n });\n\n private getMonthDays(monthDate: Date): CalendarDateTime[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n \n // First day of the month\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n const days: CalendarDateTime[] = [];\n const today = new Date();\n const value = this.control().formControl.value;\n\n // Single mode - value should be string\n if (value) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n this.selectedDateTime = {\n date,\n day: date.getDate(),\n isOtherMonth: false,\n isToday: this.isSameDay(date, today),\n isSelected: true,\n };\n }\n }\n \n // Only add days from the current month\n const previousMonthDate = new Date(firstDay);\n while (previousMonthDate.getDay() !== 0) {\n previousMonthDate.setDate(previousMonthDate.getDate() - 1);\n days.unshift({\n date: new Date(previousMonthDate),\n day: previousMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(previousMonthDate, today),\n isSelected: this.isSameDay(previousMonthDate, this.selectedDateTime ? this.selectedDateTime.date : null),\n });\n }\n const currentDate = new Date(firstDay);\n while (currentDate <= lastDay) {\n const isToday = this.isSameDay(currentDate, today);\n const isSelected = this.isSameDay(currentDate, this.selectedDateTime ? this.selectedDateTime.date : null);\n days.push({\n date: new Date(currentDate),\n day: currentDate.getDate(),\n isOtherMonth: false,\n isToday,\n isSelected,\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n const nextMonthDate = new Date(lastDay);\n while (nextMonthDate.getDay() < 6) {\n nextMonthDate.setDate(nextMonthDate.getDate() + 1);\n days.push({\n date: new Date(nextMonthDate),\n day: nextMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(nextMonthDate, today),\n isSelected: this.isSameDay(nextMonthDate, this.selectedDateTime ? this.selectedDateTime.date : null),\n });\n }\n return days;\n }\n \n readonly FormUtils = FormUtils;\n\n constructor(private _elementRef: ElementRef) {\n effect(() => {\n const control = this.control();\n // console.log('LiteDateTime with control:', control);\n \n // Subscribe to form control value changes to trigger reactivity\n if (control && control.formControl) {\n control.formControl.valueChanges.subscribe(value => {\n if (value) {\n const date = new Date(value);\n // console.log('Form value changed:', value, date, isNaN(date.getTime()));\n if (!isNaN(date.getTime())) {\n console.log('Formatted Date:', this.formatDate(date, this.format()))\n this.formattedValue.set(this.formatDate(date, this.format()));\n } else {\n this.formattedValue.set(value);\n }\n }\n });\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this._elementRef.nativeElement.contains(event.target as Node)) {\n this.showCalendar.set(false);\n }\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onDateChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n \n if (!inputValue) {\n (this.control().formControl as FormControl<string>).setValue('');\n // this.formValueChangeSignal.set(Date.now());\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n return;\n }\n \n\n // Single mode - try to parse the formatted date input\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string;\n if (parsedDate) {\n // Store as ISO date string for consistency\n newValue = this.toLocalISOString(parsedDate);\n } else {\n // If parsing fails, store the raw input value\n newValue = inputValue;\n }\n (this.control().formControl as FormControl<string>).setValue(newValue);\n // this.formValueChangeSignal.set(Date.now());\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n onSelectHour(hour: number) {\n this.selectedHour = hour;\n this.setDateTimeSelected(this.selectedDateTime ? this.selectedDateTime.date : new Date());\n }\n onSelectMinute(minute: number) {\n this.selectedMinute = minute;\n this.setDateTimeSelected(this.selectedDateTime ? this.selectedDateTime.date : new Date());\n }\n private setDateTimeSelected(date: Date): void {\n this.selectedDateTime = {\n date,\n day: date.getDate(),\n isOtherMonth: false,\n isToday: date.getDate() === new Date().getDate(),\n isSelected: true,\n };\n const dateString = this.toLocalISOString(this.selectedDateTime.date);\n (this.control().formControl as FormControl<string>).setValue(dateString);\n const calDate = this.calendarDays().find(d => this.isSameDay(d.date, date));\n if (calDate) {calDate.isSelected = true;}\n }\n private parseFormattedDate(dateString: string, format: string): Date | null {\n try {\n // Create a regex pattern from the format\n let pattern = format\n .replace('dd', '(\\\\d{1,2})')\n .replace('MM', '(\\\\d{1,2})')\n .replace('yyyy', '(\\\\d{4})');\n \n const regex = new RegExp(`^${pattern}$`);\n const match = dateString.match(regex);\n \n if (!match) return null;\n \n // Extract parts based on format\n let day: number, month: number, year: number;\n \n if (format === 'dd/MM/yyyy') {\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n year = parseInt(match[3], 10);\n } else if (format === 'MM/dd/yyyy') {\n month = parseInt(match[1], 10) - 1; // Month is 0-indexed\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === 'yyyy-MM-dd') {\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n day = parseInt(match[3], 10);\n } else {\n // Default to dd/MM/yyyy\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n }\n \n const date = new Date(year, month, day);\n \n // Validate the date\n if (date.getFullYear() === year && \n date.getMonth() === month && \n date.getDate() === day) {\n return date;\n }\n \n return null;\n } catch {\n return null;\n }\n }\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n if (!value) return 'Not selected';\n\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue;\n }\n return 'Not selected';\n }\n\n private formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n \n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year)\n .replace('HH', (this.selectedHour < 10 ? '0' : '') + this.selectedHour)\n .replace('mm', (this.selectedMinute < 10 ? '0' : '') + this.selectedMinute);\n }\n\n // Calendar methods\n toggleCalendar(): void {\n if (!this.showCalendar()) {\n this.calculateCalendarPosition();\n this.setCalendarToSelectedDate();\n }\n this.showCalendar.set(!this.showCalendar());\n }\n\n closeCalendar(): void {\n this.showCalendar.set(false);\n }\n\n private setCalendarToSelectedDate(): void {\n const selectedValue = this.control().formControl.value;\n if (selectedValue) {\n let selectedDate: Date | null = null;\n\n // Single mode\n const singleValue = selectedValue as string;\n if (singleValue) {\n selectedDate = new Date(singleValue);\n }\n \n if (selectedDate && !isNaN(selectedDate.getTime())) {\n // Set calendar to show the month of the selected date\n const selectedMonth = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);\n this.currentMonth.set(selectedMonth);\n }\n }\n }\n\n private calculateCalendarPosition(): void {\n const element = this._elementRef.nativeElement;\n const rect = element.getBoundingClientRect();\n const calendarHeight = 300; // Approximate height of calendar panel\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n \n // If not enough space below and more space above, position on top\n if (spaceBelow < calendarHeight && spaceAbove > spaceBelow) {\n this.calendarPosition.set('top');\n } else {\n this.calendarPosition.set('bottom');\n }\n }\n\n getMonthYearDisplay(): string {\n const date = this.currentMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newDate);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newDate);\n }\n\n selectDate(day: CalendarDateTime): void {\n if (this.selectedDateTime){\n this.selectedDateTime.isSelected = false;\n }\n // this.selectedDateTime = day;\n // this.selectedDateTime.isSelected = true;\n this.setDateTimeSelected(day.date);\n // const dateString = this.toLocalISOString(day.date);\n // (this.control().formControl as FormControl<string>).setValue(dateString);\n // // this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n \n // this.control().formControl.markAsDirty();\n // this.control().formControl.markAsTouched();\n }\n\n private isSameDay(date1: Date, date2: Date | null): boolean {\n if (!date2) return false;\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n // Helper method to convert Date to ISO date string without timezone conversion\n private toLocalISOString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n const hh = (this.selectedHour < 10 ? '0' : '') + this.selectedHour;\n const mm = (this.selectedMinute < 10 ? '0' : '') + this.selectedMinute;\n return `${year}-${month}-${day}T${hh}:${mm}:00`;\n }\n\n}\n","<div class=\"lite-date\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <input type=\"text\" \n [value]=\"formattedValue()\" \n (change)=\"onDateChange($event)\"\n [class.invalid]=\"hasErrors()\"\n [placeholder]=\"format()\" />\n <label class=\"label\" [ngClass]=\"{'float': formattedValue()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"calendar_icon\" (click)=\"toggleCalendar()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"calendar\" viewBox=\"0 0 16 16\">\n <path d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1.5A1.5 1.5 0 0 1 16 2.5v11A1.5 1.5 0 0 1 14.5 15H1.5A1.5 1.5 0 0 1 0 13.5v-11A1.5 1.5 0 0 1 1.5 1H3V.5a.5.5 0 0 1 .5-.5zM1.5 2a.5.5 0 0 0-.5.5V4h14V2.5a.5.5 0 0 0-.5-.5H13v.5a.5.5 0 0 1-1 0V2H4v.5a.5.5 0 0 1-1 0V2H1.5zM15 5H1v8.5a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5V5z\"/>\n </svg>\n </div>\n \n @if (showCalendar()) {\n <div class=\"calendar-overlay\" [ngClass]=\"'position-' + calendarPosition()\">\n <ng-container *ngTemplateOutlet=\"calendarPanel\"></ng-container>\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n {{ getDisplayValue() }}\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n<ng-template #calendarPanel>\n <div class=\"calendar-panel datetime\">\n <div class=\"date-panel\">\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{'today': day.isToday, 'selected': day.isSelected, 'dim': day.isOtherMonth}\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"time-panel\">\n <div class=\"control-header\">\n <button type=\"button\" class=\"close-button\" (click)=\"closeCalendar()\" aria-label=\"Close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path d=\"M2.146 2.146a.5.5 0 0 1 .708 0L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"time-header\">HOURS</div>\n <div class=\"hh-grid\">\n @for (hh of hourSet; track hh) {\n <div class=\"hh-slot\" [ngClass]=\"{'selected': selectedHour === hh}\" (click)=\"onSelectHour(hh)\">\n {{ hh < 10 ? '0' + hh : hh }}\n </div>\n }\n </div>\n <div class=\"time-header\">MINUTES</div>\n <div class=\"hh-grid\">\n @for (mm of minSet; track mm) {\n <div class=\"hh-slot\" [ngClass]=\"{'selected': selectedMinute === mm}\" (click)=\"onSelectMinute(mm)\">\n {{ mm < 10 ? '0' + mm : mm }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, effect, input, signal, computed } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-password',\n \n templateUrl: `./lite-password.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LitePassword {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n showToggle = input<boolean>(true);\n showStrengthIndicator = input<boolean>(false);\n \n readonly FormUtils = FormUtils;\n showPassword = signal<boolean>(false);\n\n // Computed password strength analysis\n passwordStrength = computed(() => {\n const password = this.control().formControl.value || '';\n return FormUtils.analyzePasswordStrength(password);\n });\n\n constructor() {\n effect(() => {\n // console.log('LitePassword initialized with control:', this.control());\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getPasswordErrorMessages(this.control().formControl, this.control().label);\n }\n\n togglePasswordVisibility() {\n this.showPassword.set(!this.showPassword());\n }\n\n getInputType(): string {\n return this.showPassword() ? 'text' : 'password';\n }\n\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n return value ? '••••••••' : '';\n }\n}\n","<div class=\"lite-password\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"input-container\">\n <input \n [type]=\"getInputType()\" \n [formControl]=\"control().formControl\" \n placeholder=\"\" \n [ngClass]=\"{'invalid': hasErrors()}\" />\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (showToggle() && control().formControl.value) {\n <button \n type=\"button\" \n class=\"toggle-button\" \n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"showPassword() ? 'Hide password' : 'Show password'\">\n @if (showPassword()) {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n }\n </button>\n }\n </div>\n @if (showStrengthIndicator() && control().formControl.value) {\n <div class=\"password-strength\">\n <div class=\"strength-bar\">\n <div class=\"strength-fill\" [ngClass]=\"'strength-' + passwordStrength().level.toLowerCase().replace(' ', '-')\"></div>\n </div>\n <div class=\"strength-info\">\n <span class=\"strength-level\" [ngClass]=\"'level-' + passwordStrength().level.toLowerCase().replace(' ', '-')\">\n {{ passwordStrength().level }}\n </span>\n <span class=\"strength-score\">({{ passwordStrength().score }}/8)</span>\n </div>\n @if (passwordStrength().feedback.length > 0) {\n <div class=\"strength-feedback\">\n @for (tip of passwordStrength().feedback; track tip) {\n <div class=\"feedback-tip\">• {{ tip }}</div>\n }\n </div>\n }\n </div>\n }\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ getDisplayValue() }}</div>\n }\n</div>\n","import { Component, effect, input, signal, computed, ViewChild, ElementRef } from '@angular/core';\nimport { FileFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface FileItem {\n id: string;\n file: File;\n name: string;\n size: number;\n type: string;\n url?: string;\n uploadProgress?: number;\n isUploading?: boolean;\n error?: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-file',\n \n templateUrl: `./lite-file.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteFile {\n file_icon = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"file-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10,9 9,9 8,9\"></polyline></svg>`\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild('cameraInput') cameraInput!: ElementRef<HTMLInputElement>;\n\n inEdit = input<boolean>(true);\n control = input<FileFieldDto>({ label: '', formControl: new FormControl<FileItem[]>([]) });\n \n readonly FormUtils = FormUtils;\n \n // State signals\n files = signal<FileItem[]>([]);\n showPanel = signal<boolean>(false);\n isDragOver = signal<boolean>(false);\n isUploading = signal<boolean>(false);\n\n // Computed values\n fileCount = computed(() => this.files().length);\n totalSize = computed(() => \n this.files().reduce((total, file) => total + file.size, 0)\n );\n hasErrors = computed(() => \n this.files().some(file => file.error)\n );\n \n // Get configuration from control\n multiple = computed(() => this.control().multiple ?? true);\n accept = computed(() => this.control().accept ?? '*/*');\n maxFileSize = computed(() => this.control().maxFileSize ?? 10 * 1024 * 1024);\n maxFiles = computed(() => this.control().maxFiles ?? 10);\n showPreview = computed(() => this.control().showPreview ?? true);\n\n constructor(private _sanitizer: DomSanitizer) {\n effect(() => {\n // console.log('LiteFile initialized with control:', this.control());\n \n // Sync files with form control\n const controlValue = this.control().formControl.value || [];\n if (Array.isArray(controlValue)) {\n this.files.set(controlValue);\n }\n });\n\n // Watch files changes and update form control\n effect(() => {\n const currentFiles = this.files();\n this.control().formControl.setValue(currentFiles);\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasFormErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n // File operations\n onFileSelect(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this.handleFiles(Array.from(input.files));\n }\n // Reset input\n input.value = '';\n }\n\n onCameraCapture(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this.handleFiles(Array.from(input.files));\n }\n // Reset input\n input.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = Array.from(event.dataTransfer?.files || []);\n this.handleFiles(files);\n }\n svgToBase64DataUrl(svgString: string): SafeHtml {\n const base64 = btoa(svgString);\n const img = `data:image/svg+xml;base64,${base64}`;\n return this._sanitizer.bypassSecurityTrustUrl(img);\n }\n\n private handleFiles(newFiles: File[]) {\n const currentFiles = this.files();\n const processedFiles: FileItem[] = [];\n\n for (const file of newFiles) {\n // Check file count limit\n if (!this.multiple() && currentFiles.length >= 1) {\n console.warn('Multiple files not allowed');\n break;\n }\n\n if (currentFiles.length + processedFiles.length >= this.maxFiles()) {\n console.warn(`Maximum ${this.maxFiles()} files allowed`);\n break;\n }\n\n // Validate file\n const validation = this.validateFile(file);\n \n const fileItem: FileItem = {\n id: this.generateFileId(),\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n error: validation.error\n };\n\n // Create preview URL for images\n if (this.showPreview() && file.type.startsWith('image/')) {\n fileItem.url = URL.createObjectURL(file);\n }\n\n processedFiles.push(fileItem);\n }\n\n // Update files\n if (this.multiple()) {\n this.files.set([...currentFiles, ...processedFiles]);\n } else {\n this.files.set(processedFiles.slice(0, 1));\n }\n }\n\n private validateFile(file: File): { valid: boolean; error?: string } {\n // Check file size\n if (file.size > this.maxFileSize()) {\n return {\n valid: false,\n error: `File size exceeds ${this.formatFileSize(this.maxFileSize())}`\n };\n }\n\n // Check file type if accept is specified\n const acceptTypes = this.accept();\n if (acceptTypes && acceptTypes !== '*/*') {\n const allowedTypes = acceptTypes.split(',').map((type: string) => type.trim());\n const isAllowed = allowedTypes.some((allowedType: string) => {\n if (allowedType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(allowedType.toLowerCase());\n }\n return file.type.match(new RegExp(allowedType.replace('*', '.*')));\n });\n\n if (!isAllowed) {\n return {\n valid: false,\n error: `File type not allowed. Accepted: ${acceptTypes}`\n };\n }\n }\n\n return { valid: true };\n }\n\n removeFile(fileId: string) {\n const currentFiles = this.files();\n const fileToRemove = currentFiles.find(f => f.id === fileId);\n \n // Revoke object URL to prevent memory leaks\n if (fileToRemove?.url) {\n URL.revokeObjectURL(fileToRemove.url);\n }\n\n this.files.set(currentFiles.filter(f => f.id !== fileId));\n }\n\n clearAllFiles() {\n // Revoke all object URLs\n this.files().forEach(file => {\n if (file.url) {\n URL.revokeObjectURL(file.url);\n }\n });\n\n this.files.set([]);\n }\n\n // UI actions\n togglePanel() {\n this.showPanel.set(!this.showPanel());\n }\n\n closePanel() {\n this.showPanel.set(false);\n }\n\n openFileDialog() {\n this.fileInput.nativeElement.click();\n }\n\n openCameraDialog() {\n this.cameraInput.nativeElement.click();\n }\n\n // Utility methods\n private generateFileId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n getFileIcon(fileType: string): string {\n if (fileType.startsWith('image/')) return '🖼️';\n if (fileType.startsWith('video/')) return '🎥';\n if (fileType.startsWith('audio/')) return '🎵';\n if (fileType.includes('pdf')) return '📄';\n if (fileType.includes('word')) return '📝';\n if (fileType.includes('excel') || fileType.includes('spreadsheet')) return '📊';\n if (fileType.includes('powerpoint') || fileType.includes('presentation')) return '📋';\n if (fileType.includes('zip') || fileType.includes('rar')) return '🗜️';\n return '📁';\n }\n\n isImage(fileType: string): boolean {\n return fileType.startsWith('image/');\n }\n\n getTotalSizeFormatted(): string {\n return this.formatFileSize(this.totalSize());\n }\n}\n","<div class=\"lite-file\" [class.in-edit]=\"inEdit()\">\n <label class=\"label\" [class.required]=\"isRequired()\">{{ control().label }}</label>\n <button [class.has-files]=\"fileCount() > 0\" [class.has-errors]=\"hasErrors()\" (click)=\"togglePanel()\">\n <img [src]=\"svgToBase64DataUrl(file_icon)\" alt=\"file icon\">\n <!-- Badge -->\n <span class=\"file-badge\">\n {{ fileCount() }}\n </span>\n </button>\n\n</div>\n<!-- Panel overlay -->\n<div class=\"panel-overlay\" \n [class.visible]=\"showPanel()\" \n (click)=\"closePanel()\">\n</div>\n<!-- Management panel -->\n<div class=\"file-panel\" [class.visible]=\"showPanel()\">\n <div class=\"panel-header\">\n <h3>File Management</h3>\n <button (click)=\"closePanel()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div class=\"panel-content\">\n <!-- File upload area -->\n <div class=\"upload-area\" \n [class.drag-over]=\"isDragOver()\"\n [class.uploading]=\"isUploading()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFileDialog()\">\n \n <div class=\"upload-content\">\n <svg class=\"upload-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7,10 12,15 17,10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <p>Drop files here or click to browse</p>\n <small>Max {{ maxFiles() }} files, {{ formatFileSize(maxFileSize()) }} each</small>\n </div>\n\n <!-- Hidden file inputs -->\n <input #fileInput\n type=\"file\"\n [multiple]=\"multiple()\"\n [accept]=\"accept()\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none;\">\n\n <input #cameraInput\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n (change)=\"onCameraCapture($event)\"\n style=\"display: none;\">\n </div>\n\n <!-- Action buttons -->\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"action-btn upload-btn\" (click)=\"openFileDialog()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"17,8 12,3 7,8\"></polyline>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>\n </svg>\n Upload Files\n </button>\n\n <button type=\"button\" class=\"action-btn camera-btn\" (click)=\"openCameraDialog()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"></path>\n <circle cx=\"12\" cy=\"13\" r=\"4\"></circle>\n </svg>\n Take Picture\n </button>\n\n <button type=\"button\" class=\"action-btn close-btn\" (click)=\"closePanel()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n Close\n </button>\n </div>\n\n <!-- File list -->\n <div class=\"file-list\" *ngIf=\"fileCount() > 0\">\n <div class=\"file-list-header\">\n <span>Files ({{ fileCount() }})</span>\n <span class=\"total-size\">{{ getTotalSizeFormatted() }}</span>\n <button type=\"button\" class=\"clear-all-btn\" (click)=\"clearAllFiles()\">\n Clear All\n </button>\n </div>\n\n <div class=\"file-items\">\n <div class=\"file-item\" \n *ngFor=\"let file of files()\" \n [class.has-error]=\"file.error\"\n [class.uploading]=\"file.isUploading\">\n \n <!-- File preview/icon -->\n <div class=\"file-preview\">\n <img *ngIf=\"file.url && isImage(file.type)\" \n [src]=\"file.url\" \n [alt]=\"file.name\"\n class=\"preview-image\">\n <span *ngIf=\"!file.url || !isImage(file.type)\" \n class=\"file-type-icon\">\n {{ getFileIcon(file.type) }}\n </span>\n </div>\n\n <!-- File info -->\n <div class=\"file-info\">\n <div class=\"file-name\" [title]=\"file.name\">{{ file.name }}</div>\n <div class=\"file-details\">\n <span class=\"file-size\">{{ formatFileSize(file.size) }}</span>\n <span class=\"file-type\">{{ file.type || 'Unknown' }}</span>\n </div>\n <div class=\"file-error\" *ngIf=\"file.error\">{{ file.error }}</div>\n \n <!-- Upload progress -->\n <div class=\"upload-progress\" *ngIf=\"file.isUploading && file.uploadProgress !== undefined\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"file.uploadProgress\"></div>\n </div>\n <span class=\"progress-text\">{{ file.uploadProgress }}%</span>\n </div>\n </div>\n\n <!-- Remove button -->\n <button type=\"button\" \n class=\"remove-file-btn\" \n (click)=\"removeFile(file.id)\"\n [disabled]=\"file.isUploading\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path d=\"M19,6v14a2,2,0,0,1-2,2H7a2,2,0,0,1-2-2V6m3,0V4a2,2,0,0,1,2-2h4a2,2,0,0,1,2,2V6\"></path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"empty-state\" *ngIf=\"fileCount() === 0\">\n <svg class=\"empty-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline>\n </svg>\n <p>No files uploaded yet</p>\n <small>Click upload or drag files to get started</small>\n </div>\n </div>\n</div>\n\n<!-- Error messages -->\n<div class=\"error-messages\" *ngIf=\"hasFormErrors()\">\n <div class=\"error-message\" *ngFor=\"let error of getErrorMessage()\">{{ error }}</div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { SnackbarType } from '../field-dto';\n\n@Injectable({ providedIn: 'root' })\nexport class LiteSnackbarService {\n private timeoutId: any;\n private snackbarElem: HTMLElement | null = null;\n\n show(text: string, type: SnackbarType = 'done', duration: number = 3000) {\n this.clear();\n this.snackbarElem = document.createElement('div');\n this.snackbarElem.className = `lite-snackbar ${type}`;\n this.snackbarElem.innerHTML = `\n <div class=\"icon\">${this.getIcon(type)}</div>\n <div class=\"text\">${this.escapeHtml(text)}</div>\n `;\n this.injectStyles();\n document.body.appendChild(this.snackbarElem);\n this.timeoutId = setTimeout(() => this.clear(), duration);\n }\n\n clear() {\n if (this.timeoutId) clearTimeout(this.timeoutId);\n if (this.snackbarElem && this.snackbarElem.parentNode) {\n this.snackbarElem.parentNode.removeChild(this.snackbarElem);\n }\n this.snackbarElem = null;\n }\n\n private getIcon(type: SnackbarType) {\n if (type === 'done') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M6 10.5L9 13.5L14 8.5\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n }\n if (type === 'warn') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M10 6V11\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"/><circle cx=\"10\" cy=\"14\" r=\"1\" fill=\"#fff\"/></svg>`;\n }\n if (type === 'error') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M7 7L13 13M13 7L7 13\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>`;\n }\n return '';\n }\n\n private injectStyles() {\n if (document.getElementById('lite-snackbar-style')) return;\n const style = document.createElement('style');\n style.id = 'lite-snackbar-style';\n style.innerHTML = `\n .lite-snackbar {\n position: fixed;\n left: 50%;\n top: 20px;\n transform: translateX(-50%);\n min-width: 200px;\n max-width: 90vw;\n padding: 8px 15px 8px 5px;\n border-radius: 6px;\n color: #fff;\n font-size: 1rem;\n display: flex;\n align-items: center;\n box-shadow: 0 2px 12px rgba(0,0,0,0.18);\n z-index: 9999;\n opacity: 0.9;\n animation: snackbar-in 0.2s;\n }\n .lite-snackbar.done { background: #3a82eeff; }\n .lite-snackbar.warn { background: #f7b731; }\n .lite-snackbar.error { background: #e74c3c; }\n .lite-snackbar .icon { margin-right: 5px; height: 30px; }\n @keyframes snackbar-in {\n from { opacity: 0; transform: translateX(-50%) translateY(-30px); }\n to { opacity: 0.9; transform: translateX(-50%) translateY(0); }\n }\n `;\n document.head.appendChild(style);\n }\n\n private escapeHtml(text: string) {\n return text.replace(/[&<>'\"]/g, c => ({'&':'&','<':'<','>':'>','\\'':''','\"':'"'}[c]||c));\n }\n}\n","import { Component, input, computed, output, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginatorFieldDto } from '../field-dto';\n\n@Component({\n selector: 'lite-paginator',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './lite-paginator.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LitePaginator {\n paginator = input.required<PaginatorFieldDto>();\n pageChange = output<number>();\n itemsPerPageChange = output<number>();\n\n // Computed properties that react to input changes\n totalPages = computed(() => Math.ceil(this.paginator().totalItems / this.paginator().itemsPerPage));\n hasPrevious = computed(() => this.paginator().currentPage > 1);\n hasNext = computed(() => this.paginator().currentPage < this.totalPages());\n\n // Start and end item numbers for display\n startItem = computed(() => {\n const page = this.paginator().currentPage;\n const perPage = this.paginator().itemsPerPage;\n return Math.min((page - 1) * perPage + 1, this.paginator().totalItems);\n });\n\n endItem = computed(() => {\n const page = this.paginator().currentPage;\n const perPage = this.paginator().itemsPerPage;\n return Math.min(page * perPage, this.paginator().totalItems);\n });\n\n constructor() {\n // Effect to log changes for debugging\n effect(() => {\n console.log('Paginator updated:', {\n currentPage: this.paginator().currentPage,\n itemsPerPage: this.paginator().itemsPerPage,\n totalItems: this.paginator().totalItems,\n totalPages: this.totalPages()\n });\n });\n }\n\n // Methods\n goToPrevious() {\n if (this.hasPrevious()) {\n const newPage = this.paginator().currentPage - 1;\n this.pageChange.emit(newPage);\n }\n }\n\n goToNext() {\n if (this.hasNext()) {\n const newPage = this.paginator().currentPage + 1;\n this.pageChange.emit(newPage);\n }\n }\n\n goToPage(page: number) {\n if (page >= 1 && page <= this.totalPages()) {\n this.pageChange.emit(page);\n }\n }\n\n changeItemsPerPage(itemsPerPage: number) {\n this.itemsPerPageChange.emit(itemsPerPage);\n }\n\n // Helper methods for template\n getPageNumbers(): number[] {\n const currentPage = this.paginator().currentPage;\n const totalPages = this.totalPages();\n const pages: number[] = [];\n\n // Show max 5 page numbers, centered around current page\n const start = Math.max(1, Math.min(currentPage - 2, totalPages - 4));\n const end = Math.min(totalPages, start + 4);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n return pages;\n }\n}\n","<div class=\"lite-paginator\">\n <!-- Previous Button -->\n <button\n class=\"paginator-btn previous-btn\"\n [disabled]=\"!hasPrevious()\"\n (click)=\"goToPrevious()\"\n [title]=\"'Previous page'\"\n type=\"button\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Page Numbers -->\n <div class=\"page-numbers\">\n @for (page of getPageNumbers(); track page) {\n <button\n class=\"page-number\"\n [class.active]=\"page === paginator().currentPage\"\n (click)=\"goToPage(page)\"\n type=\"button\">\n {{ page }}\n </button>\n }\n </div>\n\n <!-- Next Button -->\n <button\n class=\"paginator-btn next-btn\"\n [disabled]=\"!hasNext()\"\n (click)=\"goToNext()\"\n [title]=\"'Next page'\"\n type=\"button\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Items per page selector -->\n <div class=\"items-per-page\">\n <select\n [value]=\"paginator().itemsPerPage\"\n (change)=\"changeItemsPerPage(+$any($event.target).value)\"\n class=\"items-select\">\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n </select>\n <span class=\"items-label\">per page</span>\n </div>\n\n <!-- Total items info -->\n <div class=\"total-info\">\n <span class=\"total-text\">\n {{ startItem() }}-{{ endItem() }} of {{ paginator().totalItems }}\n </span>\n </div>\n</div>\n","import { Component, input, computed, output, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableFieldDto, TableColumn } from '../field-dto';\nimport { LitePaginator } from '../lite-paginator/lite-paginator';\n\n@Component({\n selector: 'lite-table',\n standalone: true,\n imports: [CommonModule, LitePaginator],\n templateUrl: './lite-table.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LiteTable<T = any> {\n table = input.required<TableFieldDto<T>>();\n pageChange = output<number>();\n itemsPerPageChange = output<number>();\n // Emits when a row menu action is selected\n menuAction = output<{ action: string; row: T }>();\n\n // Track which row's menu is open (by paginated row index)\n openMenuIndex: number | null = null;\n // Track if menu should open upward\n menuOpenUpward = false;\n\n // Computed properties for pagination\n paginatedData = computed(() => {\n const tableData = this.table();\n if (!tableData.showPaginator) {\n return tableData.data;\n }\n\n const paginator = tableData.paginatorConfig;\n const startIndex = (paginator.currentPage - 1) * paginator.itemsPerPage;\n const endIndex = startIndex + paginator.itemsPerPage;\n\n return tableData.data.slice(startIndex, endIndex);\n });\n\n // Helper method to get cell value\n getCellValue(row: any, column: TableColumn): string {\n if (column.cellTemplate) {\n return column.cellTemplate(this.getValue(row, column.key), row);\n }\n const value = this.getValue(row, column.key);\n\n // Special handling for name field from Random User API\n if (column.key === 'name' && value && typeof value === 'object') {\n const nameObj = value as any;\n return `${nameObj.first || ''} ${nameObj.last || ''}`.trim();\n }\n\n return value?.toString() || '';\n }\n\n // Helper method to extract value from row (supports nested properties)\n private getValue(row: any, key: string): any {\n if (!row || typeof row !== 'object') {\n return row;\n }\n\n // Support dot notation for nested properties\n const keys = key.split('.');\n let value = row;\n\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k];\n } else {\n return undefined;\n }\n }\n\n return value;\n }\n\n // Event handlers for paginator\n onPageChange(page: number) {\n this.pageChange.emit(page);\n }\n\n onItemsPerPageChange(itemsPerPage: number) {\n this.itemsPerPageChange.emit(itemsPerPage);\n }\n\n // Row menu handlers\n toggleMenu(rowIndex: number, event?: MouseEvent) {\n event?.stopPropagation();\n \n if (this.openMenuIndex === rowIndex) {\n this.openMenuIndex = null;\n this.menuOpenUpward = false;\n return;\n }\n \n this.openMenuIndex = rowIndex;\n \n // Check if button is near bottom of viewport\n if (event?.target) {\n const button = event.target as HTMLElement;\n const rect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const menuHeight = 150; // Approximate menu height\n \n // Open upward if not enough space below\n this.menuOpenUpward = spaceBelow < menuHeight && rect.top > menuHeight;\n }\n }\n\n onMenuItemClick(action: string, row: T, event?: MouseEvent) {\n event?.stopPropagation();\n this.menuAction.emit({ action, row });\n this.openMenuIndex = null;\n }\n\n // Close any open menu when clicking outside\n @HostListener('document:click')\n onDocumentClick() {\n this.openMenuIndex = null;\n }\n}\n","<div class=\"lite-table\">\n <!-- Table Header -->\n <div class=\"table-header\">\n <div class=\"header-row\">\n @for (column of table().columns; track column.key) {\n <div\n class=\"header-cell\"\n [style.flex]=\"column.flex || '1'\"\n [class.sortable]=\"column.sortable\">\n {{ column.label }}\n </div>\n }\n </div>\n </div>\n\n <!-- Table Body -->\n <div class=\"table-body\">\n @for (row of paginatedData(); track $index; let rowIndex = $index) {\n <div class=\"data-row\">\n @for (column of table().columns; track column.key) {\n <div class=\"data-cell\" [style.flex]=\"column.flex || '1'\">\n @if (column.type === 'menu') {\n @if ((column.menuItems || []).length === 1) {\n <button\n class=\"single-action-button\"\n [class.danger]=\"column.menuItems![0].variant === 'danger'\"\n (click)=\"onMenuItemClick(column.menuItems![0].value, row, $event)\">\n {{ column.menuItems![0].label }}\n </button>\n } @else {\n <div class=\"row-menu\">\n <button\n class=\"menu-button\"\n aria-label=\"Row actions\"\n [attr.aria-expanded]=\"openMenuIndex === rowIndex\"\n (click)=\"toggleMenu(rowIndex, $event)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"4\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"10\" cy=\"16\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </button>\n @if (openMenuIndex === rowIndex) {\n <div class=\"menu-dropdown\" [class.menu-dropdown--upward]=\"menuOpenUpward\" (click)=\"$event.stopPropagation()\">\n @for (mi of column.menuItems || []; track mi.value) {\n <button\n class=\"menu-item\"\n [class.danger]=\"mi.variant === 'danger'\"\n (click)=\"onMenuItemClick(mi.value, row, $event)\">{{ mi.label }}</button>\n }\n </div>\n }\n </div>\n }\n } @else {\n <span [innerHTML]=\"getCellValue(row, column)\"></span>\n }\n </div>\n }\n </div>\n }\n @if (paginatedData().length === 0) {\n <div class=\"empty-row\">\n <div\n class=\"empty-cell\"\n [style.flex]=\"'1'\">\n No data available\n </div>\n </div>\n }\n </div>\n\n <!-- Paginator -->\n @if (table().showPaginator) {\n <div class=\"table-paginator\">\n <lite-paginator\n [paginator]=\"table().paginatorConfig\"\n (pageChange)=\"onPageChange($event)\"\n (itemsPerPageChange)=\"onItemsPerPageChange($event)\">\n </lite-paginator>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, TemplateRef, Type, ViewContainerRef, ViewChild, ComponentRef, AfterViewInit, OnDestroy, computed, input, output } from '@angular/core';\n\nexport interface LitePanelAction {\n label: string;\n value?: unknown;\n /**\n * Adds a CSS modifier class `lite-panel__action--${variant}` to let consumers style the action button.\n */\n variant?: 'primary' | 'secondary' | 'danger';\n}\n\nlet panelIdCounter = 0;\n\n@Component({\n standalone: true,\n selector: 'lite-panel',\n imports: [CommonModule],\n templateUrl: './lite-panel.html',\n styleUrls: ['../lite-styles.scss', './lite-panel.scss']\n})\nexport class LitePanel implements AfterViewInit, OnDestroy {\n title = input<string | null>(null);\n content = input<string | TemplateRef<unknown> | Type<any> | null>(null);\n contentInputs = input<Record<string, any> | null>(null);\n actions = input<LitePanelAction[] | null>(null);\n closeOnOverlayClick = input<boolean>(true);\n width = input<string | number | null>(null);\n height = input<string | number | null>(null);\n maxWidth = input<string | number | null>(null);\n maxHeight = input<string | number | null>(null);\n\n closed = output<unknown | null>();\n\n @ViewChild('dynamicComponentContainer', { read: ViewContainerRef }) dynamicComponentContainer?: ViewContainerRef;\n\n readonly panelTitleId = `lite-panel-title-${++panelIdCounter}`;\n private componentRef?: ComponentRef<any>;\n\n private readonly defaultActions = [{ label: 'OK', value: null, variant: 'primary' }] satisfies LitePanelAction[];\n\n readonly resolvedActions = computed(() => {\n const provided = this.actions();\n return provided && provided.length ? provided : this.defaultActions;\n });\n\n readonly contentTemplate = computed(() => {\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n readonly contentText = computed(() => {\n const value = this.content();\n return typeof value === 'string' ? value : null;\n });\n\n readonly contentComponent = computed(() => {\n const value = this.content();\n // Check if it's a component type (function/class but not TemplateRef)\n return value && typeof value === 'function' && !(value instanceof TemplateRef) ? value : null;\n });\n\n readonly templateContext: { panel: LitePanel; close: (value?: unknown) => void } = {\n panel: this,\n close: (value?: unknown) => this.close(value ?? null)\n };\n\n readonly panelStyles = computed(() => {\n const styles: Record<string, string> = {};\n const candidates: Array<[string, string | number | null | undefined]> = [\n ['width', this.width()],\n ['height', this.height()],\n ['max-width', this.maxWidth()],\n ['max-height', this.maxHeight()]\n ];\n\n for (const [prop, value] of candidates) {\n if (!this.isNilOrEmpty(value)) {\n styles[prop] = this.toCssLength(value as string | number);\n }\n }\n\n return styles;\n });\n\n close(value: unknown | null = null): void {\n this.closed.emit(value ?? null);\n }\n\n onBackdropClick(): void {\n if (this.closeOnOverlayClick()) {\n this.close(null);\n }\n }\n\n onAction(action: LitePanelAction): void {\n let emitted = Object.prototype.hasOwnProperty.call(action, 'value') ? action.value : null;\n \n // If there's a dynamic component with a getData method, include its data\n if (this.componentRef?.instance && typeof this.componentRef.instance.getData === 'function') {\n const componentData = this.componentRef.instance.getData();\n emitted = { action: emitted, data: componentData };\n }\n \n this.close(emitted as unknown | null);\n }\n\n getActionClasses(action: LitePanelAction): Record<string, boolean> {\n return {\n 'lite-panel__action': true,\n [`lite-panel__action--${action.variant}`]: !!action.variant\n };\n }\n\n private toCssLength(value: string | number): string {\n if (typeof value === 'number') {\n return `${value}px`;\n }\n\n return value.trim();\n }\n\n private isNilOrEmpty(value: string | number | null | undefined): value is null | undefined | '' {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' && value.trim() === '') {\n return true;\n }\n\n return false;\n }\n\n ngAfterViewInit(): void {\n this.loadDynamicComponent();\n }\n\n ngOnDestroy(): void {\n this.componentRef?.destroy();\n }\n\n private loadDynamicComponent(): void {\n const component = this.contentComponent();\n if (component && this.dynamicComponentContainer) {\n this.dynamicComponentContainer.clear();\n this.componentRef = this.dynamicComponentContainer.createComponent(component);\n \n // Apply inputs if provided\n const inputs = this.contentInputs();\n if (inputs) {\n Object.entries(inputs).forEach(([key, value]) => {\n if (this.componentRef) {\n // Use setInput to properly handle both input signals and @Input decorators\n this.componentRef.setInput(key, value);\n }\n });\n }\n \n this.componentRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","<div class=\"lite-panel__backdrop\" (click)=\"onBackdropClick()\"></div>\n\n<div\n class=\"lite-panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [ngStyle]=\"panelStyles()\"\n [attr.aria-labelledby]=\"title() ? panelTitleId : null\">\n @if (title()) {\n <header class=\"lite-panel__header\">\n <h2 class=\"lite-panel__title\" [id]=\"panelTitleId\">{{ title() }}</h2>\n <button type=\"button\" class=\"lite-panel__close\" (click)=\"close(null)\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </header>\n }\n\n <section class=\"lite-panel__content\">\n @if (contentComponent()) {\n <ng-container #dynamicComponentContainer></ng-container>\n } @else if (contentTemplate()) {\n <ng-container *ngTemplateOutlet=\"contentTemplate(); context: templateContext\"></ng-container>\n } @else if (contentText()) {\n <p class=\"lite-panel__content-text\">{{ contentText() }}</p>\n } @else {\n <ng-content></ng-content>\n }\n </section>\n\n <footer class=\"lite-panel__actions\">\n @for (action of resolvedActions(); track action) {\n <button\n type=\"button\"\n [ngClass]=\"getActionClasses(action)\"\n (click)=\"onAction(action)\"\n >\n {{ action.label }}\n </button>\n }\n </footer>\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type LoadingView = 'spinner' | 'progress';\n\n@Component({\n selector: 'lite-loading',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './lite-loading.html',\n styleUrls: ['../lite-styles.scss', './lite-loading.scss']\n})\nexport class LiteLoading {\n /**\n * The view type: 'spinner' for loading wheel, 'progress' for progress bar\n */\n view = input<LoadingView>('spinner');\n\n /**\n * Progress percentage (0-100). If undefined, shows indeterminate progress.\n * Only applies when view is 'progress'.\n */\n progress = input<number | undefined>(undefined);\n\n /**\n * Optional message to display below the loading indicator\n */\n message = input<string | undefined>(undefined);\n\n /**\n * Size of the spinner (only applies to spinner view)\n */\n size = input<'small' | 'medium' | 'large'>('medium');\n\n /**\n * Whether the loading indicator is visible\n */\n visible = input<boolean>(true);\n\n /**\n * Computed property to determine if progress is defined\n */\n isProgressDefined = computed(() => {\n const progressValue = this.progress();\n return progressValue !== undefined && progressValue !== null;\n });\n\n /**\n * Computed property to get clamped progress value (0-100)\n */\n progressValue = computed(() => {\n const progressValue = this.progress();\n if (progressValue === undefined || progressValue === null) {\n return 0;\n }\n return Math.max(0, Math.min(100, progressValue));\n });\n\n /**\n * Computed property for spinner size class\n */\n spinnerSizeClass = computed(() => {\n return `lite-loading__spinner--${this.size()}`;\n });\n}\n","@if (visible()) {\n <div class=\"lite-loading\">\n @if (view() === 'spinner') {\n <div class=\"lite-loading__spinner-container\">\n <div class=\"lite-loading__spinner\" [ngClass]=\"spinnerSizeClass()\">\n <div class=\"lite-loading__spinner-circle\"></div>\n </div>\n </div>\n } @else if (view() === 'progress') {\n <div class=\"lite-loading__progress-container\">\n @if (isProgressDefined()) {\n <!-- Defined progress bar -->\n <div class=\"lite-loading__progress-bar\">\n <div \n class=\"lite-loading__progress-fill\" \n [style.width.%]=\"progressValue()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"progressValue()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\">\n </div>\n </div>\n <div class=\"lite-loading__progress-text\">{{ progressValue() }}%</div>\n } @else {\n <!-- Indeterminate progress bar -->\n <div class=\"lite-loading__progress-bar lite-loading__progress-bar--indeterminate\">\n <div class=\"lite-loading__progress-fill-indeterminate\"></div>\n </div>\n }\n </div>\n }\n \n @if (message()) {\n <div class=\"lite-loading__message\">{{ message() }}</div>\n }\n </div>\n}\n","/*\n * Public API Surface of lite-form\n */\n\nexport * from './lib/field-dto';\nexport * from './lib/form-utils';\nexport * from './lib/lite-input/lite-input';\nexport * from './lib/lite-textarea/lite-textarea';\nexport * from './lib/lite-select/lite-select';\nexport * from './lib/lite-multi-select/lite-multi-select';\nexport * from './lib/lite-radio/lite-radio';\nexport * from './lib/lite-checkbox/lite-checkbox';\nexport * from './lib/lite-date/lite-date';\nexport * from './lib/lite-datetime/lite-datetime';\nexport * from './lib/lite-password/lite-password';\nexport * from './lib/lite-file/lite-file';\nexport * from './lib/lite-snackbar/lite-snackbar.service';\nexport * from './lib/lite-paginator/lite-paginator';\nexport * from './lib/lite-table/lite-table';\nexport * from './lib/lite-panel/lite-panel';\nexport * from './lib/lite-loading/lite-loading';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-lite-form.mjs","sources":["../../../projects/lite-form/src/lib/field-dto.ts","../../../projects/lite-form/src/lib/form-utils.ts","../../../projects/lite-form/src/lib/lite-input/lite-input.ts","../../../projects/lite-form/src/lib/lite-input/lite-input.html","../../../projects/lite-form/src/lib/lite-textarea/lite-textarea.ts","../../../projects/lite-form/src/lib/lite-textarea/lite-textarea.html","../../../projects/lite-form/src/lib/lite-select/lite-select.ts","../../../projects/lite-form/src/lib/lite-select/lite-select.html","../../../projects/lite-form/src/lib/lite-multi-select/lite-multi-select.ts","../../../projects/lite-form/src/lib/lite-multi-select/lite-multi-select.html","../../../projects/lite-form/src/lib/lite-radio/lite-radio.ts","../../../projects/lite-form/src/lib/lite-radio/lite-radio.html","../../../projects/lite-form/src/lib/lite-checkbox/lite-checkbox.ts","../../../projects/lite-form/src/lib/lite-checkbox/lite-checkbox.html","../../../projects/lite-form/src/lib/lite-date/lite-date.ts","../../../projects/lite-form/src/lib/lite-date/lite-date.html","../../../projects/lite-form/src/lib/lite-datetime/lite-datetime.ts","../../../projects/lite-form/src/lib/lite-datetime/lite-datetime.html","../../../projects/lite-form/src/lib/lite-password/lite-password.ts","../../../projects/lite-form/src/lib/lite-password/lite-password.html","../../../projects/lite-form/src/lib/lite-file/lite-file.ts","../../../projects/lite-form/src/lib/lite-file/lite-file.html","../../../projects/lite-form/src/lib/lite-snackbar/lite-snackbar.service.ts","../../../projects/lite-form/src/lib/lite-paginator/lite-paginator.ts","../../../projects/lite-form/src/lib/lite-paginator/lite-paginator.html","../../../projects/lite-form/src/lib/lite-table/lite-table.ts","../../../projects/lite-form/src/lib/lite-table/lite-table.html","../../../projects/lite-form/src/lib/lite-panel/lite-panel.ts","../../../projects/lite-form/src/lib/lite-panel/lite-panel.html","../../../projects/lite-form/src/lib/lite-loading/lite-loading.ts","../../../projects/lite-form/src/lib/lite-loading/lite-loading.html","../../../projects/lite-form/src/public-api.ts","../../../projects/lite-form/src/ngx-lite-form.ts"],"sourcesContent":["import { FormControl } from \"@angular/forms\";\n\nexport class FieldDto {\n label: string;\n formControl: FormControl;\n rows?: number;\n type?: 'text' | 'number';\n\n constructor(label: string, formControl: FormControl, rows: number = 2, type: 'text' | 'number' = 'text') {\n this.label = label;\n this.formControl = formControl;\n this.rows = rows;\n this.type = type;\n }\n}\n\nexport abstract class BaseSelectFieldDto<T = any> {\n label: string;\n options: T[];\n displayWith: (_option: T) => string;\n \n constructor(\n label: string,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n this.label = label;\n this.options = options;\n this.displayWith = displayWith;\n }\n}\n\nexport class SelectFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T>;\n \n constructor(\n label: string,\n formControl: FormControl<T>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class MultiSelectFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T[]>;\n \n constructor(\n label: string,\n formControl: FormControl<T[]>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class RadioFieldDto<T = any> extends BaseSelectFieldDto<T> {\n formControl: FormControl<T>;\n \n constructor(\n label: string,\n formControl: FormControl<T>,\n options: T[],\n displayWith: (_option: T) => string\n ) {\n super(label, options, displayWith);\n this.formControl = formControl;\n }\n}\n\nexport class FileFieldDto {\n label: string;\n formControl: FormControl;\n multiple?: boolean;\n accept?: string;\n maxFileSize?: number;\n maxFiles?: number;\n showPreview?: boolean;\n\n constructor(\n label: string,\n formControl: FormControl,\n multiple: boolean = true,\n accept: string = '*/*',\n maxFileSize: number = 10 * 1024 * 1024, // 10MB\n maxFiles: number = 10,\n showPreview: boolean = true\n ) {\n this.label = label;\n this.formControl = formControl;\n this.multiple = multiple;\n this.accept = accept;\n this.maxFileSize = maxFileSize;\n this.maxFiles = maxFiles;\n this.showPreview = showPreview;\n }\n}\n\nexport type SnackbarType = 'done' | 'warn' | 'error';\n\nexport class PaginatorFieldDto {\n currentPage: number;\n totalItems: number;\n itemsPerPage: number;\n\n constructor(\n currentPage: number = 1,\n totalItems: number = 0,\n itemsPerPage: number = 10\n ) {\n this.currentPage = currentPage;\n this.totalItems = totalItems;\n this.itemsPerPage = itemsPerPage;\n }\n}\n\nexport interface TableColumn {\n key: string;\n label: string;\n flex?: string;\n sortable?: boolean;\n cellTemplate?: (value: any, row: any) => string;\n // Optional type for special rendering. Defaults to 'text'.\n type?: 'text' | 'menu';\n // When type is 'menu', provide menu items shown in the row actions dropdown.\n menuItems?: Array<{ label: string; value: string; variant?: 'danger' | 'default' }>;\n}\n\nexport class TableFieldDto<T = any> {\n columns: TableColumn[];\n data: T[];\n showPaginator?: boolean;\n paginatorConfig: PaginatorFieldDto;\n\n constructor(\n columns: TableColumn[],\n data: T[],\n showPaginator: boolean = false,\n paginatorConfig: PaginatorFieldDto = new PaginatorFieldDto()\n ) {\n this.columns = columns;\n this.data = data;\n this.showPaginator = showPaginator;\n this.paginatorConfig = paginatorConfig;\n }\n}\n","import { AbstractControl } from '@angular/forms';\n\n/**\n * Utility class for form-related helper functions\n */\nexport class FormUtils {\n /**\n * Check if a FormControl has the required validator\n * @param control - The AbstractControl to check\n * @returns true if the control has a required validator, false otherwise\n */\n static isRequired(control: AbstractControl): boolean {\n if (control.validator) {\n const validator = control.validator({} as any);\n return validator && validator['required'];\n }\n return false;\n }\n\n /**\n * Check if a FormControl has any validation errors\n * @param control - The AbstractControl to check\n * @returns true if the control has errors, false otherwise\n */\n static hasErrors(control: AbstractControl): boolean {\n return control.invalid && (control.dirty || control.touched);\n }\n\n /**\n * Get all error keys for a FormControl\n * @param control - The AbstractControl to check\n * @returns array of error keys or empty array if no errors\n */\n static getErrors(control: AbstractControl): string[] {\n if (control.errors) {\n return Object.keys(control.errors);\n }\n return [];\n }\n\n /**\n * Get user-friendly error messages for a FormControl\n * @param control - The AbstractControl to check\n * @param fieldLabel - The label of the field for error messages\n * @returns array of user-friendly error messages\n */\n static getErrorMessages(control: AbstractControl, fieldLabel: string): string[] {\n const errorMessages: string[] = [];\n \n if (control.errors) {\n if (control.errors['required']) {\n errorMessages.push(`${fieldLabel} is required`);\n }\n if (control.errors['email']) {\n errorMessages.push(`${fieldLabel} must be a valid email`);\n }\n if (control.errors['minlength']) {\n errorMessages.push(`${fieldLabel} must be at least ${control.errors['minlength'].requiredLength} characters`);\n }\n if (control.errors['maxlength']) {\n errorMessages.push(`${fieldLabel} must be no more than ${control.errors['maxlength'].requiredLength} characters`);\n }\n \n // Handle any other validation errors\n const allErrors = FormUtils.getErrors(control);\n const handledErrors = ['required', 'email', 'minlength', 'maxlength'];\n const unhandledErrors = allErrors.filter(error => !handledErrors.includes(error));\n \n unhandledErrors.forEach(error => {\n errorMessages.push(`${fieldLabel} is invalid: ${error}`);\n });\n }\n \n return errorMessages;\n }\n\n /**\n * Get the first error message for a FormControl\n * @param control - The AbstractControl to check\n * @returns the first error key or null if no errors\n */\n static getFirstError(control: AbstractControl): string | null {\n if (control.errors) {\n return Object.keys(control.errors)[0];\n }\n return null;\n }\n\n /**\n * Get detailed password error messages for a FormControl\n * @param control - The AbstractControl to check\n * @param fieldLabel - The label of the field for error messages\n * @returns array of detailed password error messages\n */\n static getPasswordErrorMessages(control: AbstractControl, fieldLabel: string): string[] {\n const errorMessages: string[] = [];\n \n if (control.errors) {\n // Required validation\n if (control.errors['required']) {\n errorMessages.push(`${fieldLabel} is required`);\n }\n \n // Length validations\n if (control.errors['minlength']) {\n const requiredLength = control.errors['minlength'].requiredLength;\n const actualLength = control.errors['minlength'].actualLength;\n errorMessages.push(`${fieldLabel} must be at least ${requiredLength} characters (currently ${actualLength})`);\n }\n \n if (control.errors['maxlength']) {\n const requiredLength = control.errors['maxlength'].requiredLength;\n const actualLength = control.errors['maxlength'].actualLength;\n errorMessages.push(`${fieldLabel} must be no more than ${requiredLength} characters (currently ${actualLength})`);\n }\n \n // Pattern validation with detailed feedback\n if (control.errors['pattern']) {\n const value = control.value || '';\n const patternRequiredValue = control.errors['pattern'].requiredPattern;\n \n // Analyze the actual pattern to provide specific feedback\n const missingRequirements: string[] = [];\n \n // Check what the actual pattern requires by analyzing the regex\n if (patternRequiredValue) {\n // Check if the pattern requires lowercase letters\n if (patternRequiredValue.includes('(?=.*[a-z])') && !/[a-z]/.test(value)) {\n missingRequirements.push('at least one lowercase letter (a-z)');\n }\n \n // Check if the pattern requires uppercase letters\n if (patternRequiredValue.includes('(?=.*[A-Z])') && !/[A-Z]/.test(value)) {\n missingRequirements.push('at least one uppercase letter (A-Z)');\n }\n \n // Check if the pattern requires digits\n if ((patternRequiredValue.includes('(?=.*\\\\d)') || patternRequiredValue.includes('(?=.*[0-9])')) && !/\\d/.test(value)) {\n missingRequirements.push('at least one number (0-9)');\n }\n \n // Check if the pattern requires special characters\n if (patternRequiredValue.includes('(?=.*[@$!%*?&]') && !/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(value)) {\n missingRequirements.push('at least one special character (!@#$%^&*()_+-=[]{}|;\\':\",./<>?)');\n }\n \n // Check for minimum length in pattern (e.g., {8,} or {8,50})\n const lengthMatch = patternRequiredValue.match(/\\{(\\d+),?\\d*\\}/);\n if (lengthMatch) {\n const minLength = parseInt(lengthMatch[1]);\n if (value.length < minLength) {\n missingRequirements.push(`at least ${minLength} characters`);\n }\n }\n \n // Check if spaces are not allowed\n if (patternRequiredValue.includes('[A-Za-z\\\\d') && !patternRequiredValue.includes('\\\\s') && /\\s/.test(value)) {\n missingRequirements.push('no spaces allowed');\n }\n }\n \n // Fallback to generic checks if pattern analysis didn't find specific requirements\n if (missingRequirements.length === 0) {\n // Check for common password requirements as fallback\n if (!/[a-z]/.test(value)) {\n missingRequirements.push('at least one lowercase letter (a-z)');\n }\n \n if (!/[A-Z]/.test(value)) {\n missingRequirements.push('at least one uppercase letter (A-Z)');\n }\n \n if (!/\\d/.test(value)) {\n missingRequirements.push('at least one number (0-9)');\n }\n \n if (!/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(value)) {\n missingRequirements.push('at least one special character (!@#$%^&*()_+-=[]{}|;\\':\",./<>?)');\n }\n }\n \n if (missingRequirements.length > 0) {\n errorMessages.push(`${fieldLabel} must contain ${missingRequirements.join(', ')}`);\n } else {\n // Show the actual pattern if we can't determine specific requirements\n errorMessages.push(`${fieldLabel} does not match required pattern: ${patternRequiredValue}`);\n }\n }\n \n // Custom password complexity validator\n if (control.errors['passwordComplexity']) {\n const complexity = control.errors['passwordComplexity'];\n const missing: string[] = [];\n \n if (!complexity.hasUpperCase) missing.push('uppercase letter');\n if (!complexity.hasLowerCase) missing.push('lowercase letter');\n if (!complexity.hasNumeric) missing.push('number');\n if (!complexity.hasSpecial) missing.push('special character');\n if (!complexity.minLength) missing.push('minimum length requirement');\n \n if (missing.length > 0) {\n errorMessages.push(`${fieldLabel} is missing: ${missing.join(', ')}`);\n }\n }\n \n // Password mismatch (for confirm password fields)\n if (control.errors['passwordMismatch']) {\n errorMessages.push(`${fieldLabel} does not match the password`);\n }\n \n // Common password validator\n if (control.errors['commonPassword']) {\n errorMessages.push(`${fieldLabel} is too common. Please choose a more secure password`);\n }\n \n // Password history validator\n if (control.errors['passwordHistory']) {\n errorMessages.push(`${fieldLabel} has been used recently. Please choose a different password`);\n }\n \n // Handle any other validation errors not specifically handled\n const allErrors = FormUtils.getErrors(control);\n const handledErrors = [\n 'required', 'minlength', 'maxlength', 'pattern', \n 'passwordComplexity', 'passwordMismatch', 'commonPassword', 'passwordHistory'\n ];\n const unhandledErrors = allErrors.filter(error => !handledErrors.includes(error));\n \n unhandledErrors.forEach(error => {\n errorMessages.push(`${fieldLabel} validation error: ${error}`);\n });\n }\n \n return errorMessages;\n }\n\n /**\n * Analyze password strength and return feedback\n * @param password - The password string to analyze\n * @returns object with strength score and detailed feedback\n */\n static analyzePasswordStrength(password: string): {\n score: number;\n level: 'Very Weak' | 'Weak' | 'Fair' | 'Good' | 'Strong';\n feedback: string[];\n } {\n const feedback: string[] = [];\n let score = 0;\n \n if (!password) {\n return { score: 0, level: 'Very Weak', feedback: ['Password is required'] };\n }\n \n // Length scoring\n if (password.length >= 8) score += 1;\n else feedback.push('Use at least 8 characters');\n \n if (password.length >= 12) score += 1;\n else if (password.length >= 8) feedback.push('Consider using 12+ characters for better security');\n \n // Character variety scoring\n if (/[a-z]/.test(password)) score += 1;\n else feedback.push('Add lowercase letters');\n \n if (/[A-Z]/.test(password)) score += 1;\n else feedback.push('Add uppercase letters');\n \n if (/\\d/.test(password)) score += 1;\n else feedback.push('Add numbers');\n \n if (/[@$!%*?&^()_+\\-=[]{}|;':\"\\\\|,.<>?`#~]/.test(password)) score += 1;\n else feedback.push('Add special characters');\n \n // Additional checks\n if (!/(.)\\1{2,}/.test(password)) score += 1;\n else feedback.push('Avoid repeating characters');\n \n if (!/^(.{1,2})\\1+$/.test(password)) score += 1;\n else feedback.push('Avoid repetitive patterns');\n \n // Determine strength level\n let level: 'Very Weak' | 'Weak' | 'Fair' | 'Good' | 'Strong';\n if (score <= 2) level = 'Very Weak';\n else if (score <= 4) level = 'Weak';\n else if (score <= 5) level = 'Fair';\n else if (score <= 6) level = 'Good';\n else level = 'Strong';\n \n return { score, level, feedback };\n }\n}\n","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-input',\n templateUrl: `./lite-input.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteInput {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n \n readonly FormUtils = FormUtils;\n\n constructor() {\n effect(() => {\n // console.log('LiteInput initialized with control:', this.control());\n\n });\n }\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n}\n","<div class=\"lite-input\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <input type=\"text\" [formControl]=\"control().formControl\" placeholder=\"\" [ngClass]=\"{'invalid': hasErrors()}\" />\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().formControl.value }}</div>\n }\n</div>","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-textarea',\n \n templateUrl: `./lite-textarea.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteTextarea {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n \n // Make FormUtils available to the template\n readonly FormUtils = FormUtils;\n \n constructor() {\n effect(() => {\n // Initialization logic can go here if needed\n });\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n}\n","<div class=\"lite-textarea\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <textarea [formControl]=\"control().formControl\" placeholder=\"\" rows=\"{{ control().rows }}\" [ngClass]=\"{'invalid': hasErrors()}\"></textarea>\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().formControl.value }}</div>\n }\n</div>","import { Component, effect, input, ElementRef, HostListener } from '@angular/core';\nimport { SelectFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-select',\n \n templateUrl: `./lite-select.html`,\n styleUrls: [`../lite-styles.scss`],\n animations: [\n trigger('toggleView', [\n state('collapse', style({ height: 0, borderStyle: 'none' })),\n state('expand', style({ height: '*', borderStyle: 'solid' })),\n transition('collapse <=> expand', animate('300ms ease-in-out'))\n ])\n ]\n})\nexport class LiteSelect {\n inEdit = input<boolean>(true);\n control = input<SelectFieldDto>({ label: '', formControl: new FormControl(null), options: [], displayWith: (option) => option });\n showOptions = 'collapse';\n \n // Separate input text from FormControl value\n inputText = '';\n \n readonly FormUtils = FormUtils;\n \n constructor(private _elementRef: ElementRef) {\n effect(() => {\n // Sync inputText with FormControl value when it changes\n const value = this.control().formControl.value;\n if (value && typeof value === 'object') {\n this.inputText = this.control().displayWith(value);\n } else if (!value) {\n this.inputText = '';\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showOptions === 'expand') {\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.showOptions = 'collapse';\n }\n }\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n optionSelected(option: any): void {\n this.control().formControl.setValue(option);\n this.inputText = this.control().displayWith(option);\n this.showOptions = 'collapse';\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.inputText = target.value;\n // Note: FormControl value is only updated when a valid option is selected\n }\n\n onInputBlur(): void {\n this.showOptions = 'collapse';\n // If the typed text matches an option exactly, select it\n const matchingOption = this.control().options.find(option => \n this.control().displayWith(option).toLowerCase() === this.inputText.toLowerCase()\n );\n \n if (matchingOption) {\n this.control().formControl.setValue(matchingOption);\n this.inputText = this.control().displayWith(matchingOption);\n } else {\n // If no match and FormControl has a value, reset inputText to show the current selection\n const currentValue = this.control().formControl.value;\n if (currentValue && typeof currentValue === 'object') {\n this.inputText = this.control().displayWith(currentValue);\n }\n // If no current selection and no match, leave inputText as typed for user feedback\n }\n }\n\n getDisplayValue(): string {\n return this.inputText;\n }\n\n hasTypedValue(): boolean {\n // Check if user has typed something that doesn't match any option\n if (!this.inputText.trim()) return false;\n \n // Check if the current inputText matches any valid option's display value\n const matchesValidOption = this.control().options.some(option => \n this.control().displayWith(option).toLowerCase() === this.inputText.toLowerCase()\n );\n \n return !matchesValidOption;\n }\n\n getFilteredOptions(): any[] {\n if (!this.inputText.trim()) {\n return this.control().options;\n }\n \n return this.control().options.filter(option =>\n this.control().displayWith(option).toLowerCase().includes(this.inputText.toLowerCase())\n );\n }\n\n shouldShowPlaceholder(): boolean {\n // Only show placeholder when label is floating (not overlapping)\n return this.showOptions === 'expand' || !!this.getDisplayValue() || this.hasTypedValue();\n }\n}\n","<div class=\"lite-select\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <input type=\"text\" [value]=\"getDisplayValue()\" (input)=\"onInputChange($event)\" [ngClass]=\"{'selected': control().formControl.value, 'invalid': hasErrors()}\"\n (focus)=\"showOptions = 'expand'\" (blur)=\"onInputBlur()\" \n [placeholder]=\"shouldShowPlaceholder() ? 'Type to search...' : ''\" />\n <div class=\"options\" [@toggleView]=\"showOptions\">\n @for (option of getFilteredOptions(); track option) {\n <div class=\"option\" (click)=\"optionSelected(option)\">{{ control().displayWith(option) }}</div>\n }\n </div>\n <div class=\"label\" [ngClass]=\"{float: showOptions=='expand' || getDisplayValue() || hasTypedValue()}\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"arrow_box\" (click)=\"showOptions = showOptions === 'expand' ? 'collapse' : 'expand'\"><div class=\"arrow\"></div></div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ control().displayWith(control().formControl.value) }}</div>\n }\n</div>","import { Component, effect, input, ElementRef, HostListener, ViewChild, AfterViewInit } from '@angular/core';\nimport { MultiSelectFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-multi-select',\n \n templateUrl: `./lite-multi-select.html`,\n styleUrls: [`../lite-styles.scss`],\n animations: [\n trigger('toggleView', [\n state('collapse', style({ height: 0, opacity: 0 })),\n state('expand', style({ height: '*', opacity: 1 })),\n transition('collapse <=> expand', animate('300ms ease-in-out'))\n ])\n ]\n})\nexport class LiteMultiSelect implements AfterViewInit {\n inEdit = input<boolean>(true);\n control = input<MultiSelectFieldDto>({ \n label: '', \n formControl: new FormControl<any[]>([], { nonNullable: true }), \n options: [], \n displayWith: (option) => option \n });\n showOptions = 'collapse';\n \n // Separate input text for filtering from FormControl values\n inputText = '';\n isFocused = false;\n \n // Separate text for filtering options (different from display text)\n private filterText = '';\n \n // Container height variable\n containerHeight = '36px';\n \n @ViewChild('selectedItemsRef', { static: false }) selectedItemsRef?: ElementRef;\n \n readonly FormUtils = FormUtils;\n \n constructor(private _elementRef: ElementRef) {\n effect(() => {\n // Effect to react to FormControl value changes\n // Selected items are now displayed inline, so no need to update inputText\n const _values = this.control().formControl.value || [];\n // Component will re-render automatically when values change\n });\n \n // Subscribe to value changes to update container height\n effect(() => {\n const formControl = this.control().formControl;\n if (formControl) {\n formControl.valueChanges.subscribe(() => {\n this.updateContainerHeight();\n });\n }\n });\n }\n\n ngAfterViewInit(): void {\n // ViewChild will be available after view init\n // Set initial container height\n this.updateContainerHeight();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.showOptions === 'expand') {\n const target = event.target as HTMLElement;\n if (!this._elementRef.nativeElement.contains(target)) {\n this.showOptions = 'collapse';\n this.filterText = ''; // Clear filter when closing\n // No need to update display text since selected items are shown inline\n }\n }\n }\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n optionToggled(option: any): void {\n // Set flag to prevent dropdown from closing\n const currentValues = this.control().formControl.value || [];\n const isSelected = this.isOptionSelected(option);\n let newValues: any[];\n if (isSelected) {\n // Remove option\n newValues = currentValues.filter(value => \n JSON.stringify(value) !== JSON.stringify(option)\n );\n } else {\n // Add option\n newValues = [...currentValues, option];\n }\n this.control().formControl.setValue(newValues);\n // Height will be updated by valueChanges subscription\n }\n\n isOptionSelected(option: any): boolean {\n const currentValues = this.control().formControl.value || [];\n return currentValues.some(value => \n JSON.stringify(value) === JSON.stringify(option)\n );\n }\n\n onInputChange(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.inputText = target.value;\n this.filterText = target.value;\n // Input is used for filtering only - display is handled by selected items\n }\n\n onInputFocus(): void {\n this.showOptions = 'expand';\n this.isFocused = true;\n this.inputText = '';\n this.filterText = '';\n }\n\n onInputBlur(): void {\n this.isFocused = false;\n }\n\n getDisplayValue(): string {\n // Always return filter text for the input - selected items are shown separately\n return this.filterText;\n }\n\n updateDisplayText(): void {\n // No longer needed to update inputText since selected items are shown inline\n // This method can be kept for compatibility but doesn't need to do anything\n }\n\n hasTypedValue(): boolean {\n // Check if user is typing (for filtering)\n if (!this.filterText.trim()) return false;\n const values = this.control().formControl.value || [];\n if (values.length === 0) return true;\n if (values.length === 1) {\n return this.filterText !== this.control().displayWith(values[0]);\n }\n return this.filterText !== `${values.length} items selected`;\n }\n\n getFilteredOptions(): any[] {\n if (!this.filterText.trim()) {\n return this.control().options;\n }\n return this.control().options.filter(option =>\n this.control().displayWith(option).toLowerCase().includes(this.filterText.toLowerCase())\n );\n }\n\n getSelectedCount(): number {\n const values = this.control().formControl.value || [];\n return values.length;\n }\n\n hasSelection(): boolean {\n return this.getSelectedCount() > 0;\n }\n\n getSelectedItems(): any[] {\n return this.control().formControl.value || [];\n }\n\n removeSelectedItem(item: any): void {\n const currentValues = this.control().formControl.value || [];\n const newValues = currentValues.filter(value => \n JSON.stringify(value) !== JSON.stringify(item)\n );\n this.control().formControl.setValue(newValues);\n // Height will be updated by valueChanges subscription\n }\n\n private updateContainerHeight(): void {\n // Schedule height calculation for next tick to ensure DOM is updated\n setTimeout(() => {\n if (this.selectedItemsRef?.nativeElement) {\n const naturalHeight = this.selectedItemsRef.nativeElement.getBoundingClientRect().height;\n const baseHeight = 36;\n const padding = 4;\n this.containerHeight = `${Math.max(baseHeight, naturalHeight + padding)}px`;\n console.log('Updated container height', this.containerHeight, naturalHeight);\n } else if (!this.hasSelection()) {\n this.containerHeight = '36px';\n }\n }, 0);\n }\n shouldFloat() {\n return this.showOptions === 'expand' || this.hasSelection() || this.hasTypedValue();\n }\n\n shouldShowPlaceholder(): boolean {\n // Show placeholder when filtering or when no items are selected\n return (this.isFiltering() || !this.hasSelection()) && this.shouldFloat();\n }\n\n isFiltering(): boolean {\n return !!this.filterText.trim();\n }\n}\n","<div class=\"lite-multi-select\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"input-container\" \n [ngClass]=\"{'selected': hasSelection(), 'invalid': hasErrors()}\"\n [style.height]=\"containerHeight\">\n <!-- Selected items overlay on input -->\n @if (hasSelection() && !isFiltering() && !isFocused) {\n <div class=\"selected-items-inline\" #selectedItemsRef>\n @for (item of getSelectedItems(); track item) {\n <span class=\"selected-item-inline\">\n {{ control().displayWith(item) }}\n <button type=\"button\" class=\"remove-item-inline\" (click)=\"removeSelectedItem(item)\">×</button>\n </span>\n }\n </div>\n }\n <input type=\"text\" [value]=\"getDisplayValue()\" (input)=\"onInputChange($event)\" \n (focus)=\"onInputFocus()\" (blur)=\"onInputBlur()\"\n [placeholder]=\"shouldShowPlaceholder() ? 'Type to filter options...' : ''\" \n class=\"filter-input\" />\n </div>\n <div class=\"options\" [@toggleView]=\"showOptions\">\n <!-- Options list -->\n @for (option of getFilteredOptions(); track option) {\n <div class=\"option multi-option\" \n [ngClass]=\"{'selected': isOptionSelected(option)}\"\n (click)=\"optionToggled(option)\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(option)\" \n (click)=\"$event.stopPropagation(); optionToggled(option)\" readonly />\n <span class=\"option-text\">{{ control().displayWith(option) }}</span>\n </div>\n }\n @if (getFilteredOptions().length === 0) {\n <div class=\"no-options\">No options found</div>\n }\n </div>\n <div class=\"label\" [ngClass]=\"{float: shouldFloat()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </div>\n <div class=\"arrow_box\" (click)=\"showOptions = showOptions === 'expand' ? 'collapse' : 'expand'\">\n <div class=\"arrow\"></div>\n </div>\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @for (item of getSelectedItems(); track item) {\n <span class=\"item\">\n {{ control().displayWith(item) }}\n </span>\n }\n </div>\n }\n</div>\n","import { Component, input } from '@angular/core';\nimport { RadioFieldDto } from '../field-dto';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-radio',\n \n templateUrl: './lite-radio.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LiteRadio {\n inEdit = input<boolean>(true);\n control = input<RadioFieldDto>({ \n label: '', \n formControl: new FormControl(''), \n options: [], \n displayWith: (option) => option \n });\n direction = input<'vertical' | 'horizontal'>('vertical');\n\n readonly FormUtils = FormUtils;\n\n isRequired(): boolean {\n return FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onRadioChange(value: any): void {\n this.control().formControl.setValue(value);\n }\n\n isSelected(value: any): boolean {\n return this.control().formControl.value === value;\n }\n}\n","<div class=\"lite-radio\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"radio-container\">\n <div class=\"label\" [ngClass]=\"{'float': true}\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"radio-options\" [ngClass]=\"{'horizontal': direction() === 'horizontal', 'vertical': direction() === 'vertical'}\">\n @for (option of control().options; track option) {\n <label class=\"radio-option\">\n <input type=\"radio\" [value]=\"option\" [checked]=\"isSelected(option)\"\n (change)=\"onRadioChange(option)\" [name]=\"control().label + '_radio'\" class=\"radio-input\" />\n <span class=\"radio-label\">{{ control().displayWith(option) }}</span>\n </label>\n }\n </div>\n </div>\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @if (control().formControl.value) {\n {{ control().displayWith(control().formControl.value) }}\n } @else {\n <span class=\"no-value\">Not selected</span>\n }\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n","import { Component, effect, input } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-checkbox',\n \n templateUrl: `./lite-checkbox.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteCheckbox {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl<boolean>(false, { nonNullable: true }) });\n \n readonly FormUtils = FormUtils;\n\n constructor() {\n effect(() => {\n // console.log('LiteCheckbox initialized with control:', this.control());\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onCheckboxChange(event: Event) {\n const target = event.target as HTMLInputElement;\n this.control().formControl.setValue(target.checked);\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n}\n","<div class=\"lite-checkbox\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <div class=\"checkbox-container\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" \n [checked]=\"control().formControl.value\" \n (change)=\"onCheckboxChange($event)\"\n class=\"checkbox-input\" />\n <div class=\"checkbox-text\">{{ control().label }}<span *ngIf=\"isRequired()\" class=\"required\">*</span></div>\n\n </label>\n </div>\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n @if (control().formControl.value) {\n <span class=\"checked\">✓ Yes</span>\n } @else {\n <span class=\"unchecked\">✗ No</span>\n }\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n","import { Component, effect, input, signal, ElementRef, HostListener, computed } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { FieldDto } from '../field-dto';\n\ninterface CalendarDay {\n date: Date;\n day: number;\n isOtherMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart?: boolean;\n isRangeEnd?: boolean;\n isInRange?: boolean;\n}\n\nexport interface DateRangeFieldDto extends Omit<FieldDto, 'formControl'> {\n formControl: FormControl<string[]>;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-date',\n \n templateUrl: `./lite-date.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteDate {\n inEdit = input<boolean>(true);\n control = input<FieldDto | DateRangeFieldDto>({ \n label: '', \n formControl: new FormControl<string>('', { nonNullable: true }),\n });\n format = input<string>('dd/MM/yyyy');\n range = input<boolean>(false);\n \n // Calendar state\n currentMonth = signal<Date>(new Date());\n showCalendar = signal<boolean>(false);\n calendarPosition = signal<'bottom' | 'top'>('bottom');\n \n // Signal to track form control value changes for reactivity\n private formValueChangeSignal = signal<any>(null);\n \n // Second month for range selection\n secondMonth = computed(() => {\n const current = this.currentMonth();\n return new Date(current.getFullYear(), current.getMonth() + 1, 1);\n });\n \n // Computed calendar days - only recalculates when dependencies change\n calendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n this.formValueChangeSignal();\n return this.getMonthDays(this.currentMonth());\n });\n \n // Second month calendar days for range mode\n secondCalendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n this.formValueChangeSignal();\n return this.range() ? this.getMonthDays(this.secondMonth()) : [];\n });\n\n private getMonthDays(monthDate: Date): CalendarDay[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n \n // First day of the month\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n const days: CalendarDay[] = [];\n const today = new Date();\n const selectedValue = this.control().formControl.value;\n \n // Handle both single date and date range\n let selectedDates: Date[] = [];\n let rangeStart: Date | null = null;\n let rangeEnd: Date | null = null;\n \n if (this.range()) {\n // Range mode - value should be string[]\n const rangeValue = selectedValue as string[];\n if (rangeValue && rangeValue.length > 0) {\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n selectedDates.push(startDate);\n rangeStart = startDate;\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n selectedDates.push(endDate);\n rangeEnd = endDate;\n }\n }\n }\n } else {\n // Single mode - value should be string\n const singleValue = selectedValue as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n selectedDates.push(date);\n }\n }\n }\n \n // Only add days from the current month\n const previousMonth = new Date(firstDay);\n while (previousMonth.getDay() !== 0) {\n previousMonth.setDate(previousMonth.getDate() - 1);\n days.unshift({\n date: new Date(previousMonth),\n day: previousMonth.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(previousMonth, today),\n isSelected: selectedDates.some(selectedDate => this.isSameDay(previousMonth, selectedDate)),\n });\n }\n const currentDate = new Date(firstDay);\n while (currentDate <= lastDay) {\n const isToday = this.isSameDay(currentDate, today);\n const isSelected = selectedDates.some(selectedDate => this.isSameDay(currentDate, selectedDate));\n \n // Range styling flags\n const isRangeStart = rangeStart ? this.isSameDay(currentDate, rangeStart) : false;\n const isRangeEnd = rangeEnd ? this.isSameDay(currentDate, rangeEnd) : false;\n const isInRange = !!(rangeStart && rangeEnd && currentDate >= rangeStart && currentDate <= rangeEnd && !isRangeStart && !isRangeEnd);\n \n days.push({\n date: new Date(currentDate),\n day: currentDate.getDate(),\n isOtherMonth: false,\n isToday,\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n const nextMonthDate = new Date(lastDay);\n while (nextMonthDate.getDay() < 6) {\n nextMonthDate.setDate(nextMonthDate.getDate() + 1);\n days.push({\n date: new Date(nextMonthDate),\n day: nextMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(nextMonthDate, today),\n isSelected: selectedDates.some(selectedDate => this.isSameDay(nextMonthDate, selectedDate)),\n });\n }\n return days;\n }\n \n readonly FormUtils = FormUtils;\n\n constructor(private _elementRef: ElementRef) {\n effect(() => {\n const control = this.control();\n // console.log('LiteDate initialized with control:', control);\n \n // Subscribe to form control value changes to trigger reactivity\n if (control && control.formControl) {\n const _subscription = control.formControl.valueChanges.subscribe(value => {\n console.log('Form value changed:', value);\n this.formValueChangeSignal.set(Date.now()); // Use timestamp to ensure change detection\n });\n \n // Initial trigger\n this.formValueChangeSignal.set(Date.now());\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this._elementRef.nativeElement.contains(event.target as Node)) {\n this.showCalendar.set(false);\n }\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onDateChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n \n if (!inputValue) {\n if (this.range()) {\n const newValue = ['', ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n } else {\n (this.control().formControl as FormControl<string>).setValue('');\n this.formValueChangeSignal.set(Date.now());\n }\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n return;\n }\n \n if (this.range()) {\n // Range mode - check if input contains \" - \" separator\n if (inputValue.includes(' - ')) {\n const rangeParts = inputValue.split(' - ');\n if (rangeParts.length === 2) {\n const startDateParsed = this.parseFormattedDate(rangeParts[0].trim(), this.format());\n const endDateParsed = this.parseFormattedDate(rangeParts[1].trim(), this.format());\n \n if (startDateParsed && endDateParsed) {\n // Store as ISO date strings for consistency\n const startIso = this.toLocalISOString(startDateParsed);\n const endIso = this.toLocalISOString(endDateParsed);\n \n // Ensure start date is before end date\n let newValue: string[];\n if (startDateParsed <= endDateParsed) {\n newValue = [startIso, endIso];\n } else {\n newValue = [endIso, startIso];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n } else {\n // If parsing fails, store the raw input values\n const newValue = [rangeParts[0].trim(), rangeParts[1].trim()];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Invalid range format, store as single date\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string[];\n if (parsedDate) {\n const isoString = this.toLocalISOString(parsedDate);\n newValue = [isoString, ''];\n } else {\n newValue = [inputValue, ''];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Single date input in range mode\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string[];\n if (parsedDate) {\n const isoString = this.toLocalISOString(parsedDate);\n newValue = [isoString, ''];\n } else {\n newValue = [inputValue, ''];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n } else {\n // Single mode - try to parse the formatted date input\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string;\n if (parsedDate) {\n // Store as ISO date string for consistency\n newValue = this.toLocalISOString(parsedDate);\n } else {\n // If parsing fails, store the raw input value\n newValue = inputValue;\n }\n (this.control().formControl as FormControl<string>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now());\n }\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n\n private parseFormattedDate(dateString: string, format: string): Date | null {\n try {\n // Create a regex pattern from the format\n let pattern = format\n .replace('dd', '(\\\\d{1,2})')\n .replace('MM', '(\\\\d{1,2})')\n .replace('yyyy', '(\\\\d{4})');\n \n const regex = new RegExp(`^${pattern}$`);\n const match = dateString.match(regex);\n \n if (!match) return null;\n \n // Extract parts based on format\n let day: number, month: number, year: number;\n \n if (format === 'dd/MM/yyyy') {\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n year = parseInt(match[3], 10);\n } else if (format === 'MM/dd/yyyy') {\n month = parseInt(match[1], 10) - 1; // Month is 0-indexed\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === 'yyyy-MM-dd') {\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n day = parseInt(match[3], 10);\n } else {\n // Default to dd/MM/yyyy\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n }\n \n const date = new Date(year, month, day);\n \n // Validate the date\n if (date.getFullYear() === year && \n date.getMonth() === month && \n date.getDate() === day) {\n return date;\n }\n \n return null;\n } catch {\n return null;\n }\n }\n\n getFormattedValue(): string {\n const value = this.control().formControl.value;\n if (!value) return '';\n \n if (this.range()) {\n // Range mode - value is string[]\n const rangeValue = value as string[];\n if (rangeValue && rangeValue.length >= 2) {\n const dates = [];\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n dates.push(this.formatDate(startDate, this.format()));\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n dates.push(this.formatDate(endDate, this.format()));\n }\n }\n if (dates.length === 2) {\n return `${dates[0]} - ${dates[1]}`;\n } else if (dates.length === 1) {\n return dates[0];\n }\n }\n return '';\n } else {\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue; // Return original value if invalid date\n }\n return '';\n }\n }\n\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n if (!value) return 'Not selected';\n \n if (this.range()) {\n // Range mode - value is string[]\n const rangeValue = value as string[];\n if (rangeValue && rangeValue.length >= 2) {\n const dates = [];\n if (rangeValue[0]) {\n const startDate = new Date(rangeValue[0]);\n if (!isNaN(startDate.getTime())) {\n dates.push(this.formatDate(startDate, this.format()));\n }\n }\n if (rangeValue[1]) {\n const endDate = new Date(rangeValue[1]);\n if (!isNaN(endDate.getTime())) {\n dates.push(this.formatDate(endDate, this.format()));\n }\n }\n if (dates.length === 2) {\n return `${dates[0]} - ${dates[1]}`;\n } else if (dates.length === 1) {\n return dates[0];\n }\n }\n return 'Not selected';\n } else {\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue;\n }\n return 'Not selected';\n }\n }\n\n private formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n \n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year);\n }\n\n // Calendar methods\n toggleCalendar(): void {\n if (!this.showCalendar()) {\n this.calculateCalendarPosition();\n this.setCalendarToSelectedDate();\n }\n this.showCalendar.set(!this.showCalendar());\n }\n\n private setCalendarToSelectedDate(): void {\n const selectedValue = this.control().formControl.value;\n if (selectedValue) {\n let selectedDate: Date | null = null;\n \n if (this.range()) {\n // Range mode - use first date if available\n const rangeValue = selectedValue as string[];\n if (rangeValue && rangeValue.length > 0 && rangeValue[0]) {\n selectedDate = new Date(rangeValue[0]);\n }\n } else {\n // Single mode\n const singleValue = selectedValue as string;\n if (singleValue) {\n selectedDate = new Date(singleValue);\n }\n }\n \n if (selectedDate && !isNaN(selectedDate.getTime())) {\n // Set calendar to show the month of the selected date\n const selectedMonth = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);\n this.currentMonth.set(selectedMonth);\n }\n }\n }\n\n private calculateCalendarPosition(): void {\n const element = this._elementRef.nativeElement;\n const rect = element.getBoundingClientRect();\n const calendarHeight = 300; // Approximate height of calendar panel\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n \n // If not enough space below and more space above, position on top\n if (spaceBelow < calendarHeight && spaceAbove > spaceBelow) {\n this.calendarPosition.set('top');\n } else {\n this.calendarPosition.set('bottom');\n }\n }\n\n getMonthYearDisplay(): string {\n const date = this.currentMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n getSecondMonthYearDisplay(): string {\n const date = this.secondMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newDate);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newDate);\n }\n\n selectDate(day: CalendarDay): void {\n const dateString = this.toLocalISOString(day.date);\n \n if (this.range()) {\n // Range mode - handle start and end date selection\n const currentValue = this.control().formControl.value as string[];\n const currentRange = currentValue || ['', ''];\n \n if (!currentRange[0] || (currentRange[0] && currentRange[1])) {\n // Set start date if no start date or both dates are set (reset)\n // Clear any existing range formatting by setting only the start date\n const newValue = [dateString, ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n } else {\n // Set end date\n const startDate = new Date(currentRange[0]);\n const endDate = new Date(dateString);\n \n // Check if clicking the same date as start date\n if (this.isSameDay(startDate, endDate)) {\n // Reset to just the start date\n const newValue = [dateString, ''];\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n } else {\n // Ensure start date is before end date\n let newValue: string[];\n if (startDate <= endDate) {\n newValue = [currentRange[0], dateString];\n } else {\n newValue = [dateString, currentRange[0]];\n }\n (this.control().formControl as FormControl<string[]>).setValue(newValue);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n \n // Auto-hide calendar after 1 second when second date is selected\n setTimeout(() => {\n this.showCalendar.set(false);\n }, 1000);\n }\n }\n } else {\n // Single mode\n (this.control().formControl as FormControl<string>).setValue(dateString);\n this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n this.showCalendar.set(false); // Close calendar after selection\n }\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n\n private isSameDay(date1: Date, date2: Date): boolean {\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n // Helper method to convert Date to ISO date string without timezone conversion\n private toLocalISOString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n\n}\n","<div class=\"lite-date\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <input type=\"text\" \n [value]=\"getFormattedValue()\" \n (change)=\"onDateChange($event)\"\n [class.invalid]=\"hasErrors()\"\n [placeholder]=\"range() ? format() + ' - ' + format() : format()\" />\n <label class=\"label\" [ngClass]=\"{'float': getFormattedValue()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"calendar_icon\" (click)=\"toggleCalendar()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"calendar\" viewBox=\"0 0 16 16\">\n <path d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1.5A1.5 1.5 0 0 1 16 2.5v11A1.5 1.5 0 0 1 14.5 15H1.5A1.5 1.5 0 0 1 0 13.5v-11A1.5 1.5 0 0 1 1.5 1H3V.5a.5.5 0 0 1 .5-.5zM1.5 2a.5.5 0 0 0-.5.5V4h14V2.5a.5.5 0 0 0-.5-.5H13v.5a.5.5 0 0 1-1 0V2H4v.5a.5.5 0 0 1-1 0V2H1.5zM15 5H1v8.5a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5V5z\"/>\n </svg>\n </div>\n \n @if (showCalendar()) {\n <div class=\"calendar-overlay\" [ngClass]=\"'position-' + calendarPosition()\">\n <ng-container *ngTemplateOutlet=\"calendarPanel\"></ng-container>\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n {{ getDisplayValue() }}\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n<ng-template #calendarPanel>\n <div class=\"calendar-panel\" [ngClass]=\"{'range-mode': range()}\">\n @if (range()) {\n <!-- Range mode: Two month calendars side by side -->\n <div class=\"dual-calendar\">\n <!-- First month -->\n <div class=\"calendar-month\">\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <div class=\"nav-spacer\"></div>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n \n <!-- Second month -->\n <div class=\"calendar-month\">\n <div class=\"calendar-header\">\n <div class=\"nav-spacer\"></div>\n <span class=\"month-year\">{{ getSecondMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of secondCalendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n } @else {\n <!-- Single month mode -->\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{ \n 'today': day.isToday, \n 'selected': day.isSelected,\n 'dim': day.isOtherMonth,\n 'range-start': day.isRangeStart,\n 'range-end': day.isRangeEnd,\n 'in-range': day.isInRange\n }\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n</ng-template>\n","import { Component, effect, input, signal, ElementRef, HostListener, computed } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { FieldDto } from '../field-dto';\n\ninterface CalendarDateTime {\n date: Date;\n day: number;\n isOtherMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-datetime',\n \n templateUrl: `./lite-datetime.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteDateTime {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ \n label: '', \n formControl: new FormControl<string>('', { nonNullable: true }),\n });\n format = input<string>('dd/MM/yyyy HH:mm');\n \n // Calendar state\n currentMonth = signal<Date>(new Date());\n showCalendar = signal<boolean>(false);\n calendarPosition = signal<'bottom' | 'top'>('bottom');\n formattedValue = signal<string>('');\n hourSet = new Array(24).fill(0).map((_, i) => i);\n minSet = new Array(12).fill(0).map((_, i) => i * 5);\n selectedHour = new Date().getHours();\n selectedMinute = 0;\n selectedDateTime: CalendarDateTime | null = null;\n // Signal to track form control value changes for reactivity\n // private formValueChangeSignal = signal<any>(null);\n \n // Computed calendar days - only recalculates when dependencies change\n calendarDays = computed(() => {\n // This makes the computed reactive to form value changes\n // this.formValueChangeSignal();\n return this.getMonthDays(this.currentMonth());\n });\n\n private getMonthDays(monthDate: Date): CalendarDateTime[] {\n const year = monthDate.getFullYear();\n const month = monthDate.getMonth();\n \n // First day of the month\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n \n const days: CalendarDateTime[] = [];\n const today = new Date();\n const value = this.control().formControl.value;\n\n // Single mode - value should be string\n if (value) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n this.selectedDateTime = {\n date,\n day: date.getDate(),\n isOtherMonth: false,\n isToday: this.isSameDay(date, today),\n isSelected: true,\n };\n }\n }\n \n // Only add days from the current month\n const previousMonthDate = new Date(firstDay);\n while (previousMonthDate.getDay() !== 0) {\n previousMonthDate.setDate(previousMonthDate.getDate() - 1);\n days.unshift({\n date: new Date(previousMonthDate),\n day: previousMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(previousMonthDate, today),\n isSelected: this.isSameDay(previousMonthDate, this.selectedDateTime ? this.selectedDateTime.date : null),\n });\n }\n const currentDate = new Date(firstDay);\n while (currentDate <= lastDay) {\n const isToday = this.isSameDay(currentDate, today);\n const isSelected = this.isSameDay(currentDate, this.selectedDateTime ? this.selectedDateTime.date : null);\n days.push({\n date: new Date(currentDate),\n day: currentDate.getDate(),\n isOtherMonth: false,\n isToday,\n isSelected,\n });\n currentDate.setDate(currentDate.getDate() + 1);\n }\n const nextMonthDate = new Date(lastDay);\n while (nextMonthDate.getDay() < 6) {\n nextMonthDate.setDate(nextMonthDate.getDate() + 1);\n days.push({\n date: new Date(nextMonthDate),\n day: nextMonthDate.getDate(),\n isOtherMonth: true,\n isToday: this.isSameDay(nextMonthDate, today),\n isSelected: this.isSameDay(nextMonthDate, this.selectedDateTime ? this.selectedDateTime.date : null),\n });\n }\n return days;\n }\n \n readonly FormUtils = FormUtils;\n\n constructor(private _elementRef: ElementRef) {\n effect(() => {\n const control = this.control();\n // console.log('LiteDateTime with control:', control);\n \n // Subscribe to form control value changes to trigger reactivity\n if (control && control.formControl) {\n control.formControl.valueChanges.subscribe(value => {\n if (value) {\n const date = new Date(value);\n // console.log('Form value changed:', value, date, isNaN(date.getTime()));\n if (!isNaN(date.getTime())) {\n console.log('Formatted Date:', this.formatDate(date, this.format()))\n this.formattedValue.set(this.formatDate(date, this.format()));\n } else {\n this.formattedValue.set(value);\n }\n }\n });\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this._elementRef.nativeElement.contains(event.target as Node)) {\n this.showCalendar.set(false);\n }\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n onDateChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const inputValue = target.value;\n \n if (!inputValue) {\n (this.control().formControl as FormControl<string>).setValue('');\n // this.formValueChangeSignal.set(Date.now());\n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n return;\n }\n \n\n // Single mode - try to parse the formatted date input\n const parsedDate = this.parseFormattedDate(inputValue, this.format());\n let newValue: string;\n if (parsedDate) {\n // Store as ISO date string for consistency\n newValue = this.toLocalISOString(parsedDate);\n } else {\n // If parsing fails, store the raw input value\n newValue = inputValue;\n }\n (this.control().formControl as FormControl<string>).setValue(newValue);\n // this.formValueChangeSignal.set(Date.now());\n \n this.control().formControl.markAsDirty();\n this.control().formControl.markAsTouched();\n }\n onSelectHour(hour: number) {\n this.selectedHour = hour;\n this.setDateTimeSelected(this.selectedDateTime ? this.selectedDateTime.date : new Date());\n }\n onSelectMinute(minute: number) {\n this.selectedMinute = minute;\n this.setDateTimeSelected(this.selectedDateTime ? this.selectedDateTime.date : new Date());\n }\n private setDateTimeSelected(date: Date): void {\n this.selectedDateTime = {\n date,\n day: date.getDate(),\n isOtherMonth: false,\n isToday: date.getDate() === new Date().getDate(),\n isSelected: true,\n };\n const dateString = this.toLocalISOString(this.selectedDateTime.date);\n (this.control().formControl as FormControl<string>).setValue(dateString);\n const calDate = this.calendarDays().find(d => this.isSameDay(d.date, date));\n if (calDate) {calDate.isSelected = true;}\n }\n private parseFormattedDate(dateString: string, format: string): Date | null {\n try {\n // Create a regex pattern from the format\n let pattern = format\n .replace('dd', '(\\\\d{1,2})')\n .replace('MM', '(\\\\d{1,2})')\n .replace('yyyy', '(\\\\d{4})');\n \n const regex = new RegExp(`^${pattern}$`);\n const match = dateString.match(regex);\n \n if (!match) return null;\n \n // Extract parts based on format\n let day: number, month: number, year: number;\n \n if (format === 'dd/MM/yyyy') {\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n year = parseInt(match[3], 10);\n } else if (format === 'MM/dd/yyyy') {\n month = parseInt(match[1], 10) - 1; // Month is 0-indexed\n day = parseInt(match[2], 10);\n year = parseInt(match[3], 10);\n } else if (format === 'yyyy-MM-dd') {\n year = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1; // Month is 0-indexed\n day = parseInt(match[3], 10);\n } else {\n // Default to dd/MM/yyyy\n day = parseInt(match[1], 10);\n month = parseInt(match[2], 10) - 1;\n year = parseInt(match[3], 10);\n }\n \n const date = new Date(year, month, day);\n \n // Validate the date\n if (date.getFullYear() === year && \n date.getMonth() === month && \n date.getDate() === day) {\n return date;\n }\n \n return null;\n } catch {\n return null;\n }\n }\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n if (!value) return 'Not selected';\n\n // Single mode - value is string\n const singleValue = value as string;\n if (singleValue) {\n const date = new Date(singleValue);\n if (!isNaN(date.getTime())) {\n return this.formatDate(date, this.format());\n }\n return singleValue;\n }\n return 'Not selected';\n }\n\n private formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n \n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year)\n .replace('HH', (this.selectedHour < 10 ? '0' : '') + this.selectedHour)\n .replace('mm', (this.selectedMinute < 10 ? '0' : '') + this.selectedMinute);\n }\n\n // Calendar methods\n toggleCalendar(): void {\n if (!this.showCalendar()) {\n this.calculateCalendarPosition();\n this.setCalendarToSelectedDate();\n }\n this.showCalendar.set(!this.showCalendar());\n }\n\n closeCalendar(): void {\n this.showCalendar.set(false);\n }\n\n private setCalendarToSelectedDate(): void {\n const selectedValue = this.control().formControl.value;\n if (selectedValue) {\n let selectedDate: Date | null = null;\n\n // Single mode\n const singleValue = selectedValue as string;\n if (singleValue) {\n selectedDate = new Date(singleValue);\n }\n \n if (selectedDate && !isNaN(selectedDate.getTime())) {\n // Set calendar to show the month of the selected date\n const selectedMonth = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);\n this.currentMonth.set(selectedMonth);\n }\n }\n }\n\n private calculateCalendarPosition(): void {\n const element = this._elementRef.nativeElement;\n const rect = element.getBoundingClientRect();\n const calendarHeight = 300; // Approximate height of calendar panel\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n \n // If not enough space below and more space above, position on top\n if (spaceBelow < calendarHeight && spaceAbove > spaceBelow) {\n this.calendarPosition.set('top');\n } else {\n this.calendarPosition.set('bottom');\n }\n }\n\n getMonthYearDisplay(): string {\n const date = this.currentMonth();\n return date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' });\n }\n\n previousMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() - 1, 1);\n this.currentMonth.set(newDate);\n }\n\n nextMonth(): void {\n const current = this.currentMonth();\n const newDate = new Date(current.getFullYear(), current.getMonth() + 1, 1);\n this.currentMonth.set(newDate);\n }\n\n selectDate(day: CalendarDateTime): void {\n if (this.selectedDateTime){\n this.selectedDateTime.isSelected = false;\n }\n // this.selectedDateTime = day;\n // this.selectedDateTime.isSelected = true;\n this.setDateTimeSelected(day.date);\n // const dateString = this.toLocalISOString(day.date);\n // (this.control().formControl as FormControl<string>).setValue(dateString);\n // // this.formValueChangeSignal.set(Date.now()); // Trigger immediate update\n \n // this.control().formControl.markAsDirty();\n // this.control().formControl.markAsTouched();\n }\n\n private isSameDay(date1: Date, date2: Date | null): boolean {\n if (!date2) return false;\n return date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate();\n }\n\n // Helper method to convert Date to ISO date string without timezone conversion\n private toLocalISOString(date: Date): string {\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n const hh = (this.selectedHour < 10 ? '0' : '') + this.selectedHour;\n const mm = (this.selectedMinute < 10 ? '0' : '') + this.selectedMinute;\n return `${year}-${month}-${day}T${hh}:${mm}:00`;\n }\n\n}\n","<div class=\"lite-date\" [ngClass]=\"{'in-edit': inEdit(), 'invalid': hasErrors()}\">\n @if (inEdit()) {\n <input type=\"text\" \n [value]=\"formattedValue()\" \n (change)=\"onDateChange($event)\"\n [class.invalid]=\"hasErrors()\"\n [placeholder]=\"format()\" />\n <label class=\"label\" [ngClass]=\"{'float': formattedValue()}\">\n {{ control().label }}<span *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"calendar_icon\" (click)=\"toggleCalendar()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"calendar\" viewBox=\"0 0 16 16\">\n <path d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1.5A1.5 1.5 0 0 1 16 2.5v11A1.5 1.5 0 0 1 14.5 15H1.5A1.5 1.5 0 0 1 0 13.5v-11A1.5 1.5 0 0 1 1.5 1H3V.5a.5.5 0 0 1 .5-.5zM1.5 2a.5.5 0 0 0-.5.5V4h14V2.5a.5.5 0 0 0-.5-.5H13v.5a.5.5 0 0 1-1 0V2H4v.5a.5.5 0 0 1-1 0V2H1.5zM15 5H1v8.5a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5V5z\"/>\n </svg>\n </div>\n \n @if (showCalendar()) {\n <div class=\"calendar-overlay\" [ngClass]=\"'position-' + calendarPosition()\">\n <ng-container *ngTemplateOutlet=\"calendarPanel\"></ng-container>\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">\n {{ getDisplayValue() }}\n </div>\n }\n\n @if (inEdit() && hasErrors()) {\n <div class=\"error-messages\">\n @for (error of getErrorMessage(); track error) {\n <div class=\"error-message\">{{ error }}</div>\n }\n </div>\n }\n</div>\n<ng-template #calendarPanel>\n <div class=\"calendar-panel datetime\">\n <div class=\"date-panel\">\n <div class=\"calendar-header\">\n <button type=\"button\" class=\"nav-button\" (click)=\"previousMonth()\">‹</button>\n <span class=\"month-year\">{{ getMonthYearDisplay() }}</span>\n <button type=\"button\" class=\"nav-button\" (click)=\"nextMonth()\">›</button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"weekdays\">\n <div class=\"weekday\">Su</div>\n <div class=\"weekday\">Mo</div>\n <div class=\"weekday\">Tu</div>\n <div class=\"weekday\">We</div>\n <div class=\"weekday\">Th</div>\n <div class=\"weekday\">Fr</div>\n <div class=\"weekday\">Sa</div>\n </div>\n <div class=\"calendar-days\">\n @for (day of calendarDays(); track day.date) {\n <div class=\"calendar-day\" [ngClass]=\"{'today': day.isToday, 'selected': day.isSelected, 'dim': day.isOtherMonth}\" (click)=\"selectDate(day)\">\n {{ day.day }}\n </div>\n }\n </div>\n </div>\n </div>\n <div class=\"time-panel\">\n <div class=\"control-header\">\n <button type=\"button\" class=\"close-button\" (click)=\"closeCalendar()\" aria-label=\"Close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path d=\"M2.146 2.146a.5.5 0 0 1 .708 0L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"time-header\">HOURS</div>\n <div class=\"hh-grid\">\n @for (hh of hourSet; track hh) {\n <div class=\"hh-slot\" [ngClass]=\"{'selected': selectedHour === hh}\" (click)=\"onSelectHour(hh)\">\n {{ hh < 10 ? '0' + hh : hh }}\n </div>\n }\n </div>\n <div class=\"time-header\">MINUTES</div>\n <div class=\"hh-grid\">\n @for (mm of minSet; track mm) {\n <div class=\"hh-slot\" [ngClass]=\"{'selected': selectedMinute === mm}\" (click)=\"onSelectMinute(mm)\">\n {{ mm < 10 ? '0' + mm : mm }}\n </div>\n }\n </div>\n </div>\n </div>\n</ng-template>\n","import { Component, effect, input, signal, computed } from '@angular/core';\nimport { FieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-password',\n \n templateUrl: `./lite-password.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LitePassword {\n inEdit = input<boolean>(true);\n control = input<FieldDto>({ label: '', formControl: new FormControl('') });\n showToggle = input<boolean>(true);\n showStrengthIndicator = input<boolean>(false);\n \n readonly FormUtils = FormUtils;\n showPassword = signal<boolean>(false);\n\n // Computed password strength analysis\n passwordStrength = computed(() => {\n const password = this.control().formControl.value || '';\n return FormUtils.analyzePasswordStrength(password);\n });\n\n constructor() {\n effect(() => {\n // console.log('LitePassword initialized with control:', this.control());\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getPasswordErrorMessages(this.control().formControl, this.control().label);\n }\n\n togglePasswordVisibility() {\n this.showPassword.set(!this.showPassword());\n }\n\n getInputType(): string {\n return this.showPassword() ? 'text' : 'password';\n }\n\n getDisplayValue(): string {\n const value = this.control().formControl.value;\n return value ? '••••••••' : '';\n }\n}\n","<div class=\"lite-password\" [ngClass]=\"{'in-edit': inEdit()}\">\n @if (inEdit()) {\n <div class=\"input-container\">\n <input \n [type]=\"getInputType()\" \n [formControl]=\"control().formControl\" \n placeholder=\"\" \n [ngClass]=\"{'invalid': hasErrors()}\" />\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n @if (showToggle() && control().formControl.value) {\n <button \n type=\"button\" \n class=\"toggle-button\" \n (click)=\"togglePasswordVisibility()\"\n [attr.aria-label]=\"showPassword() ? 'Hide password' : 'Show password'\">\n @if (showPassword()) {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n }\n </button>\n }\n </div>\n @if (showStrengthIndicator() && control().formControl.value) {\n <div class=\"password-strength\">\n <div class=\"strength-bar\">\n <div class=\"strength-fill\" [ngClass]=\"'strength-' + passwordStrength().level.toLowerCase().replace(' ', '-')\"></div>\n </div>\n <div class=\"strength-info\">\n <span class=\"strength-level\" [ngClass]=\"'level-' + passwordStrength().level.toLowerCase().replace(' ', '-')\">\n {{ passwordStrength().level }}\n </span>\n <span class=\"strength-score\">({{ passwordStrength().score }}/8)</span>\n </div>\n @if (passwordStrength().feedback.length > 0) {\n <div class=\"strength-feedback\">\n @for (tip of passwordStrength().feedback; track tip) {\n <div class=\"feedback-tip\">• {{ tip }}</div>\n }\n </div>\n }\n </div>\n }\n @if (hasErrors()) {\n <div class=\"error-messages\">\n @for (errorMessage of getErrorMessage(); track errorMessage) {\n <div class=\"error-message\">{{ errorMessage }}</div>\n }\n </div>\n }\n } @else {\n <div class=\"label\">{{ control().label }}<span *ngIf=\"isRequired()\">*</span></div>\n <div class=\"value\">{{ getDisplayValue() }}</div>\n }\n</div>\n","import { Component, effect, input, signal, computed, ViewChild, ElementRef } from '@angular/core';\nimport { FileFieldDto } from '../field-dto';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormUtils } from '../form-utils';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface FileItem {\n id: string;\n file: File;\n name: string;\n size: number;\n type: string;\n url?: string;\n uploadProgress?: number;\n isUploading?: boolean;\n error?: string;\n}\n\n@Component({\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n selector: 'lite-file',\n \n templateUrl: `./lite-file.html`,\n styleUrls: [`../lite-styles.scss`]\n})\nexport class LiteFile {\n file_icon = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"file-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10,9 9,9 8,9\"></polyline></svg>`\n @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n @ViewChild('cameraInput') cameraInput!: ElementRef<HTMLInputElement>;\n\n inEdit = input<boolean>(true);\n control = input<FileFieldDto>({ label: '', formControl: new FormControl<FileItem[]>([]) });\n \n readonly FormUtils = FormUtils;\n \n // State signals\n files = signal<FileItem[]>([]);\n showPanel = signal<boolean>(false);\n isDragOver = signal<boolean>(false);\n isUploading = signal<boolean>(false);\n\n // Computed values\n fileCount = computed(() => this.files().length);\n totalSize = computed(() => \n this.files().reduce((total, file) => total + file.size, 0)\n );\n hasErrors = computed(() => \n this.files().some(file => file.error)\n );\n \n // Get configuration from control\n multiple = computed(() => this.control().multiple ?? true);\n accept = computed(() => this.control().accept ?? '*/*');\n maxFileSize = computed(() => this.control().maxFileSize ?? 10 * 1024 * 1024);\n maxFiles = computed(() => this.control().maxFiles ?? 10);\n showPreview = computed(() => this.control().showPreview ?? true);\n\n constructor(private _sanitizer: DomSanitizer) {\n effect(() => {\n // console.log('LiteFile initialized with control:', this.control());\n \n // Sync files with form control\n const controlValue = this.control().formControl.value || [];\n if (Array.isArray(controlValue)) {\n this.files.set(controlValue);\n }\n });\n\n // Watch files changes and update form control\n effect(() => {\n const currentFiles = this.files();\n this.control().formControl.setValue(currentFiles);\n });\n }\n\n isRequired() {\n return this.FormUtils.isRequired(this.control().formControl);\n }\n\n hasFormErrors(): boolean {\n return FormUtils.hasErrors(this.control().formControl);\n }\n\n getErrorMessage(): string[] {\n return FormUtils.getErrorMessages(this.control().formControl, this.control().label);\n }\n\n // File operations\n onFileSelect(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this.handleFiles(Array.from(input.files));\n }\n // Reset input\n input.value = '';\n }\n\n onCameraCapture(event: Event) {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this.handleFiles(Array.from(input.files));\n }\n // Reset input\n input.value = '';\n }\n\n onDragOver(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(true);\n }\n\n onDragLeave(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n\n const files = Array.from(event.dataTransfer?.files || []);\n this.handleFiles(files);\n }\n svgToBase64DataUrl(svgString: string): SafeHtml {\n const base64 = btoa(svgString);\n const img = `data:image/svg+xml;base64,${base64}`;\n return this._sanitizer.bypassSecurityTrustUrl(img);\n }\n\n private handleFiles(newFiles: File[]) {\n const currentFiles = this.files();\n const processedFiles: FileItem[] = [];\n\n for (const file of newFiles) {\n // Check file count limit\n if (!this.multiple() && currentFiles.length >= 1) {\n console.warn('Multiple files not allowed');\n break;\n }\n\n if (currentFiles.length + processedFiles.length >= this.maxFiles()) {\n console.warn(`Maximum ${this.maxFiles()} files allowed`);\n break;\n }\n\n // Validate file\n const validation = this.validateFile(file);\n \n const fileItem: FileItem = {\n id: this.generateFileId(),\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n error: validation.error\n };\n\n // Create preview URL for images\n if (this.showPreview() && file.type.startsWith('image/')) {\n fileItem.url = URL.createObjectURL(file);\n }\n\n processedFiles.push(fileItem);\n }\n\n // Update files\n if (this.multiple()) {\n this.files.set([...currentFiles, ...processedFiles]);\n } else {\n this.files.set(processedFiles.slice(0, 1));\n }\n }\n\n private validateFile(file: File): { valid: boolean; error?: string } {\n // Check file size\n if (file.size > this.maxFileSize()) {\n return {\n valid: false,\n error: `File size exceeds ${this.formatFileSize(this.maxFileSize())}`\n };\n }\n\n // Check file type if accept is specified\n const acceptTypes = this.accept();\n if (acceptTypes && acceptTypes !== '*/*') {\n const allowedTypes = acceptTypes.split(',').map((type: string) => type.trim());\n const isAllowed = allowedTypes.some((allowedType: string) => {\n if (allowedType.startsWith('.')) {\n return file.name.toLowerCase().endsWith(allowedType.toLowerCase());\n }\n return file.type.match(new RegExp(allowedType.replace('*', '.*')));\n });\n\n if (!isAllowed) {\n return {\n valid: false,\n error: `File type not allowed. Accepted: ${acceptTypes}`\n };\n }\n }\n\n return { valid: true };\n }\n\n removeFile(fileId: string) {\n const currentFiles = this.files();\n const fileToRemove = currentFiles.find(f => f.id === fileId);\n \n // Revoke object URL to prevent memory leaks\n if (fileToRemove?.url) {\n URL.revokeObjectURL(fileToRemove.url);\n }\n\n this.files.set(currentFiles.filter(f => f.id !== fileId));\n }\n\n clearAllFiles() {\n // Revoke all object URLs\n this.files().forEach(file => {\n if (file.url) {\n URL.revokeObjectURL(file.url);\n }\n });\n\n this.files.set([]);\n }\n\n // UI actions\n togglePanel() {\n this.showPanel.set(!this.showPanel());\n }\n\n closePanel() {\n this.showPanel.set(false);\n }\n\n openFileDialog() {\n this.fileInput.nativeElement.click();\n }\n\n openCameraDialog() {\n this.cameraInput.nativeElement.click();\n }\n\n // Utility methods\n private generateFileId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n getFileIcon(fileType: string): string {\n if (fileType.startsWith('image/')) return '🖼️';\n if (fileType.startsWith('video/')) return '🎥';\n if (fileType.startsWith('audio/')) return '🎵';\n if (fileType.includes('pdf')) return '📄';\n if (fileType.includes('word')) return '📝';\n if (fileType.includes('excel') || fileType.includes('spreadsheet')) return '📊';\n if (fileType.includes('powerpoint') || fileType.includes('presentation')) return '📋';\n if (fileType.includes('zip') || fileType.includes('rar')) return '🗜️';\n return '📁';\n }\n\n isImage(fileType: string): boolean {\n return fileType.startsWith('image/');\n }\n\n getTotalSizeFormatted(): string {\n return this.formatFileSize(this.totalSize());\n }\n}\n","<div class=\"lite-file\" [class.in-edit]=\"inEdit()\">\n <label class=\"label\" [class.required]=\"isRequired()\">{{ control().label }}</label>\n <button [class.has-files]=\"fileCount() > 0\" [class.has-errors]=\"hasErrors()\" (click)=\"togglePanel()\">\n <img [src]=\"svgToBase64DataUrl(file_icon)\" alt=\"file icon\">\n <!-- Badge -->\n <span class=\"file-badge\">\n {{ fileCount() }}\n </span>\n </button>\n\n</div>\n<!-- Panel overlay -->\n<div class=\"panel-overlay\" \n [class.visible]=\"showPanel()\" \n (click)=\"closePanel()\">\n</div>\n<!-- Management panel -->\n<div class=\"file-panel\" [class.visible]=\"showPanel()\">\n <div class=\"panel-header\">\n <h3>File Management</h3>\n <button (click)=\"closePanel()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div class=\"panel-content\">\n <!-- File upload area -->\n <div class=\"upload-area\" \n [class.drag-over]=\"isDragOver()\"\n [class.uploading]=\"isUploading()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFileDialog()\">\n \n <div class=\"upload-content\">\n <svg class=\"upload-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7,10 12,15 17,10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <p>Drop files here or click to browse</p>\n <small>Max {{ maxFiles() }} files, {{ formatFileSize(maxFileSize()) }} each</small>\n </div>\n\n <!-- Hidden file inputs -->\n <input #fileInput\n type=\"file\"\n [multiple]=\"multiple()\"\n [accept]=\"accept()\"\n (change)=\"onFileSelect($event)\"\n style=\"display: none;\">\n\n <input #cameraInput\n type=\"file\"\n accept=\"image/*\"\n capture=\"environment\"\n (change)=\"onCameraCapture($event)\"\n style=\"display: none;\">\n </div>\n\n <!-- Action buttons -->\n <div class=\"action-buttons\">\n <button type=\"button\" class=\"action-btn upload-btn\" (click)=\"openFileDialog()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"17,8 12,3 7,8\"></polyline>\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line>\n </svg>\n Upload Files\n </button>\n\n <button type=\"button\" class=\"action-btn camera-btn\" (click)=\"openCameraDialog()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\"></path>\n <circle cx=\"12\" cy=\"13\" r=\"4\"></circle>\n </svg>\n Take Picture\n </button>\n\n <button type=\"button\" class=\"action-btn close-btn\" (click)=\"closePanel()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n Close\n </button>\n </div>\n\n <!-- File list -->\n <div class=\"file-list\" *ngIf=\"fileCount() > 0\">\n <div class=\"file-list-header\">\n <span>Files ({{ fileCount() }})</span>\n <span class=\"total-size\">{{ getTotalSizeFormatted() }}</span>\n <button type=\"button\" class=\"clear-all-btn\" (click)=\"clearAllFiles()\">\n Clear All\n </button>\n </div>\n\n <div class=\"file-items\">\n <div class=\"file-item\" \n *ngFor=\"let file of files()\" \n [class.has-error]=\"file.error\"\n [class.uploading]=\"file.isUploading\">\n \n <!-- File preview/icon -->\n <div class=\"file-preview\">\n <img *ngIf=\"file.url && isImage(file.type)\" \n [src]=\"file.url\" \n [alt]=\"file.name\"\n class=\"preview-image\">\n <span *ngIf=\"!file.url || !isImage(file.type)\" \n class=\"file-type-icon\">\n {{ getFileIcon(file.type) }}\n </span>\n </div>\n\n <!-- File info -->\n <div class=\"file-info\">\n <div class=\"file-name\" [title]=\"file.name\">{{ file.name }}</div>\n <div class=\"file-details\">\n <span class=\"file-size\">{{ formatFileSize(file.size) }}</span>\n <span class=\"file-type\">{{ file.type || 'Unknown' }}</span>\n </div>\n <div class=\"file-error\" *ngIf=\"file.error\">{{ file.error }}</div>\n \n <!-- Upload progress -->\n <div class=\"upload-progress\" *ngIf=\"file.isUploading && file.uploadProgress !== undefined\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"file.uploadProgress\"></div>\n </div>\n <span class=\"progress-text\">{{ file.uploadProgress }}%</span>\n </div>\n </div>\n\n <!-- Remove button -->\n <button type=\"button\" \n class=\"remove-file-btn\" \n (click)=\"removeFile(file.id)\"\n [disabled]=\"file.isUploading\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"3,6 5,6 21,6\"></polyline>\n <path d=\"M19,6v14a2,2,0,0,1-2,2H7a2,2,0,0,1-2-2V6m3,0V4a2,2,0,0,1,2-2h4a2,2,0,0,1,2,2V6\"></path>\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Empty state -->\n <div class=\"empty-state\" *ngIf=\"fileCount() === 0\">\n <svg class=\"empty-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14,2 14,8 20,8\"></polyline>\n </svg>\n <p>No files uploaded yet</p>\n <small>Click upload or drag files to get started</small>\n </div>\n </div>\n</div>\n\n<!-- Error messages -->\n<div class=\"error-messages\" *ngIf=\"hasFormErrors()\">\n <div class=\"error-message\" *ngFor=\"let error of getErrorMessage()\">{{ error }}</div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { SnackbarType } from '../field-dto';\n\n@Injectable({ providedIn: 'root' })\nexport class LiteSnackbarService {\n private timeoutId: any;\n private snackbarElem: HTMLElement | null = null;\n\n show(text: string, type: SnackbarType = 'done', duration: number = 3000) {\n this.clear();\n this.snackbarElem = document.createElement('div');\n this.snackbarElem.className = `lite-snackbar ${type}`;\n this.snackbarElem.innerHTML = `\n <div class=\"icon\">${this.getIcon(type)}</div>\n <div class=\"text\">${this.escapeHtml(text)}</div>\n `;\n this.injectStyles();\n document.body.appendChild(this.snackbarElem);\n this.timeoutId = setTimeout(() => this.clear(), duration);\n }\n\n clear() {\n if (this.timeoutId) clearTimeout(this.timeoutId);\n if (this.snackbarElem && this.snackbarElem.parentNode) {\n this.snackbarElem.parentNode.removeChild(this.snackbarElem);\n }\n this.snackbarElem = null;\n }\n\n private getIcon(type: SnackbarType) {\n if (type === 'done') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M6 10.5L9 13.5L14 8.5\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n }\n if (type === 'warn') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M10 6V11\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"/><circle cx=\"10\" cy=\"14\" r=\"1\" fill=\"#fff\"/></svg>`;\n }\n if (type === 'error') {\n return `<svg width=\"30\" height=\"30\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\"/><path d=\"M7 7L13 13M13 7L7 13\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>`;\n }\n return '';\n }\n\n private injectStyles() {\n if (document.getElementById('lite-snackbar-style')) return;\n const style = document.createElement('style');\n style.id = 'lite-snackbar-style';\n style.innerHTML = `\n .lite-snackbar {\n position: fixed;\n left: 50%;\n top: 20px;\n transform: translateX(-50%);\n min-width: 200px;\n max-width: 90vw;\n padding: 8px 15px 8px 5px;\n border-radius: 6px;\n color: #fff;\n font-size: 1rem;\n display: flex;\n align-items: center;\n box-shadow: 0 2px 12px rgba(0,0,0,0.18);\n z-index: 9999;\n opacity: 0.9;\n animation: snackbar-in 0.2s;\n }\n .lite-snackbar.done { background: #3a82eeff; }\n .lite-snackbar.warn { background: #f7b731; }\n .lite-snackbar.error { background: #e74c3c; }\n .lite-snackbar .icon { margin-right: 5px; height: 30px; }\n @keyframes snackbar-in {\n from { opacity: 0; transform: translateX(-50%) translateY(-30px); }\n to { opacity: 0.9; transform: translateX(-50%) translateY(0); }\n }\n `;\n document.head.appendChild(style);\n }\n\n private escapeHtml(text: string) {\n return text.replace(/[&<>'\"]/g, c => ({'&':'&','<':'<','>':'>','\\'':''','\"':'"'}[c]||c));\n }\n}\n","import { Component, input, computed, output, effect } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginatorFieldDto } from '../field-dto';\n\n@Component({\n selector: 'lite-paginator',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './lite-paginator.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LitePaginator {\n paginator = input.required<PaginatorFieldDto>();\n pageChange = output<number>();\n itemsPerPageChange = output<number>();\n\n // Computed properties that react to input changes\n totalPages = computed(() => Math.ceil(this.paginator().totalItems / this.paginator().itemsPerPage));\n hasPrevious = computed(() => this.paginator().currentPage > 1);\n hasNext = computed(() => this.paginator().currentPage < this.totalPages());\n\n // Start and end item numbers for display\n startItem = computed(() => {\n const page = this.paginator().currentPage;\n const perPage = this.paginator().itemsPerPage;\n return Math.min((page - 1) * perPage + 1, this.paginator().totalItems);\n });\n\n endItem = computed(() => {\n const page = this.paginator().currentPage;\n const perPage = this.paginator().itemsPerPage;\n return Math.min(page * perPage, this.paginator().totalItems);\n });\n\n constructor() {\n // Effect to log changes for debugging\n effect(() => {\n console.log('Paginator updated:', {\n currentPage: this.paginator().currentPage,\n itemsPerPage: this.paginator().itemsPerPage,\n totalItems: this.paginator().totalItems,\n totalPages: this.totalPages()\n });\n });\n }\n\n // Methods\n goToPrevious() {\n if (this.hasPrevious()) {\n const newPage = this.paginator().currentPage - 1;\n this.pageChange.emit(newPage);\n }\n }\n\n goToNext() {\n if (this.hasNext()) {\n const newPage = this.paginator().currentPage + 1;\n this.pageChange.emit(newPage);\n }\n }\n\n goToPage(page: number) {\n if (page >= 1 && page <= this.totalPages()) {\n this.pageChange.emit(page);\n }\n }\n\n changeItemsPerPage(itemsPerPage: number) {\n this.itemsPerPageChange.emit(itemsPerPage);\n }\n\n // Helper methods for template\n getPageNumbers(): number[] {\n const currentPage = this.paginator().currentPage;\n const totalPages = this.totalPages();\n const pages: number[] = [];\n\n // Show max 5 page numbers, centered around current page\n const start = Math.max(1, Math.min(currentPage - 2, totalPages - 4));\n const end = Math.min(totalPages, start + 4);\n\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n return pages;\n }\n}\n","<div class=\"lite-paginator\">\n <!-- Previous Button -->\n <button\n class=\"paginator-btn previous-btn\"\n [disabled]=\"!hasPrevious()\"\n (click)=\"goToPrevious()\"\n [title]=\"'Previous page'\"\n type=\"button\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Page Numbers -->\n <div class=\"page-numbers\">\n @for (page of getPageNumbers(); track page) {\n <button\n class=\"page-number\"\n [class.active]=\"page === paginator().currentPage\"\n (click)=\"goToPage(page)\"\n type=\"button\">\n {{ page }}\n </button>\n }\n </div>\n\n <!-- Next Button -->\n <button\n class=\"paginator-btn next-btn\"\n [disabled]=\"!hasNext()\"\n (click)=\"goToNext()\"\n [title]=\"'Next page'\"\n type=\"button\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Items per page selector -->\n <div class=\"items-per-page\">\n <select\n [value]=\"paginator().itemsPerPage\"\n (change)=\"changeItemsPerPage(+$any($event.target).value)\"\n class=\"items-select\">\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n </select>\n <span class=\"items-label\">per page</span>\n </div>\n\n <!-- Total items info -->\n <div class=\"total-info\">\n <span class=\"total-text\">\n {{ startItem() }}-{{ endItem() }} of {{ paginator().totalItems }}\n </span>\n </div>\n</div>\n","import { Component, input, computed, output, HostListener } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TableFieldDto, TableColumn } from '../field-dto';\nimport { LitePaginator } from '../lite-paginator/lite-paginator';\n\n@Component({\n selector: 'lite-table',\n standalone: true,\n imports: [CommonModule, LitePaginator],\n templateUrl: './lite-table.html',\n styleUrls: ['../lite-styles.scss']\n})\nexport class LiteTable<T = any> {\n table = input.required<TableFieldDto<T>>();\n pageChange = output<number>();\n itemsPerPageChange = output<number>();\n // Emits when a row menu action is selected\n menuAction = output<{ action: string; row: T }>();\n\n // Track which row's menu is open (by paginated row index)\n openMenuIndex: number | null = null;\n // Track if menu should open upward\n menuOpenUpward = false;\n\n // Computed properties for pagination\n paginatedData = computed(() => {\n const tableData = this.table();\n if (!tableData.showPaginator) {\n return tableData.data;\n }\n\n const paginator = tableData.paginatorConfig;\n const startIndex = (paginator.currentPage - 1) * paginator.itemsPerPage;\n const endIndex = startIndex + paginator.itemsPerPage;\n\n return tableData.data.slice(startIndex, endIndex);\n });\n\n // Helper method to get cell value\n getCellValue(row: any, column: TableColumn): string {\n if (column.cellTemplate) {\n return column.cellTemplate(this.getValue(row, column.key), row);\n }\n const value = this.getValue(row, column.key);\n\n // Special handling for name field from Random User API\n if (column.key === 'name' && value && typeof value === 'object') {\n const nameObj = value as any;\n return `${nameObj.first || ''} ${nameObj.last || ''}`.trim();\n }\n\n return value?.toString() || '';\n }\n\n // Helper method to extract value from row (supports nested properties)\n private getValue(row: any, key: string): any {\n if (!row || typeof row !== 'object') {\n return row;\n }\n\n // Support dot notation for nested properties\n const keys = key.split('.');\n let value = row;\n\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = value[k];\n } else {\n return undefined;\n }\n }\n\n return value;\n }\n\n // Event handlers for paginator\n onPageChange(page: number) {\n this.pageChange.emit(page);\n }\n\n onItemsPerPageChange(itemsPerPage: number) {\n this.itemsPerPageChange.emit(itemsPerPage);\n }\n\n // Row menu handlers\n toggleMenu(rowIndex: number, event?: MouseEvent) {\n event?.stopPropagation();\n \n if (this.openMenuIndex === rowIndex) {\n this.openMenuIndex = null;\n this.menuOpenUpward = false;\n return;\n }\n \n this.openMenuIndex = rowIndex;\n \n // Check if button is near bottom of viewport\n if (event?.target) {\n const button = event.target as HTMLElement;\n const rect = button.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const menuHeight = 150; // Approximate menu height\n \n // Open upward if not enough space below\n this.menuOpenUpward = spaceBelow < menuHeight && rect.top > menuHeight;\n }\n }\n\n onMenuItemClick(action: string, row: T, event?: MouseEvent) {\n event?.stopPropagation();\n this.menuAction.emit({ action, row });\n this.openMenuIndex = null;\n }\n\n // Close any open menu when clicking outside\n @HostListener('document:click')\n onDocumentClick() {\n this.openMenuIndex = null;\n }\n}\n","<div class=\"lite-table\">\n <!-- Table Header -->\n <div class=\"table-header\">\n <div class=\"header-row\">\n @for (column of table().columns; track column.key) {\n <div\n class=\"header-cell\"\n [style.flex]=\"column.flex || '1'\"\n [class.sortable]=\"column.sortable\">\n {{ column.label }}\n </div>\n }\n </div>\n </div>\n\n <!-- Table Body -->\n <div class=\"table-body\">\n @for (row of paginatedData(); track $index; let rowIndex = $index) {\n <div class=\"data-row\">\n @for (column of table().columns; track column.key) {\n <div class=\"data-cell\" [style.flex]=\"column.flex || '1'\">\n @if (column.type === 'menu') {\n @if ((column.menuItems || []).length === 1) {\n <button\n class=\"single-action-button\"\n [class.danger]=\"column.menuItems![0].variant === 'danger'\"\n (click)=\"onMenuItemClick(column.menuItems![0].value, row, $event)\">\n {{ column.menuItems![0].label }}\n </button>\n } @else {\n <div class=\"row-menu\">\n <button\n class=\"menu-button\"\n aria-label=\"Row actions\"\n [attr.aria-expanded]=\"openMenuIndex === rowIndex\"\n (click)=\"toggleMenu(rowIndex, $event)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"4\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"10\" cy=\"10\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"10\" cy=\"16\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </button>\n @if (openMenuIndex === rowIndex) {\n <div class=\"menu-dropdown\" [class.menu-dropdown--upward]=\"menuOpenUpward\" (click)=\"$event.stopPropagation()\">\n @for (mi of column.menuItems || []; track mi.value) {\n <button\n class=\"menu-item\"\n [class.danger]=\"mi.variant === 'danger'\"\n (click)=\"onMenuItemClick(mi.value, row, $event)\">{{ mi.label }}</button>\n }\n </div>\n }\n </div>\n }\n } @else {\n <span [innerHTML]=\"getCellValue(row, column)\"></span>\n }\n </div>\n }\n </div>\n }\n @if (paginatedData().length === 0) {\n <div class=\"empty-row\">\n <div\n class=\"empty-cell\"\n [style.flex]=\"'1'\">\n No data available\n </div>\n </div>\n }\n </div>\n\n <!-- Paginator -->\n @if (table().showPaginator) {\n <div class=\"table-paginator\">\n <lite-paginator\n [paginator]=\"table().paginatorConfig\"\n (pageChange)=\"onPageChange($event)\"\n (itemsPerPageChange)=\"onItemsPerPageChange($event)\">\n </lite-paginator>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, TemplateRef, Type, ViewContainerRef, ViewChild, ComponentRef, AfterViewInit, OnDestroy, computed, input, output } from '@angular/core';\n\nexport interface LitePanelAction {\n label: string;\n value?: unknown;\n /**\n * Adds a CSS modifier class `lite-panel__action--${variant}` to let consumers style the action button.\n */\n variant?: 'primary' | 'secondary' | 'danger';\n}\n\nlet panelIdCounter = 0;\n\n@Component({\n standalone: true,\n selector: 'lite-panel',\n imports: [CommonModule],\n templateUrl: './lite-panel.html',\n styleUrls: ['../lite-styles.scss', './lite-panel.scss']\n})\nexport class LitePanel implements AfterViewInit, OnDestroy {\n title = input<string | null>(null);\n content = input<string | TemplateRef<unknown> | Type<any> | null>(null);\n contentInputs = input<Record<string, any> | null>(null);\n actions = input<LitePanelAction[] | null>(null);\n closeOnOverlayClick = input<boolean>(true);\n width = input<string | number | null>(null);\n height = input<string | number | null>(null);\n maxWidth = input<string | number | null>(null);\n maxHeight = input<string | number | null>(null);\n\n closed = output<unknown | null>();\n\n @ViewChild('dynamicComponentContainer', { read: ViewContainerRef }) dynamicComponentContainer?: ViewContainerRef;\n\n readonly panelTitleId = `lite-panel-title-${++panelIdCounter}`;\n private componentRef?: ComponentRef<any>;\n\n private readonly defaultActions = [{ label: 'OK', value: null, variant: 'primary' }] satisfies LitePanelAction[];\n\n readonly resolvedActions = computed(() => {\n const provided = this.actions();\n return provided && provided.length ? provided : this.defaultActions;\n });\n\n readonly contentTemplate = computed(() => {\n const value = this.content();\n return value instanceof TemplateRef ? value : null;\n });\n\n readonly contentText = computed(() => {\n const value = this.content();\n return typeof value === 'string' ? value : null;\n });\n\n readonly contentComponent = computed(() => {\n const value = this.content();\n // Check if it's a component type (function/class but not TemplateRef)\n return value && typeof value === 'function' && !(value instanceof TemplateRef) ? value : null;\n });\n\n readonly templateContext: { panel: LitePanel; close: (value?: unknown) => void } = {\n panel: this,\n close: (value?: unknown) => this.close(value ?? null)\n };\n\n readonly panelStyles = computed(() => {\n const styles: Record<string, string> = {};\n const candidates: Array<[string, string | number | null | undefined]> = [\n ['width', this.width()],\n ['height', this.height()],\n ['max-width', this.maxWidth()],\n ['max-height', this.maxHeight()]\n ];\n\n for (const [prop, value] of candidates) {\n if (!this.isNilOrEmpty(value)) {\n styles[prop] = this.toCssLength(value as string | number);\n }\n }\n\n return styles;\n });\n\n close(value: unknown | null = null): void {\n this.closed.emit(value ?? null);\n }\n\n onBackdropClick(): void {\n if (this.closeOnOverlayClick()) {\n this.close(null);\n }\n }\n\n onAction(action: LitePanelAction): void {\n let emitted = Object.prototype.hasOwnProperty.call(action, 'value') ? action.value : null;\n \n // If there's a dynamic component with a getData method, include its data\n if (this.componentRef?.instance && typeof this.componentRef.instance.getData === 'function') {\n const componentData = this.componentRef.instance.getData();\n emitted = { action: emitted, data: componentData };\n }\n \n this.close(emitted as unknown | null);\n }\n\n getActionClasses(action: LitePanelAction): Record<string, boolean> {\n return {\n 'lite-panel__action': true,\n [`lite-panel__action--${action.variant}`]: !!action.variant\n };\n }\n\n private toCssLength(value: string | number): string {\n if (typeof value === 'number') {\n return `${value}px`;\n }\n\n return value.trim();\n }\n\n private isNilOrEmpty(value: string | number | null | undefined): value is null | undefined | '' {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (typeof value === 'string' && value.trim() === '') {\n return true;\n }\n\n return false;\n }\n\n ngAfterViewInit(): void {\n this.loadDynamicComponent();\n }\n\n ngOnDestroy(): void {\n this.componentRef?.destroy();\n }\n\n private loadDynamicComponent(): void {\n const component = this.contentComponent();\n if (component && this.dynamicComponentContainer) {\n this.dynamicComponentContainer.clear();\n this.componentRef = this.dynamicComponentContainer.createComponent(component);\n \n // Apply inputs if provided\n const inputs = this.contentInputs();\n if (inputs) {\n Object.entries(inputs).forEach(([key, value]) => {\n if (this.componentRef) {\n // Use setInput to properly handle both input signals and @Input decorators\n this.componentRef.setInput(key, value);\n }\n });\n }\n \n this.componentRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","<div class=\"lite-panel__backdrop\" (click)=\"onBackdropClick()\"></div>\n\n<div\n class=\"lite-panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [ngStyle]=\"panelStyles()\"\n [attr.aria-labelledby]=\"title() ? panelTitleId : null\">\n @if (title()) {\n <header class=\"lite-panel__header\">\n <h2 class=\"lite-panel__title\" [id]=\"panelTitleId\">{{ title() }}</h2>\n <button type=\"button\" class=\"lite-panel__close\" (click)=\"close(null)\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </header>\n }\n\n <section class=\"lite-panel__content\">\n @if (contentComponent()) {\n <ng-container #dynamicComponentContainer></ng-container>\n } @else if (contentTemplate()) {\n <ng-container *ngTemplateOutlet=\"contentTemplate(); context: templateContext\"></ng-container>\n } @else if (contentText()) {\n <p class=\"lite-panel__content-text\">{{ contentText() }}</p>\n } @else {\n <ng-content></ng-content>\n }\n </section>\n\n <footer class=\"lite-panel__actions\">\n @for (action of resolvedActions(); track action) {\n <button\n type=\"button\"\n [ngClass]=\"getActionClasses(action)\"\n (click)=\"onAction(action)\"\n >\n {{ action.label }}\n </button>\n }\n </footer>\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type LoadingView = 'spinner' | 'progress';\n\n@Component({\n selector: 'lite-loading',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './lite-loading.html',\n styleUrls: ['../lite-styles.scss', './lite-loading.scss']\n})\nexport class LiteLoading {\n /**\n * The view type: 'spinner' for loading wheel, 'progress' for progress bar\n */\n view = input<LoadingView>('spinner');\n\n /**\n * Progress percentage (0-100). If undefined, shows indeterminate progress.\n * Only applies when view is 'progress'.\n */\n progress = input<number | undefined>(undefined);\n\n /**\n * Optional message to display below the loading indicator\n */\n message = input<string | undefined>(undefined);\n\n /**\n * Size of the spinner (only applies to spinner view)\n */\n size = input<'small' | 'medium' | 'large'>('medium');\n\n /**\n * Whether the loading indicator is visible\n */\n visible = input<boolean>(true);\n\n /**\n * Computed property to determine if progress is defined\n */\n isProgressDefined = computed(() => {\n const progressValue = this.progress();\n return progressValue !== undefined && progressValue !== null;\n });\n\n /**\n * Computed property to get clamped progress value (0-100)\n */\n progressValue = computed(() => {\n const progressValue = this.progress();\n if (progressValue === undefined || progressValue === null) {\n return 0;\n }\n return Math.max(0, Math.min(100, progressValue));\n });\n\n /**\n * Computed property for spinner size class\n */\n spinnerSizeClass = computed(() => {\n return `lite-loading__spinner--${this.size()}`;\n });\n}\n","@if (visible()) {\n <div class=\"lite-loading\">\n @if (view() === 'spinner') {\n <div class=\"lite-loading__spinner-container\">\n <div class=\"lite-loading__spinner\" [ngClass]=\"spinnerSizeClass()\">\n <div class=\"lite-loading__spinner-circle\"></div>\n </div>\n </div>\n } @else if (view() === 'progress') {\n <div class=\"lite-loading__progress-container\">\n @if (isProgressDefined()) {\n <!-- Defined progress bar -->\n <div class=\"lite-loading__progress-bar\">\n <div \n class=\"lite-loading__progress-fill\" \n [style.width.%]=\"progressValue()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"progressValue()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\">\n </div>\n </div>\n <div class=\"lite-loading__progress-text\">{{ progressValue() }}%</div>\n } @else {\n <!-- Indeterminate progress bar -->\n <div class=\"lite-loading__progress-bar lite-loading__progress-bar--indeterminate\">\n <div class=\"lite-loading__progress-fill-indeterminate\"></div>\n </div>\n }\n </div>\n }\n \n @if (message()) {\n <div class=\"lite-loading__message\">{{ message() }}</div>\n }\n </div>\n}\n","/*\n * Public API Surface of lite-form\n */\n\nexport * from './lib/field-dto';\nexport * from './lib/form-utils';\nexport * from './lib/lite-input/lite-input';\nexport * from './lib/lite-textarea/lite-textarea';\nexport * from './lib/lite-select/lite-select';\nexport * from './lib/lite-multi-select/lite-multi-select';\nexport * from './lib/lite-radio/lite-radio';\nexport * from './lib/lite-checkbox/lite-checkbox';\nexport * from './lib/lite-date/lite-date';\nexport * from './lib/lite-datetime/lite-datetime';\nexport * from './lib/lite-password/lite-password';\nexport * from './lib/lite-file/lite-file';\nexport * from './lib/lite-snackbar/lite-snackbar.service';\nexport * from './lib/lite-paginator/lite-paginator';\nexport * from './lib/lite-table/lite-table';\nexport * from './lib/lite-panel/lite-panel';\nexport * from './lib/lite-loading/lite-loading';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|