valtech-components 2.0.395 → 2.0.396

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":"valtech-components.mjs","sources":["../../../projects/valtech-components/src/lib/components/atoms/avatar/avatar.component.ts","../../../projects/valtech-components/src/lib/services/icons.service.ts","../../../projects/valtech-components/src/lib/components/atoms/box/box.component.ts","../../../projects/valtech-components/src/lib/shared/utils/simple-content.ts","../../../projects/valtech-components/src/lib/components/types.ts","../../../projects/valtech-components/src/lib/services/download.service.ts","../../../projects/valtech-components/src/lib/services/in-app-browser.service.ts","../../../projects/valtech-components/src/lib/services/navigation.service.ts","../../../projects/valtech-components/src/lib/shared/constants/storage.ts","../../../projects/valtech-components/src/lib/services/local-storage.service.ts","../../../projects/valtech-components/src/lib/services/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/lang-provider.service.ts","../../../projects/valtech-components/src/lib/components/atoms/button/button.component.ts","../../../projects/valtech-components/src/lib/components/atoms/button/factory.ts","../../../projects/valtech-components/src/lib/components/atoms/display/display.component.ts","../../../projects/valtech-components/src/lib/components/atoms/divider/divider.component.ts","../../../projects/valtech-components/src/lib/components/atoms/href/href.component.ts","../../../projects/valtech-components/src/lib/components/atoms/icon/icon.component.ts","../../../projects/valtech-components/src/lib/components/atoms/image/image.component.ts","../../../projects/valtech-components/src/lib/components/atoms/progress-bar/progress-bar.component.ts","../../../projects/valtech-components/src/lib/services/link-processor.service.ts","../../../projects/valtech-components/src/lib/shared/pipes/process-links.pipe.ts","../../../projects/valtech-components/src/lib/components/atoms/text/text.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/title.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/types.ts","../../../projects/valtech-components/src/lib/components/molecules/action-header/action-header.component.ts","../../../projects/valtech-components/src/lib/components/molecules/alert-box/alert-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/button-group/button-group.component.ts","../../../projects/valtech-components/src/lib/components/molecules/card/types.ts","../../../projects/valtech-components/src/lib/components/molecules/card/card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/check-input/check-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/code-display/code-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/command-display/command-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/comment-input/comment-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/content-loader/content-loader.component.ts","../../../projects/valtech-components/src/lib/shared/utils/form-defaults.ts","../../../projects/valtech-components/src/lib/components/molecules/date-input/date-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/email-input/email-input.component.ts","../../../projects/valtech-components/src/lib/shared/utils/styles.ts","../../../projects/valtech-components/src/lib/components/molecules/expandable-text/expandable-text.component.ts","../../../projects/valtech-components/src/lib/components/molecules/file-input/file-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hint/hint.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hour-input/hour-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/link/link.component.ts","../../../projects/valtech-components/src/lib/components/molecules/title-block/title-block.component.ts","../../../projects/valtech-components/src/lib/components/molecules/info/info.component.ts","../../../projects/valtech-components/src/lib/components/molecules/popover-selector/popover-selector.component.ts","../../../projects/valtech-components/src/lib/components/molecules/language-selector/language-selector.component.ts","../../../projects/valtech-components/src/lib/services/theme.service.ts","../../../projects/valtech-components/src/lib/components/molecules/layered-card/layered-card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/links-cake/links-cake.component.ts","../../../projects/valtech-components/src/lib/shared/utils/text.ts","../../../projects/valtech-components/src/lib/components/molecules/searchbar/searchbar.component.ts","../../../projects/valtech-components/src/lib/components/molecules/multi-select-search/multi-select-search.component.ts","../../../projects/valtech-components/src/lib/components/molecules/multi-select-simple/multi-select-simple.component.ts","../../../projects/valtech-components/src/lib/components/molecules/notes-box/notes-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-from-to/number-from-to.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-input/number-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/password-input/password-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pill/pill.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pin-input/pin-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/plain-code-box/plain-code-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/progress-status/progress-status.component.ts","../../../projects/valtech-components/src/lib/components/molecules/prompter/prompter.component.ts","../../../projects/valtech-components/src/lib/components/molecules/radio-input/radio-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/select-input/select-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/select-search/select-search.component.ts","../../../projects/valtech-components/src/lib/components/molecules/text-input/text-input.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/article.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/types.ts","../../../projects/valtech-components/src/lib/components/organisms/banner/banner.component.ts","../../../projects/valtech-components/src/lib/components/organisms/toolbar/toolbar.component.ts","../../../projects/valtech-components/src/lib/components/organisms/footer/footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/form/factory.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form-footer/form-footer.component.ts","../../../projects/valtech-components/src/lib/shared/utils/dom.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form.component.ts","../../../projects/valtech-components/src/lib/components/organisms/header/header.component.ts","../../../projects/valtech-components/src/lib/components/organisms/item-list/item-list.component.ts","../../../projects/valtech-components/src/lib/components/organisms/no-content/no-content.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/types.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard.component.ts","../../../projects/valtech-components/src/lib/components/templates/layout/layout.component.ts","../../../projects/valtech-components/src/lib/components/templates/simple/simple.component.ts","../../../projects/valtech-components/src/lib/services/lang-provider/components/lang-settings.ts","../../../projects/valtech-components/src/lib/services/lang-provider/content.ts","../../../projects/valtech-components/src/lib/services/toast.service.ts","../../../projects/valtech-components/src/lib/shared/utils/content.ts","../../../projects/valtech-components/src/public-api.ts","../../../projects/valtech-components/src/valtech-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonAvatar } from '@ionic/angular/standalone';\nimport { AvatarMetadata } from './types';\n\n@Component({\n selector: 'val-avatar',\n standalone: true,\n imports: [IonAvatar],\n template: `\n <ion-avatar\n aria-hidden=\"true\"\n [class]=\"props.size\"\n [class.box]=\"props.box\"\n [class.grayscale]=\"props.grayscale\"\n (click)=\"onClickHandler()\"\n >\n <img alt=\"profile image\" [src]=\"props.image || props.default\" />\n </ion-avatar>\n `,\n styleUrls: ['./avatar.component.scss'],\n})\n/**\n * val-avatar\n *\n * Displays a user or profile image, optionally with a box style and different sizes.\n *\n * @example\n * <val-avatar [props]=\"{ image: 'url', size: 'medium', box: true }\" (onClick)=\"handler()\"></val-avatar>\n *\n * @input props: AvatarMetadata - Configuration for the avatar (image, size, box, default image)\n * @output onClick - Emits when the avatar is clicked\n */\nexport class AvatarComponent implements OnInit {\n @Input() props: AvatarMetadata;\n\n /**\n * Event emitted when the avatar is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit();\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for registering and managing custom Ionicons icons in the application.\n * Automatically registers a set of commonly used icons on initialization.\n */\n\nimport { Injectable } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport {\n addCircleOutline,\n addOutline,\n alertCircleOutline,\n alertOutline,\n arrowBackOutline,\n arrowDownOutline,\n arrowForwardOutline,\n businessOutline,\n calendarOutline,\n chatbubblesOutline,\n checkmarkCircleOutline,\n checkmarkOutline,\n chevronDownOutline,\n chevronForwardOutline,\n clipboardOutline,\n closeOutline,\n copyOutline,\n createOutline,\n documentTextOutline,\n ellipsisHorizontalOutline,\n eyeOffOutline,\n eyeOutline,\n filterOutline,\n heart,\n heartOutline,\n homeOutline,\n informationCircleOutline,\n locationOutline,\n lockClosedOutline,\n logoFacebook,\n logoInstagram,\n logoLinkedin,\n logoNpm,\n logoTiktok,\n logoTwitter,\n logoYoutube,\n notificationsOutline,\n openOutline,\n playOutline,\n refreshOutline,\n removeOutline,\n scanOutline,\n shareOutline,\n trashOutline,\n} from 'ionicons/icons';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n /**\n * Registers a set of Ionicons icons for use throughout the app.\n */\n constructor() {\n addIcons({\n addOutline,\n addCircleOutline,\n alertOutline,\n alertCircleOutline,\n arrowBackOutline,\n arrowForwardOutline,\n arrowDownOutline,\n checkmarkCircleOutline,\n ellipsisHorizontalOutline,\n notificationsOutline,\n openOutline,\n closeOutline,\n chatbubblesOutline,\n shareOutline,\n heart,\n heartOutline,\n homeOutline,\n eyeOffOutline,\n eyeOutline,\n scanOutline,\n chevronDownOutline,\n chevronForwardOutline,\n checkmarkOutline,\n clipboardOutline,\n copyOutline,\n filterOutline,\n locationOutline,\n calendarOutline,\n businessOutline,\n logoTwitter,\n logoInstagram,\n logoLinkedin,\n logoYoutube,\n logoTiktok,\n logoFacebook,\n createOutline,\n trashOutline,\n playOutline,\n refreshOutline,\n documentTextOutline,\n lockClosedOutline,\n informationCircleOutline,\n logoNpm,\n removeOutline,\n });\n }\n}\n","import { CommonModule, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonCard, IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { BoxMetadata } from './types';\n\n@Component({\n selector: 'val-box',\n standalone: true,\n imports: [CommonModule, IonCard, IonIcon, NgStyle],\n template: `\n <ion-card\n class=\"box\"\n [color]=\"props.color\"\n [class.rounded]=\"props.rounded\"\n [class.bordered]=\"props.bordered\"\n [class.transparent]=\"!props.color\"\n [class.left-border]=\"props.leftBorder\"\n [ngStyle]=\"{\n padding: props.padding ? props.padding : '0px',\n }\"\n >\n @if (props.icon) {\n <ion-icon class=\"icon\" [name]=\"props.icon\" (click)=\"clickHandler()\"></ion-icon>\n }\n <div\n [ngStyle]=\"{\n 'margin-right': props.icon ? '24px' : '0px',\n }\"\n >\n <ng-content select=\"[body]\"></ng-content>\n </div>\n </ion-card>\n `,\n styleUrls: ['./box.component.scss'],\n})\n/**\n * val-box\n *\n * A stylized card container for grouping content, with optional icon, color, border, and click event.\n *\n * @example\n * <val-box [props]=\"{ color: 'primary', rounded: true, icon: 'star' }\" (onClick)=\"handler()\">\n * <div body>Content here</div>\n * </val-box>\n *\n * @input props: BoxMetadata - Configuration for the box (color, icon, border, etc.)\n * @output onClick - Emits when the box or its icon is clicked\n */\nexport class BoxComponent implements OnInit {\n /**\n * Box configuration object.\n * @type {BoxMetadata}\n * @property color - The color of the box (Ionic color string).\n * @property icon - The name of the icon to display (optional).\n * @property bordered - Whether the box has a border (optional).\n * @property leftBorder - Whether the box has a left border (optional).\n * @property rounded - Whether the box has rounded corners (optional).\n * @property padding - Custom padding for the box (optional).\n */\n @Input()\n props: BoxMetadata;\n\n /**\n * Event emitted when the box or its icon is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n clickHandler() {\n this.onClick.emit();\n }\n}\n","/**\n * Simplified content utilities for the new LangService-only system.\n * This replaces the old reactive-content.ts with a much simpler approach.\n */\n\n/**\n * Base metadata for components that support reactive content.\n * Simplified version that works directly with LangService.\n */\nexport interface ReactiveContentMetadata {\n /** Static content text (takes precedence over reactive content) */\n content?: string;\n /** Content key for reactive content from LangService */\n contentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n /** Fallback text if content is not found */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for text-based components with reactive content support.\n */\nexport interface ReactiveTextMetadata extends ReactiveContentMetadata {\n /** Static content text */\n content?: string;\n /** Content key for reactive lookup */\n contentKey?: string;\n /** Component class name */\n contentClass?: string;\n /** Fallback text */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for components that support content interpolation.\n */\nexport interface ReactiveContentWithInterpolation extends ReactiveContentMetadata {\n /** Interpolation data for parameterized content */\n contentInterpolation?: Record<string, string | number>;\n}\n\n/**\n * Helper function to determine if component should use reactive content.\n * @param metadata Component metadata\n * @returns True if component should use reactive content\n */\nexport function shouldUseReactiveContent(metadata: ReactiveContentMetadata): boolean {\n return !metadata.content && !!(metadata.contentKey && metadata.contentClass);\n}\n\n/**\n * Extract content configuration from metadata.\n * @param metadata Component metadata\n * @returns Content configuration for LangService\n */\nexport function extractContentConfig(metadata: ReactiveContentMetadata) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n };\n}\n\n/**\n * Create reactive content metadata with defaults.\n * @param config Partial content configuration\n * @returns Complete reactive content metadata\n */\nexport function createReactiveContentMetadata(\n config: Partial<ReactiveContentMetadata>\n): ReactiveContentMetadata {\n return {\n content: config.content,\n contentKey: config.contentKey,\n contentClass: config.contentClass,\n contentFallback: config.contentFallback,\n };\n}\n\n/**\n * Interpolate content string with values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateContent('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Check if component should use reactive content with interpolation.\n * @param metadata Component metadata with interpolation\n * @returns True if component should use reactive content with interpolation\n */\nexport function shouldUseReactiveContentWithInterpolation(\n metadata: ReactiveContentWithInterpolation\n): boolean {\n return shouldUseReactiveContent(metadata) && !!metadata.contentInterpolation;\n}\n\n/**\n * Extract content configuration with interpolation from metadata.\n * @param metadata Component metadata with interpolation\n * @returns Content configuration for LangService with interpolation data\n */\nexport function extractContentConfigWithInterpolation(metadata: ReactiveContentWithInterpolation) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n interpolation: metadata.contentInterpolation,\n };\n}\n\n/**\n * Helper function to get reactive content with interpolation using LangService.\n * This provides a unified way to get reactive, interpolated content.\n *\n * @param langService - The LangService instance\n * @param metadata - Component metadata with interpolation\n * @returns Observable that emits interpolated content\n *\n * @example\n * ```typescript\n * const content$ = fromContentWithInterpolation(this.langService, {\n * contentClass: 'MyComponent',\n * contentKey: 'greeting',\n * contentInterpolation: { name: 'World' }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: any, // LangService type would cause circular dependency\n metadata: ReactiveContentWithInterpolation\n): any {\n // Observable<string> but avoiding import\n const config = extractContentConfigWithInterpolation(metadata);\n\n if (!config.className || !config.key) {\n throw new Error('fromContentWithInterpolation requires both contentClass and contentKey');\n }\n\n return langService.getContentWithInterpolation(\n config.className,\n config.key,\n config.interpolation,\n config.fallback\n );\n}\n\n/**\n * Helper function to get static content with interpolation.\n * This provides interpolation for static content strings.\n *\n * @param content - Static content string\n * @param interpolationData - Values to interpolate\n * @returns Interpolated string\n */\nexport function interpolateStaticContent(\n content: string,\n interpolationData?: Record<string, string | number>\n): string {\n return interpolateContent(content, interpolationData);\n}\n","import { FormControl, ValidatorFn } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ImageMetadata } from './atoms/image/types';\n\n/**\n * Possible states for an interactive component.\n */\nexport type ComponentState = 'ENABLED' | 'DISABLED' | 'WORKING' | 'ERROR';\nconst ENABLED: ComponentState = 'ENABLED';\nconst DISABLED: ComponentState = 'DISABLED';\nconst WORKING: ComponentState = 'WORKING';\nconst ERROR: ComponentState = 'ERROR';\n\n/**\n * Object containing all possible component states.\n */\nexport const ComponentStates = { ENABLED, DISABLED, WORKING, ERROR };\n\n/**\n * Types of actions that a button or link can perform.\n */\nexport enum ActionType {\n BROWSER_NEW_TAB, // Open in a new browser tab\n BROWSER_DOWNLOAD, // Download via browser\n NATIVE_DOWNLOAD, // Download using native capabilities\n APP_NAVIGATION, // Internal app navigation\n BROWSER_NAVIGATION, // Navigation in the browser\n}\n\n/**\n * Represents an executable action for a button or link.\n */\nexport type Action = {\n /** Action description */\n description: string;\n /** Action type */\n type: ActionType;\n /** Action source or destination */\n source: string;\n};\n\n/**\n * Supported input types for forms.\n */\nexport enum InputType {\n TEXT,\n EMAIL,\n PASSWORD,\n COMMENT,\n NUMBER,\n NUMBER_FROM_TO,\n PIN_CODE,\n DATE,\n HOUR,\n CHECK,\n RADIO,\n SELECT,\n SEARCH_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_SIMPLE,\n FILE,\n}\n\n/**\n * Option for select, radio, etc. inputs.\n */\nexport type InputOption = {\n /** Unique option identifier */\n id: string;\n /** Display name */\n name: string;\n /** Whether the option is selected by default */\n selected?: boolean;\n /** Display order */\n order: number;\n};\n\n/**\n * Metadata for a form field.\n */\nexport type InputMetadata = {\n /** Associated form control */\n control: FormControl;\n /** From control (only for NUMBER_FROM_TO type) */\n fromControl?: FormControl;\n /** To control (only for NUMBER_FROM_TO type) */\n toControl?: FormControl;\n /** Unique token for the input */\n token: string;\n /** Display label */\n label: string;\n /** Field name */\n name: string;\n /** Help text */\n hint: string;\n /** Input placeholder */\n placeholder: string;\n /** Input type */\n type: InputType;\n /** Display order */\n order: number;\n /** Associated validators */\n validators: ValidatorFn[];\n /** Options (for select, radio, etc.) */\n options?: InputOption[];\n /** Allowed range (for number, date, etc.) */\n range?: {\n min: number;\n max: number;\n };\n /** Custom error messages */\n errors: {\n [key: string]: string;\n };\n /** Initial value for the field */\n value?: string;\n /** Default value configuration - string for custom defaults, true for auto defaults */\n withDefault?: string | boolean;\n /** Field state */\n state: ComponentState;\n /** Label for \"from\" field (only for NUMBER_FROM_TO type) */\n fromLabel?: string;\n /** Label for \"to\" field (only for NUMBER_FROM_TO type) */\n toLabel?: string;\n /** Placeholder for \"from\" field (only for NUMBER_FROM_TO type) */\n fromPlaceholder?: string;\n /** Placeholder for \"to\" field (only for NUMBER_FROM_TO type) */\n toPlaceholder?: string;\n};\n\n/**\n * A section in a form, grouping multiple fields.\n */\nexport type FormSection = {\n /** Section name */\n name: string;\n /** Display order */\n order: number;\n /** Fields included in the section */\n fields: InputMetadata[];\n};\n\n/**\n * Data sent when submitting a form.\n */\nexport type FormSubmit = {\n /** List of fields and their values */\n fields: { key: string; value: string }[];\n /** Optional token for the operation */\n token?: string;\n};\n\n/**\n * Metadata for a complete form.\n */\nexport type FormMetadata = {\n /** Form name */\n name: string;\n /** Form sections */\n sections: FormSection[];\n /** Action buttons configuration */\n actions: ButtonMetadata;\n /** Global form state */\n state: ComponentState;\n};\n\n/**\n * Possible action types for a toolbar.\n */\nexport enum ToolbarActionType {\n AVATAR = 'AVATAR',\n ICON = 'ICON',\n IMAGE = 'IMAGE',\n BUTTON = 'BUTTON',\n}\n\n/**\n * Toolbar action definition.\n */\nexport type ToolbarAction = {\n /** Action type */\n type: 'AVATAR' | 'ICON' | 'IMAGE' | 'BUTTON';\n /** Optional token identifier */\n token?: string;\n /** Toolbar position */\n position: 'left' | 'right' | 'center';\n /** Optional description */\n description?: string;\n /** Associated image (if any) */\n image?: ImageMetadata;\n};\n\n/**\n * Metadata for an icon.\n */\nexport interface IconMetada {\n /** Icon name */\n name: string;\n /** Icon slot position */\n slot: 'start' | 'end';\n}\n\n/**\n * Button configuration object.\n * Supports both static and reactive content.\n * @type {ButtonMetadata}\n * @property text - Static button label (takes precedence over textConfig).\n * @property textConfig - Reactive content configuration for button text.\n * @property color - The button color (Ionic color string).\n * @property icon - Icon to display (optional).\n * @property state - Button state (enabled, disabled, working, etc.).\n * @property expand, fill, size, shape, href, target, download, handler, etc. - See ButtonMetadata for all options.\n */\nexport interface ButtonMetadata {\n /** Associated action type */\n actionType?: ActionType;\n /** Button expansion */\n expand?: 'full' | 'block';\n /** Associated link */\n link?: string;\n /** Associated href link */\n href?: string;\n /** Link target */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** Download file name */\n download?: string;\n /** Button color */\n color: Color;\n /** Button state */\n state: ComponentState;\n /** Static display text (takes precedence over reactive content) */\n text?: string;\n /** Reactive content configuration for button text */\n contentKey?: string;\n /** Component class name for content lookup (required with contentKey) */\n contentClass?: string;\n /** Fallback text if contentKey is not found */\n contentFallback?: string;\n /** Values to interpolate into the content string */\n contentInterpolation?: Record<string, string | number>;\n /** Associated icon */\n icon?: IconMetada;\n /** Button shape */\n shape?: 'round';\n /** Button size */\n size?: 'small' | 'default' | 'large';\n /** Button fill */\n fill?: 'clear' | 'outline' | 'solid' | 'default';\n /** Button type */\n type: 'button' | 'submit' | 'reset';\n /** Optional token identifier */\n token?: string;\n /** Optional reference */\n ref?: any;\n /** Action handler */\n handler?: (value: any) => any | Promise<any>;\n}\n\n/**\n * Configuration for reactive content in val-button component.\n * Use this interface when you only need to specify content-related properties.\n * This follows the same pattern as TextContentConfig for consistency.\n */\nexport interface ButtonContentConfig {\n contentKey: string;\n contentClass: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n}\n\n","/**\n * Service for downloading files and opening links in new tabs.\n * Provides utility methods for browser-based file downloads and extracting file names from URLs.\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DownloadService {\n /**\n * Extracts the file name from a given URL.\n * @param url The file URL\n * @returns The file name\n */\n getFileNameFromUrl(url: string): string {\n try {\n const pathSegments = url.split('/');\n const lastSegment = pathSegments[pathSegments.length - 1];\n const fileName = decodeURIComponent(lastSegment);\n return fileName;\n } catch (error) {\n console.error('Error al obtener nombre de archivo: ', JSON.stringify(error));\n return 'filename';\n }\n }\n\n /**\n * Opens a given URL in a new browser tab and triggers download if possible.\n * @param url The file URL\n */\n openNewTab(url: string): void {\n if (url) {\n const fileName = this.getFileNameFromUrl(url);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('La URL no está definida');\n }\n }\n\n /**\n * Downloads a file from the browser using fetch and triggers a download dialog.\n * @param url The file URL\n */\n downloadLinkFromBrowser(url: string): void {\n console.log('trying to download file from url');\n if (url) {\n fetch(url)\n .then(response => response.blob())\n .then(blob => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n\n const fileName = this.getFileNameFromUrl(url);\n link.download = `${+new Date()}-${fileName}`;\n link.target = '_self';\n link.click();\n\n window.URL.revokeObjectURL(url);\n })\n .catch(error => {\n console.error('Error al descargar el archivo:', JSON.stringify(error));\n });\n } else {\n console.error('La URL no está definida');\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for opening URLs using Capacitor's InAppBrowser plugin.\n * Provides a method to open links in a popover-style browser within the app.\n */\nimport { Injectable } from '@angular/core';\nimport { Browser, OpenOptions } from '@capacitor/browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InAppBrowserService {\n /**\n * Default options for the in-app browser.\n */\n options: OpenOptions = {\n presentationStyle: 'popover',\n url: '',\n };\n constructor() {}\n\n /**\n * Opens a URL using Capacitor's InAppBrowser with the configured options.\n * @param url The URL to open\n */\n async openWithInAppBrowser(url: string) {\n await Browser.open({ ...this.options, url });\n }\n}\n","import { Location } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { InAppBrowserService } from './in-app-browser.service';\n\n/**\n * Service for navigation and routing within the application.\n * Supports navigation with data transfer, in-app browser, and opening links in new tabs.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n /**\n * Arbitrary data to be transferred during navigation.\n */\n data: any;\n router = inject(Router);\n location = inject(Location);\n inAppBrowser = inject(InAppBrowserService);\n\n constructor() {}\n\n /**\n * Opens a URL using the in-app browser service.\n * @param url The URL to open\n */\n navigateInApp(url: string) {\n this.inAppBrowser.openWithInAppBrowser(url);\n }\n\n /**\n * Navigates to a route and transfers data using Angular Router state.\n * @param route The route to navigate to\n * @param dataTransfer The data to transfer\n */\n navigateWithData(route: string, dataTransfer: any) {\n const navigationExtras: NavigationExtras = {\n state: {\n data: dataTransfer,\n },\n };\n\n this.router.navigate([route], navigationExtras);\n }\n\n /**\n * Navigates to a URL using Angular Router.\n * @param url The URL to navigate to\n */\n navigateByUrl(url: string) {\n this.router\n .navigateByUrl(url)\n .then(response => {})\n .catch(error => {});\n }\n\n /**\n * Opens a URL in a new browser tab.\n * @param url The URL to open\n */\n openInNewTab(url: string): void {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n /**\n * Navigates back to the previous page in the browser history.\n */\n back(): void {\n this.location.back();\n }\n}\n","export const LANG = 'LANG';\nexport const THEME = 'THEME';\n","/**\n * Utility service for interacting with browser localStorage in a type-safe way.\n * Provides static methods for setting, getting, removing, and clearing items.\n */\nexport class LocalStorageService {\n /**\n * Stores a value in localStorage under the given reference key.\n * @param reference The key to store the value under\n * @param value The value to store\n */\n static set<T>(reference: string, value: T): void {\n localStorage.setItem(reference, JSON.stringify(value));\n }\n\n /**\n * Retrieves a value from localStorage by key.\n * @param reference The key to retrieve\n * @returns The parsed value\n */\n static get<T>(reference: string): T {\n const value = localStorage.getItem(reference);\n return JSON.parse(value) as T;\n }\n\n /**\n * Removes an item from localStorage by key.\n * @param reference The key to remove\n */\n static remove(reference: string): void {\n localStorage.removeItem(reference);\n }\n\n /**\n * Clears all items from localStorage.\n */\n static clear() {\n localStorage.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Provider } from './lang-provider/content';\n\nexport interface ValtechConfig {\n content: Provider;\n}\n\nexport const ValtechConfigService = new InjectionToken<ValtechConfig>('ValtechConfig');\n","export type LanguageText = {\n [key: string]: string;\n};\n\nexport type LanguagesContent = {\n [key: string]: LanguageText;\n};\n\nexport class TextContent {\n text: LanguagesContent;\n constructor(text: LanguagesContent) {\n this.text = text;\n }\n\n get Content(): LanguagesContent {\n return this.text;\n }\n}\n\n/**\n * Language code type - supports any valid language code string.\n * Common examples: 'es', 'en', 'fr', 'de', 'pt', 'it', 'zh', 'ja', etc.\n */\nexport type LangOption = string;\n\n/**\n * Common language constants for convenience.\n * Users can still use any language code string directly.\n */\nexport const LANGUAGES = {\n ES: 'es' as const,\n EN: 'en' as const,\n FR: 'fr' as const,\n DE: 'de' as const,\n PT: 'pt' as const,\n IT: 'it' as const,\n ZH: 'zh' as const,\n JA: 'ja' as const,\n} as const;\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { LANG } from '../../shared/constants/storage';\nimport { LocalStorageService } from '../local-storage.service';\nimport { ValtechConfig, ValtechConfigService } from '../types';\nimport { Provider } from './content';\nimport { LANGUAGES, LangOption, LanguageText, LanguagesContent, TextContent } from './types';\n\n/**\n * LangService - Reactive language and content management service.\n *\n * This service provides reactive content management with Observable-based language switching.\n * Components can subscribe to content changes and automatically update when the language changes.\n *\n * The service automatically detects available languages from the content configuration\n * and provides intelligent fallbacks with console warnings for missing translations.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private langService: LangService) {}\n *\n * // Get current language\n * const currentLang = this.langService.currentLang;\n *\n * // Subscribe to language changes\n * this.langService.currentLang$.subscribe(lang => console.log('Language changed:', lang));\n *\n * // Get static text\n * const text = this.langService.getText('ComponentName', 'textKey');\n *\n * // Get reactive text\n * const text$ = this.langService.getContent('ComponentName', 'textKey');\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LangService {\n private content: Provider;\n private defaultLang: LangOption;\n private availableLanguages: LangOption[] = [];\n private selectedLang: BehaviorSubject<LangOption>;\n private config: ValtechConfig;\n private warnedMissingLanguages = new Set<string>();\n\n constructor(@Inject(ValtechConfigService) config: ValtechConfig) {\n console.log('LangService: Injected config:', config);\n this.content = config.content;\n this.config = config;\n\n // Detect available languages from content\n this.detectAvailableLanguages();\n\n // Set default language (prefer Spanish, then English, then first available)\n this.defaultLang = this.determineDefaultLanguage();\n\n // Initialize with stored language or default\n const current = LocalStorageService.get<LangOption>(LANG);\n const initialLang = this.validateLanguage(current) || this.defaultLang;\n\n this.selectedLang = new BehaviorSubject<LangOption>(initialLang);\n\n console.log('LangService: Initialized with languages:', {\n available: this.availableLanguages,\n default: this.defaultLang,\n current: initialLang,\n });\n }\n\n /**\n * Detect available languages from the content configuration.\n * Scans all component content to find which languages are actually configured.\n */\n private detectAvailableLanguages(): void {\n const languageSet = new Set<LangOption>();\n\n Object.values(this.content).forEach(componentContent => {\n if (componentContent?.Content) {\n Object.keys(componentContent.Content).forEach(lang => {\n languageSet.add(lang);\n });\n }\n });\n\n this.availableLanguages = Array.from(languageSet).sort();\n\n if (this.availableLanguages.length === 0) {\n console.warn('LangService: No languages detected in content configuration!');\n this.availableLanguages = [LANGUAGES.ES]; // Fallback\n }\n }\n\n /**\n * Determine the best default language based on available content.\n */\n private determineDefaultLanguage(): LangOption {\n // Preference order: Spanish, English, then first available\n const preferredOrder = [LANGUAGES.ES, LANGUAGES.EN];\n\n for (const preferred of preferredOrder) {\n if (this.availableLanguages.includes(preferred)) {\n return preferred;\n }\n }\n\n return this.availableLanguages[0];\n }\n\n /**\n * Validate if a language is available in the content.\n */\n private validateLanguage(lang: LangOption | null): LangOption | null {\n if (!lang) return null;\n return this.availableLanguages.includes(lang) ? lang : null;\n }\n\n /**\n * Get the best available language for a component and key.\n * Provides intelligent fallback with warnings.\n */\n private getBestAvailableContent(\n className: string,\n key: string,\n requestedLang: LangOption\n ): {\n content: string | undefined;\n actualLang: LangOption;\n shouldWarn: boolean;\n } {\n const componentContent = this.content[className];\n\n if (!componentContent) {\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Try requested language first\n const requestedContent = componentContent.Content[requestedLang];\n if (requestedContent?.[key]) {\n return {\n content: requestedContent[key],\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Language not available, try fallbacks\n const warningKey = `${className}.${key}.${requestedLang}`;\n const shouldWarn = !this.warnedMissingLanguages.has(warningKey);\n\n if (shouldWarn) {\n this.warnedMissingLanguages.add(warningKey);\n }\n\n // Try default language\n if (requestedLang !== this.defaultLang) {\n const defaultContent = componentContent.Content[this.defaultLang];\n if (defaultContent?.[key]) {\n return {\n content: defaultContent[key],\n actualLang: this.defaultLang,\n shouldWarn,\n };\n }\n }\n\n // Try first available language\n for (const availableLang of this.availableLanguages) {\n const availableContent = componentContent.Content[availableLang];\n if (availableContent?.[key]) {\n return {\n content: availableContent[key],\n actualLang: availableLang,\n shouldWarn,\n };\n }\n }\n\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn,\n };\n }\n\n /**\n * Observable that emits the current language whenever it changes.\n * Use this to subscribe to language changes in components.\n */\n get currentLang$(): Observable<LangOption> {\n return this.selectedLang.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1) // Ensure new subscribers get the current value\n );\n }\n\n /**\n * Get the current language synchronously.\n */\n get currentLang(): LangOption {\n return this.selectedLang.value;\n }\n\n /**\n * Get array of available languages detected from content.\n */\n get availableLangs(): LangOption[] {\n return [...this.availableLanguages];\n }\n\n /**\n * Get the default language.\n */\n get defaultLanguage(): LangOption {\n return this.defaultLang;\n }\n\n /**\n * Set the current language and persist it to localStorage.\n * This will trigger updates in all reactive content subscriptions.\n *\n * Validates that the language is available and warns if not.\n *\n * @param lang - The language to set\n */\n setLang(lang: LangOption): void {\n if (!this.availableLanguages.includes(lang)) {\n console.warn(\n `LangService: Language \"${lang}\" is not available. Available languages:`,\n this.availableLanguages\n );\n console.warn(`LangService: Falling back to default language \"${this.defaultLang}\"`);\n lang = this.defaultLang;\n }\n\n this.selectedLang.next(lang);\n LocalStorageService.set<LangOption>(LANG, lang);\n }\n\n /**\n * Get content for a component class and key (legacy method).\n *\n * @deprecated Use getText() or getContent() for better type safety\n */\n Text(className: string): LanguageText {\n const componentContent = this.content[className];\n return componentContent?.Content[this.selectedLang.value] || {};\n }\n\n /**\n * Get a single content string synchronously for the current language.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns The text string or fallback\n */\n getText(className: string, key: string, fallback?: string): string {\n const result = this.getBestAvailableContent(className, key, this.selectedLang.value);\n\n if (result.shouldWarn && result.actualLang !== this.selectedLang.value) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${this.selectedLang.value}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }\n\n /**\n * Get a reactive Observable for a specific text key that updates when language changes.\n * This is the recommended method for components that need reactive content.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits the text string whenever language changes\n */\n getContent(className: string, key: string, fallback?: string): Observable<string> {\n return this.currentLang$.pipe(\n map(lang => {\n const result = this.getBestAvailableContent(className, key, lang);\n\n if (result.shouldWarn && result.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }),\n distinctUntilChanged()\n );\n }\n\n /**\n * Get reactive content for multiple keys at once.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param keys - Array of text keys to retrieve\n * @returns Observable that emits an object with all requested keys\n */\n getMultipleContent(className: string, keys: string[]): Observable<Record<string, string>> {\n return this.currentLang$.pipe(\n map(lang => {\n const result: Record<string, string> = {};\n\n keys.forEach(key => {\n const contentResult = this.getBestAvailableContent(className, key, lang);\n\n if (contentResult.shouldWarn && contentResult.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${contentResult.actualLang}\" instead.`\n );\n }\n\n result[key] = contentResult.content || `[${className}.${key}]`;\n });\n\n return result;\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n /**\n * Check if a content key exists for a component in any available language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @returns True if the key exists in any language\n */\n hasContent(className: string, key: string): boolean {\n const classContent = this.content[className];\n if (!classContent) return false;\n\n return Object.values(classContent.Content).some(\n langContent => langContent && typeof langContent[key] === 'string'\n );\n }\n\n /**\n * Check if a content key exists for a component in a specific language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param lang - The language to check (defaults to current language)\n * @returns True if the key exists in the specified language\n */\n hasContentInLanguage(className: string, key: string, lang?: LangOption): boolean {\n const targetLang = lang || this.currentLang;\n const classContent = this.content[className]?.Content[targetLang];\n return classContent && typeof classContent[key] === 'string';\n }\n\n /**\n * Get available languages for a specific component.\n *\n * @param className - The component class name\n * @returns Array of language codes available for the component\n */\n getAvailableLanguagesForComponent(className: string): LangOption[] {\n const classContent = this.content[className];\n if (!classContent) return [];\n\n return Object.keys(classContent.Content).filter(\n lang => classContent.Content[lang] && Object.keys(classContent.Content[lang]).length > 0\n );\n }\n\n /**\n * Get missing content keys for a component in a specific language.\n * Useful for identifying incomplete translations.\n *\n * @param className - The component class name\n * @param lang - The language to check\n * @param referenceLang - The reference language to compare against (defaults to default language)\n * @returns Array of missing keys\n */\n getMissingContentKeys(className: string, lang: LangOption, referenceLang?: LangOption): string[] {\n const refLang = referenceLang || this.defaultLang;\n const classContent = this.content[className];\n\n if (!classContent) return [];\n\n const referenceContent = classContent.Content[refLang] || {};\n const targetContent = classContent.Content[lang] || {};\n\n return Object.keys(referenceContent).filter(\n key => !targetContent[key] || typeof targetContent[key] !== 'string'\n );\n }\n\n /**\n * Register or update content for a component dynamically.\n * This allows registering content at runtime without APP_INITIALIZER.\n *\n * @param className - The component class name\n * @param content - The multilingual content object\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerContent('MyComponent', {\n * [LANGUAGES.ES]: { title: 'Título', description: 'Descripción' },\n * [LANGUAGES.EN]: { title: 'Title', description: 'Description' }\n * });\n * ```\n */\n registerContent(className: string, content: LanguagesContent, merge: boolean = true): void {\n if (!className) {\n console.error('LangService: className is required for registerContent');\n return;\n }\n\n if (!content || typeof content !== 'object') {\n console.error('LangService: Invalid content provided for registerContent');\n return;\n }\n\n console.log(`LangService: Registering content for \"${className}\"`, {\n merge,\n languages: Object.keys(content),\n });\n\n // Initialize component content if it doesn't exist\n if (!this.content[className]) {\n this.content[className] = new TextContent({});\n }\n\n // Merge or replace content for each language\n Object.entries(content).forEach(([lang, langContent]) => {\n if (!langContent || typeof langContent !== 'object') {\n console.warn(`LangService: Invalid content for language \"${lang}\" in \"${className}\"`);\n return;\n }\n\n if (!this.content[className].Content[lang]) {\n this.content[className].Content[lang] = {};\n }\n\n if (merge) {\n this.content[className].Content[lang] = {\n ...this.content[className].Content[lang],\n ...langContent,\n };\n } else {\n this.content[className].Content[lang] = { ...langContent };\n }\n });\n\n // Update available languages\n this.detectAvailableLanguages();\n\n console.log(`LangService: Content registered successfully for \"${className}\"`);\n }\n\n /**\n * Update multiple content registrations at once.\n *\n * @param contentMap - Map of className to content\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerMultipleContent({\n * 'Component1': { [LANGUAGES.ES]: { key1: 'valor1' } },\n * 'Component2': { [LANGUAGES.EN]: { key2: 'value2' } }\n * });\n * ```\n */\n registerMultipleContent(\n contentMap: Record<string, LanguagesContent>,\n merge: boolean = true\n ): void {\n if (!contentMap || typeof contentMap !== 'object') {\n console.error('LangService: Invalid contentMap provided for registerMultipleContent');\n return;\n }\n\n console.log('LangService: Registering multiple content entries', {\n classes: Object.keys(contentMap),\n merge,\n });\n\n Object.entries(contentMap).forEach(([className, content]) => {\n this.registerContent(className, content, merge);\n });\n\n console.log('LangService: Multiple content registration completed');\n }\n\n /**\n * Remove content for a specific component.\n *\n * @param className - The component class name to remove\n */\n removeContent(className: string): void {\n if (!className) {\n console.error('LangService: className is required for removeContent');\n return;\n }\n\n if (this.content[className]) {\n delete this.content[className];\n this.detectAvailableLanguages();\n console.log(`LangService: Content removed for \"${className}\"`);\n } else {\n console.warn(`LangService: No content found for \"${className}\" to remove`);\n }\n }\n\n /**\n * Get a list of all registered component classes.\n *\n * @returns Array of registered class names\n */\n getRegisteredClasses(): string[] {\n return Object.keys(this.content);\n }\n\n /**\n * Get the complete content configuration (for debugging purposes).\n * Returns a deep copy to prevent accidental mutations.\n *\n * @returns Complete content configuration\n */\n getContentConfiguration(): Provider {\n return JSON.parse(JSON.stringify(this.content));\n }\n\n /**\n * Clear all content and reset to initial state.\n * Useful for testing or complete reinitialization.\n */\n clearAllContent(): void {\n console.log('LangService: Clearing all content');\n this.content = {};\n this.availableLanguages = [LANGUAGES.ES]; // Reset to default\n this.warnedMissingLanguages.clear();\n console.log('LangService: All content cleared');\n }\n\n /**\n * Get content with interpolation support.\n * Retrieves content and replaces placeholders with provided values.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Text with interpolated values\n */\n getTextWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): string {\n const content = this.getText(className, key, fallback);\n return this.interpolateString(content, interpolationData);\n }\n\n /**\n * Get reactive content with interpolation support.\n * Returns an Observable that emits interpolated content when language changes.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n */\n getContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContent(className, key, fallback).pipe(\n map(content => this.interpolateString(content, interpolationData))\n );\n }\n\n /**\n * Interpolate a string with provided values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateString('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\n private interpolateString(content: string, values?: Record<string, string | number>): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n }\n\n /**\n * Legacy function equivalent to the old fromContentWithInterpolation.\n * Provides reactive content with interpolation support for backward compatibility.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n *\n * @deprecated Use getContentWithInterpolation instead\n */\n fromContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContentWithInterpolation(className, key, interpolationData, fallback);\n }\n\n // Legacy getters/setters for backward compatibility\n get Lang(): LangOption {\n return this.currentLang;\n }\n\n set Lang(lang: LangOption) {\n this.setLang(lang);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { Observable, Subscription, of } from 'rxjs';\nimport { DownloadService } from '../../../services/download.service';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { interpolateStaticContent } from '../../../shared/utils/simple-content';\nimport { ActionType, ButtonContentConfig, ButtonMetadata, ComponentStates } from '../../types';\n\n@Component({\n selector: 'val-button',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSpinner, IonText],\n template: `\n <ion-button\n [type]=\"props.type\"\n [color]=\"props.color\"\n [expand]=\"props.expand\"\n [fill]=\"props.fill\"\n [size]=\"props.size\"\n [href]=\"props.href\"\n [target]=\"props.target\"\n [shape]=\"props.shape\"\n (click)=\"clickHandler()\"\n [disabled]=\"props.state === states.DISABLED\"\n [ngClass]=\"[props.size]\"\n >\n <ion-icon *ngIf=\"props.icon\" [slot]=\"props.icon.slot\" [name]=\"props.icon.name\"></ion-icon>\n <ion-spinner *ngIf=\"props.state === states.WORKING\" name=\"circular\"></ion-spinner>\n <ion-text *ngIf=\"props.state !== states.WORKING\">{{ displayText$ | async }}</ion-text>\n </ion-button>\n `,\n styleUrls: ['./button.component.scss'],\n})\n/**\n * val-button\n *\n * A customizable button supporting icons, loading state, navigation, and reactive content.\n * Supports both static text and reactive content from the content service.\n * Follows the same content pattern as val-text for consistency.\n *\n * @example Static text:\n * <val-button [props]=\"{\n * text: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content:\n * <val-button [props]=\"{\n * contentKey: 'save',\n * contentClass: 'MyComponent',\n * contentFallback: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content with interpolation:\n * <val-button [props]=\"{\n * contentKey: 'saveCount',\n * contentClass: 'MyComponent',\n * contentInterpolation: { count: 5 },\n * contentFallback: 'Save Items',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED'\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @input props: ButtonMetadata - Configuration for the button (text/content, color, icon, state, etc.)\n * @output onClick - Emits when the button is clicked\n */\nexport class ButtonComponent implements OnInit, OnDestroy {\n states = ComponentStates;\n\n /**\n * Observable that provides the text content to display.\n * This will be either static text or reactive content from the language service.\n */\n displayText$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n @Input()\n props!: ButtonMetadata;\n\n /**\n * Event emitted when the button is clicked.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(\n private download: DownloadService,\n icon: IconService,\n private navigation: NavigationService,\n private langService: LangService\n ) {}\n\n ngOnInit() {\n this.setupDisplayText();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n /**\n * Set up the text content observable based on the props configuration.\n * Priority: static text > reactive content with interpolation > reactive content\n * This follows the same pattern as val-text component.\n */\n private setupDisplayText(): void {\n if (this.props.text) {\n // Static text takes precedence\n if (this.props.contentInterpolation) {\n // Static text with interpolation\n const interpolatedText = interpolateStaticContent(this.props.text, this.props.contentInterpolation);\n this.displayText$ = of(interpolatedText);\n } else {\n // Simple static text\n this.displayText$ = of(this.props.text);\n }\n } else if (this.props.contentKey && this.props.contentClass) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayText$ = this.langService.getContentWithInterpolation(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayText$ = this.langService.getContent(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-button: No valid content configuration provided. Use either \"text\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayText$ = of(this.props.contentFallback || '');\n }\n }\n\n clickHandler() {\n if (this.props.state === this.states.DISABLED) {\n return;\n }\n\n if (this.props.actionType === ActionType.APP_NAVIGATION) {\n this.navigation.navigateByUrl(this.props.link);\n }\n\n if (this.props.download) {\n this.download.downloadLinkFromBrowser(this.props.download);\n }\n\n if (this.props.handler) {\n this.props.handler(this.props.ref);\n }\n\n this.onClick.emit(this.props.token);\n }\n}\n\n/**\n * Helper function to create reactive button props from content configuration.\n * This provides a convenient way to create val-button props with reactive content.\n * Follows the same pattern as createTextProps for consistency.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style and behavior configuration\n * @returns ButtonMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * saveButtonProps: ButtonMetadata = createButtonProps({\n * contentKey: 'save',\n * contentClass: 'MyComponent'\n * }, {\n * color: 'primary',\n * icon: { name: 'save', slot: 'start' }\n * });\n * ```\n */\nexport function createButtonProps(\n contentConfig: ButtonContentConfig,\n styleConfig: Partial<\n Pick<ButtonMetadata, 'color' | 'type' | 'state' | 'size' | 'fill' | 'icon' | 'expand' | 'shape' | 'handler'>\n > = {}\n): ButtonMetadata {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'primary',\n type: styleConfig.type || 'button',\n state: styleConfig.state || ComponentStates.ENABLED,\n size: styleConfig.size,\n fill: styleConfig.fill,\n icon: styleConfig.icon,\n expand: styleConfig.expand,\n shape: styleConfig.shape,\n handler: styleConfig.handler,\n };\n}\n","import { ButtonMetadata, IconMetada } from '../../types';\n\nexport const Icon = (name: string, slot: 'start' | 'end'): IconMetada => {\n return {\n name,\n slot,\n };\n};\n\n/* name convention: COLOR FILL SIZE [optionals: SHAPE EXPAND ICON HREF/DOWNLOAD] TYPE */\n\nexport const BaseDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return {\n color: 'primary',\n state: 'ENABLED',\n text,\n size: 'default',\n type,\n };\n};\n\nexport const ClearDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'clear' };\n};\n\nexport const ClearDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), shape: 'round' };\n};\n\nexport const SolidDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'solid' };\n};\n\nexport const SolidDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), shape: 'round' };\n};\n\nexport const OutlineDefault = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'outline' };\n};\n\nexport const OutlineDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), shape: 'round' };\n};\n\nexport const ClearDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'block' };\n};\n\nexport const ClearDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultButton = (text: string): ButtonMetadata => {\n return SolidDefault(text, 'button');\n};\n\nexport const SolidSmallButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'large' };\n};\n\nexport const SolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return SolidDefaultRound(text, 'button');\n};\n\nexport const SolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'large' };\n};\n\nexport const SolidFullButton = (text: string): ButtonMetadata => {\n return SolidDefaultFull(text, 'button');\n};\n\nexport const SolidBlockButton = (text: string): ButtonMetadata => {\n return SolidDefaultBlock(text, 'button');\n};\n\n/** PRIMARY */\n\nexport const PrimarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), icon };\n};\n\nexport const PrimarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const PrimarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), icon };\n};\n\nexport const PrimarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), href, target };\n};\n\nexport const PrimarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), icon };\n};\n\nexport const PrimarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), href, target };\n};\n\nexport const PrimarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), icon };\n};\n\nexport const PrimarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), href, target };\n};\n\nexport const PrimarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), icon };\n};\n\nexport const PrimarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), href, target };\n};\n\nexport const PrimarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullIconButton(text, icon), href, target };\n};\n\n/** SECONDARY */\n\nexport const SecondarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), icon };\n};\n\nexport const SecondarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const SecondarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), icon };\n};\n\nexport const SecondarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), href, target };\n};\n\nexport const SecondarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), icon };\n};\n\nexport const SecondarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), href, target };\n};\n\nexport const SecondarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), icon };\n};\n\nexport const SecondarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), href, target };\n};\n\nexport const SecondarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), icon };\n};\n\nexport const SecondarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), href, target };\n};\n\nexport const SecondarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockIconButton(text, icon), href, target };\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { DisplayContentConfig, DisplayMetadata } from './types';\n\n@Component({\n selector: 'val-display',\n standalone: true,\n imports: [CommonModule, IonText],\n template: `\n <ion-text [color]=\"props.color\">\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </ion-text>\n `,\n styleUrls: ['./display.component.scss'],\n})\n/**\n * val-display\n *\n * Displays prominent text or titles with custom color and size.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Static content\n * <val-display [props]=\"{ content: 'Title', color: 'dark', size: 'large' }\"></val-display>\n *\n * // Reactive content\n * <val-display [props]=\"{ contentConfig: { key: 'welcome.title' }, color: 'primary', size: 'xlarge' }\"></val-display>\n *\n * @input props: DisplayMetadata - Configuration for the display (content/contentConfig, color, size)\n */\nexport class DisplayComponent implements OnInit, OnChanges, OnDestroy {\n displayContent$: Observable<string>;\n private subscriptions = new Subscription();\n\n /**\n * Display configuration object.\n * @type {DisplayMetadata}\n * @property content - Static text to display (takes precedence over contentConfig).\n * @property contentConfig - Reactive content configuration.\n * @property color - The text color (Ionic color string).\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: DisplayMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {}\n\n ngOnInit() {\n this.initializeDisplayContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.initializeDisplayContent();\n this.cdr.detectChanges();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeDisplayContent() {\n // Static content takes precedence\n if (this.props.content !== undefined) {\n this.displayContent$ = of(this.props.content);\n return;\n }\n\n // Use reactive content if configured\n if (this.props.contentConfig) {\n this.displayContent$ = this.langService.getContent(\n this.props.contentConfig.className || '_global',\n this.props.contentConfig.key,\n this.props.contentConfig.fallback || this.props.contentConfig.key\n // interpolation: this.props.contentConfig.interpolation,\n );\n return;\n }\n\n // No content configured - use empty string\n this.displayContent$ = of('');\n }\n}\n\n/**\n * Helper function to create reactive display props from content configuration.\n * This provides a convenient way to create val-display props with reactive content.\n *\n * @param contentConfig - Content configuration for reactive content\n * @param styleConfig - Optional style configuration (color and size)\n * @returns DisplayMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: DisplayMetadata = createDisplayProps({\n * key: 'title',\n * className: 'HeaderComponent',\n * fallback: 'Default Title'\n * }, {\n * color: 'primary',\n * size: 'large'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With interpolation\n * greetingProps: DisplayMetadata = createDisplayProps({\n * key: 'greeting',\n * className: 'UserComponent',\n * fallback: 'Hello!',\n * interpolation: { name: 'John', count: 5 }\n * }, {\n * color: 'secondary',\n * size: 'medium'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Using default style values\n * simpleProps: DisplayMetadata = createDisplayProps({\n * key: 'welcomeMessage',\n * className: 'HomeComponent'\n * }); // Will use default color: 'dark' and size: 'medium'\n * ```\n */\nexport function createDisplayProps(\n contentConfig: DisplayContentConfig,\n styleConfig: Partial<Pick<DisplayMetadata, 'color' | 'size'>> = {}\n): DisplayMetadata {\n return {\n contentConfig: {\n key: contentConfig.key,\n className: contentConfig.className,\n fallback: contentConfig.fallback,\n interpolation: contentConfig.interpolation,\n },\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { DividerMetadata } from './types';\n\n/**\n * val-divider\n *\n * A horizontal divider for separating content sections.\n *\n * @example\n * <val-divider [props]=\"{ size: 'medium', color: 'light', fill: 'solid' }\"></val-divider>\n *\n * @input props: DividerMetadata - Configuration for the divider (size, color, fill)\n */\n@Component({\n selector: 'val-divider',\n standalone: true,\n imports: [CommonModule],\n template: ` <div [ngClass]=\"['divider', props.size, props.color, props.fill]\"></div> `,\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent implements OnInit {\n /**\n * Divider configuration object.\n * @type {DividerMetadata}\n * @property size - The divider size ('small' | 'medium' | 'large').\n * @property color - The divider color.\n * @property fill - The divider fill style ('solid' | 'gradient').\n */\n @Input()\n props: DividerMetadata;\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DownloadService } from '../../../services/download.service';\nimport { HrefMetadata } from './types';\n\n@Component({\n selector: 'val-href',\n standalone: true,\n imports: [CommonModule],\n template: `\n <a\n [ngClass]=\"[props.color]\"\n [class.hoverable]=\"props.hoverable\"\n [href]=\"props.url\"\n target=\"_blank\"\n (click)=\"onClickHandler($event)\"\n >{{ props.text }}</a\n >\n `,\n styleUrls: ['./href.component.scss'],\n})\n/**\n * val-href\n *\n * A styled anchor/link element, supporting download and click events.\n *\n * @example\n * <val-href [props]=\"{ url: 'https://...', text: 'Open', color: 'primary', download: true }\" (onClick)=\"handler()\"></val-href>\n *\n * @input props: HrefMetadata - Configuration for the link (url, text, color, download, etc.)\n * @output onClick - Emits when the link is clicked\n */\nexport class HrefComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {HrefMetadata}\n * @property url - The URL to open.\n * @property text - The link text.\n * @property color - The link color (Ionic color string).\n * @property download - Whether to trigger a download (optional).\n * @property hoverable - Whether the link is hoverable (optional).\n * @property token - Optional token for event identification.\n */\n @Input() props: HrefMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private downloadService: DownloadService) {}\n\n ngOnInit() {}\n\n getFileName() {\n return this.downloadService.getFileNameFromUrl(this.props.url);\n }\n\n onClickHandler(event: MouseEvent) {\n if (this.props.download && this.props.url) {\n event.preventDefault();\n this.downloadService.downloadLinkFromBrowser(this.props.url);\n }\n this.onClick.emit(this.props.token);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { IconMetadata } from './types';\n\n@Component({\n selector: 'val-icon',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: ` <ion-icon aria-hidden=\"true\" [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\" /> `,\n styleUrls: ['./icon.component.scss'],\n})\n/**\n * val-icon\n *\n * Displays an icon from the Ionicons set, with configurable size and color.\n *\n * @example\n * <val-icon [props]=\"{ name: 'star', size: 'large', color: 'warning' }\"></val-icon>\n *\n * @input props: IconMetadata - Configuration for the icon (name, color, size)\n */\nexport class IconComponent implements OnInit {\n /**\n * Icon configuration object.\n * @type {IconMetadata}\n * @property name - The icon name (Ionicons).\n * @property color - The icon color (Ionic color string).\n * @property size - The icon size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: IconMetadata;\n\n constructor(service: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject, Input, OnInit } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonModal,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ImageMetadata } from './types';\n\n@Component({\n selector: 'val-image',\n standalone: true,\n imports: [CommonModule, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonIcon, IonButtons],\n template: `\n <figure\n class=\"val-image-container\"\n [class]=\"props.containerClass\"\n [ngClass]=\"{\n 'val-image-container--left': props.alignment === 'left',\n 'val-image-container--center': props.alignment === 'center' || !props.alignment,\n 'val-image-container--right': props.alignment === 'right',\n }\"\n [ngStyle]=\"{\n display: props.flex ? 'flex' : 'inline-block',\n }\"\n >\n <div class=\"val-image-wrapper\">\n @if (props.src.includes('--')) {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [ngStyle]=\"{\n content: 'var(' + props.src + ')',\n }\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n } @else {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [src]=\"props.src\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n }\n </div>\n\n @if (props.caption) {\n <figcaption\n class=\"val-image-caption\"\n [ngClass]=\"{\n 'val-image-caption--small': props.captionSize === 'small',\n 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,\n 'val-image-caption--large': props.captionSize === 'large',\n }\"\n >\n {{ props.caption }}\n </figcaption>\n }\n </figure>\n\n <!-- Modal de previsualización con ion-modal -->\n <ion-modal [isOpen]=\"isPreviewOpen\" (didDismiss)=\"closePreview()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <!-- <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title> -->\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"closePreview()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content>\n <!-- Controles de zoom -->\n <div class=\"val-image-preview-controls\">\n <ion-button\n (click)=\"zoomOut(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel <= minZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"remove-outline\"></ion-icon>\n </ion-button>\n\n <span class=\"val-image-preview-zoom-level\">{{ Math.round(zoomLevel * 100) }}%</span>\n\n <ion-button\n (click)=\"zoomIn(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel >= maxZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"add-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Imagen ampliada -->\n <div\n class=\"val-image-preview-viewport\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (wheel)=\"onWheel($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event)\"\n >\n <img\n #previewImage\n class=\"val-image-preview-img\"\n [src]=\"props.src.includes('--') ? null : props.src\"\n [ngStyle]=\"{\n content: props.src.includes('--') ? 'var(' + props.src + ')' : null,\n transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n }\"\n [alt]=\"props.alt\"\n draggable=\"false\"\n />\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./image.component.scss'],\n})\n/**\n * val-image\n *\n * Displays an image with various display options (bordered, shaded, dark, etc).\n * Now includes a container wrapper for better flexbox support and alignment options.\n *\n * NEW: Optional preview mode with full-screen zoom capabilities:\n * - Click to open full-screen preview (when previewMode is enabled)\n * - Pinch-to-zoom on mobile devices\n * - Mouse wheel zoom on desktop\n * - Pan/drag to navigate zoomed images\n * - Zoom controls with buttons\n * - Keyboard shortcuts (Esc to close, +/- to zoom, 0 to reset)\n * - Touch-friendly interface with gesture support\n *\n * @example Basic usage:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * width: 100,\n * height: 100,\n * bordered: true,\n * alignment: 'center',\n * caption: 'Image description'\n * }\"></val-image>\n *\n * @example With preview mode:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * previewMode: true,\n * bordered: true,\n * alignment: 'center'\n * }\"></val-image>\n *\n * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, previewMode, etc.)\n */\nexport class ImageComponent implements OnInit {\n @Input()\n props!: ImageMetadata;\n\n available: boolean = true;\n\n // Preview mode properties\n isPreviewOpen: boolean = false;\n zoomLevel: number = 1;\n minZoom: number = 0.5;\n maxZoom: number = 5;\n panX: number = 0;\n panY: number = 0;\n\n // Touch and mouse interaction properties\n isDragging: boolean = false;\n lastPanX: number = 0;\n lastPanY: number = 0;\n startX: number = 0;\n startY: number = 0;\n\n // Touch gesture properties\n initialDistance: number = 0;\n initialZoom: number = 1;\n touches: Touch[] = [];\n\n // Lang service\n langService = inject(LangService);\n\n // Math for template\n Math = Math;\n\n constructor() {}\n\n ngOnInit() {\n // Set default values\n if (!this.props.alignment) {\n this.props.alignment = 'center';\n }\n if (!this.props.captionSize) {\n this.props.captionSize = 'medium';\n }\n if (!this.props.mode) {\n this.props.mode = 'box';\n }\n }\n\n changeToVisible() {\n setInterval(() => {\n this.available = true;\n }, 100);\n }\n\n // Preview mode methods\n openPreview() {\n if (!this.props.previewMode) return;\n this.isPreviewOpen = true;\n this.resetZoom();\n }\n\n closePreview() {\n this.isPreviewOpen = false;\n }\n\n // Zoom methods\n zoomIn() {\n if (this.zoomLevel < this.maxZoom) {\n this.zoomLevel = Math.min(this.zoomLevel * 1.2, this.maxZoom);\n }\n }\n\n zoomOut() {\n if (this.zoomLevel > this.minZoom) {\n this.zoomLevel = Math.max(this.zoomLevel / 1.2, this.minZoom);\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n resetZoom() {\n this.zoomLevel = 1;\n this.panX = 0;\n this.panY = 0;\n }\n\n // Mouse events\n onMouseDown(event: MouseEvent) {\n if (this.zoomLevel <= 1) return;\n\n this.isDragging = true;\n this.startX = event.clientX - this.panX;\n this.startY = event.clientY - this.panY;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || this.zoomLevel <= 1) return;\n\n this.panX = event.clientX - this.startX;\n this.panY = event.clientY - this.startY;\n event.preventDefault();\n }\n\n onMouseUp(event: MouseEvent) {\n this.isDragging = false;\n }\n\n // Touch events for mobile\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1) {\n // Single touch - start dragging\n if (this.zoomLevel > 1) {\n this.isDragging = true;\n this.startX = this.touches[0].clientX - this.panX;\n this.startY = this.touches[0].clientY - this.panY;\n }\n } else if (this.touches.length === 2) {\n // Two touches - start pinch zoom\n this.isDragging = false;\n this.initialDistance = this.getDistance(this.touches[0], this.touches[1]);\n this.initialZoom = this.zoomLevel;\n }\n }\n\n onTouchMove(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1 && this.isDragging && this.zoomLevel > 1) {\n // Single touch - drag\n this.panX = this.touches[0].clientX - this.startX;\n this.panY = this.touches[0].clientY - this.startY;\n } else if (this.touches.length === 2) {\n // Two touches - pinch zoom\n const currentDistance = this.getDistance(this.touches[0], this.touches[1]);\n const scale = currentDistance / this.initialDistance;\n this.zoomLevel = Math.min(Math.max(this.initialZoom * scale, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n onTouchEnd(event: TouchEvent) {\n this.isDragging = false;\n this.touches = Array.from(event.touches);\n }\n\n // Mouse wheel zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n\n const delta = event.deltaY > 0 ? -1 : 1;\n const zoomFactor = 1 + delta * 0.1;\n\n this.zoomLevel = Math.min(Math.max(this.zoomLevel * zoomFactor, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n // Helper methods\n private getDistance(touch1: Touch, touch2: Touch): number {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.isPreviewOpen) return;\n\n switch (event.key) {\n case 'Escape':\n this.closePreview();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoomIn();\n break;\n case '-':\n event.preventDefault();\n this.zoomOut();\n break;\n case '0':\n event.preventDefault();\n this.resetZoom();\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonProgressBar } from '@ionic/angular/standalone';\nimport { ProgressBarMetadata } from './types';\n\n@Component({\n selector: 'val-progress-bar',\n standalone: true,\n imports: [CommonModule, IonProgressBar],\n template: `\n <ion-progress-bar\n [ngClass]=\"[props.size]\"\n [class.rounded]=\"props.rounded\"\n [value]=\"props.progress\"\n [color]=\"props.color\"\n [buffer]=\"props.buffer\"\n [type]=\"props.type\"\n ></ion-progress-bar>\n `,\n styleUrls: ['./progress-bar.component.scss'],\n})\n/**\n * val-progress-bar\n *\n * A progress bar for indicating completion or loading state.\n *\n * @example\n * <val-progress-bar [props]=\"{ progress: 0.5, color: 'success', size: 'small' }\"></val-progress-bar>\n *\n * @input props: ProgressBarMetadata - Configuration for the progress bar (progress, color, size, etc.)\n */\nexport class ProgressBarComponent implements OnInit {\n /**\n * Progress bar configuration object.\n * @type {ProgressBarMetadata}\n * @property progress - The progress value (0 to 1).\n * @property size - The progress bar size ('small' | 'medium' | 'large' | 'xlarge').\n * @property color - The progress bar color (Ionic color string).\n * @property buffer - The buffer value for the bar.\n * @property type - The type of progress bar ('determinate' | 'indeterminate').\n * @property rounded - Whether the bar has rounded corners.\n */\n @Input()\n props: ProgressBarMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface LinkProcessorConfig {\n /** Whether to open external links in new tab (default: true) */\n openExternalInNewTab?: boolean;\n /** Whether to open internal links in new tab (default: false) */\n openInternalInNewTab?: boolean;\n /** Custom CSS classes for links */\n linkClass?: string;\n /** Custom CSS classes for external links */\n externalLinkClass?: string;\n /** Custom CSS classes for internal links */\n internalLinkClass?: string;\n /** Whether to process Markdown-style links [text](url) (default: true) */\n processMarkdownLinks?: boolean;\n}\n\n/**\n * LinkProcessorService - Service for processing text content to convert URLs and internal routes into clickable links.\n *\n * This service automatically detects external URLs (http/https), internal routes (starting with /),\n * and Markdown-style links [text](url) and converts them into HTML anchor elements with appropriate attributes.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private linkProcessor: LinkProcessorService) {}\n *\n * processText() {\n * const text = 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)';\n * const processed = this.linkProcessor.processLinks(text);\n * // Returns SafeHtml with clickable links\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LinkProcessorService {\n // Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación\n private readonly urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\n // Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación\n private readonly internalRouteRegex = /(\\s|^)(\\/[^\\s]*)/g;\n\n // Regex para detectar enlaces estilo Markdown [texto](url)\n private readonly markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * Limpia la puntuación del final de una URL.\n * Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.\n * Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.\n */\n private cleanUrlPunctuation(url: string): string {\n // Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs\n // No incluimos & o = que son parte de query params, ni # que es parte de fragmentos\n const trailingPunctuation = /[.,;!?)]+$/;\n\n // Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura\n // probablemente el paréntesis no es parte de la URL\n const hasOpeningParen = url.includes('(');\n const endsWithClosingParen = url.endsWith(')');\n\n if (endsWithClosingParen && !hasOpeningParen) {\n // Remover el paréntesis de cierre si no hay uno de apertura\n url = url.replace(/\\)$/, '');\n }\n\n return url.replace(trailingPunctuation, '');\n }\n\n /**\n * Procesa texto para convertir enlaces en elementos <a> clickeables.\n * Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.\n *\n * @param text - Texto a procesar\n * @param config - Configuración del procesamiento\n * @returns SafeHtml con enlaces procesados o string original\n *\n * @example\n * ```typescript\n * const result = this.linkProcessor.processLinks(\n * 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)',\n * {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * processMarkdownLinks: true,\n * linkClass: 'custom-link'\n * }\n * );\n * ```\n */\n processLinks(text: string, config: LinkProcessorConfig = {}): SafeHtml | string {\n if (!text) return '';\n\n const {\n openExternalInNewTab = true,\n openInternalInNewTab = false,\n linkClass = 'processed-link',\n externalLinkClass = 'external-link',\n internalLinkClass = 'internal-link',\n processMarkdownLinks = true,\n } = config;\n\n let hasLinks = false;\n let processedText = text;\n\n // 1. Procesar enlaces estilo Markdown [texto](url) primero\n if (processMarkdownLinks) {\n const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = markdownMatches.length - 1; i >= 0; i--) {\n const match = markdownMatches[i];\n const [fullMatch, linkText, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n hasLinks = true;\n const isExternal = /^https?:\\/\\//.test(url);\n const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)\n ? isExternal\n ? ' target=\"_blank\" rel=\"noopener noreferrer\"'\n : ' target=\"_blank\"'\n : '';\n const typeClass = isExternal ? externalLinkClass : internalLinkClass;\n const classes = `${linkClass} ${typeClass}`.trim();\n const linkHtml = `<a href=\"${url}\"${target} class=\"${classes}\">${linkText}</a>`;\n\n processedText =\n processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);\n }\n }\n\n // 2. Procesar URLs externas directas\n const urlMatches = Array.from(processedText.matchAll(this.urlRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = urlMatches.length - 1; i >= 0; i--) {\n const match = urlMatches[i];\n const [fullMatch, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n // Limpiar puntuación del final de la URL\n const cleanUrl = this.cleanUrlPunctuation(url);\n const punctuationRemoved = url !== cleanUrl;\n const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';\n\n hasLinks = true;\n const target = openExternalInNewTab ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n const classes = `${linkClass} ${externalLinkClass}`.trim();\n const linkHtml = `<a href=\"${cleanUrl}\"${target} class=\"${classes}\">${cleanUrl}</a>`;\n\n // Reemplazar el URL original con el enlace + puntuación si existía\n const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // 3. Procesar rutas internas\n const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = internalMatches.length - 1; i >= 0; i--) {\n const match = internalMatches[i];\n const [fullMatch, prefix, route] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n hasLinks = true;\n const target = openInternalInNewTab ? ' target=\"_blank\"' : '';\n const classes = `${linkClass} ${internalLinkClass}`.trim();\n const linkHtml = `<a href=\"${route}\"${target} class=\"${classes}\">${route}</a>`;\n\n const replacement = `${prefix}${linkHtml}`;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // Si hay enlaces, sanitizar el HTML\n if (hasLinks) {\n return this.sanitizer.bypassSecurityTrustHtml(processedText);\n }\n\n return text;\n }\n\n /**\n * Detecta si un texto contiene enlaces (URLs, rutas internas o enlaces Markdown).\n *\n * @param text - Texto a analizar\n * @returns true si contiene enlaces\n *\n * @example\n * ```typescript\n * const hasLinks = this.linkProcessor.hasLinks('Visit https://example.com or [docs](https://docs.com)');\n * // Returns: true\n * ```\n */\n hasLinks(text: string): boolean {\n if (!text) return false;\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n return (\n this.urlRegex.test(text) ||\n this.internalRouteRegex.test(text) ||\n this.markdownLinkRegex.test(text)\n );\n }\n\n /**\n * Extrae todos los enlaces de un texto.\n *\n * @param text - Texto a analizar\n * @returns Array de enlaces encontrados con su tipo y texto (si es Markdown)\n *\n * @example\n * ```typescript\n * const links = this.linkProcessor.extractLinks('Visit https://example.com, /profile, or [docs](https://docs.com)');\n * // Returns: [\n * // { url: 'https://example.com', type: 'external', text: 'https://example.com' },\n * // { url: '/profile', type: 'internal', text: '/profile' },\n * // { url: 'https://docs.com', type: 'external', text: 'docs' }\n * // ]\n * ```\n */\n extractLinks(text: string): Array<{ url: string; type: 'external' | 'internal'; text: string }> {\n if (!text) return [];\n\n const links: Array<{ url: string; type: 'external' | 'internal'; text: string }> = [];\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n // Extraer enlaces Markdown primero\n let match;\n while ((match = this.markdownLinkRegex.exec(text)) !== null) {\n const url = match[2];\n const linkText = match[1];\n const type = /^https?:\\/\\//.test(url) ? 'external' : 'internal';\n links.push({ url, type, text: linkText });\n }\n\n // Extraer URLs externas directas\n while ((match = this.urlRegex.exec(text)) !== null) {\n const url = match[1];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'external', text: url });\n }\n }\n\n // Extraer rutas internas directas\n while ((match = this.internalRouteRegex.exec(text)) !== null) {\n const url = match[2];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'internal', text: url });\n }\n }\n\n return links;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LinkProcessorConfig, LinkProcessorService } from '../../services/link-processor.service';\n\n/**\n * ProcessLinksPipe - Pipe para procesar texto y convertir URLs en enlaces clickeables.\n *\n * Este pipe standalone detecta automáticamente URLs externas (http/https) y rutas internas\n * (que empiezan con /) y las convierte en elementos HTML anchor con los atributos apropiados.\n *\n * @example Uso básico:\n * ```html\n * <div [innerHTML]=\"'Visit https://example.com or go to /profile' | processLinks\"></div>\n * ```\n *\n * @example Con configuración personalizada:\n * ```html\n * <div [innerHTML]=\"text | processLinks:linkConfig\"></div>\n * ```\n *\n * @example En TypeScript:\n * ```typescript\n * export class MyComponent {\n * linkConfig: LinkProcessorConfig = {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'my-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * };\n * }\n * ```\n */\n@Pipe({\n name: 'processLinks',\n standalone: true,\n})\nexport class ProcessLinksPipe implements PipeTransform {\n private linkProcessor = inject(LinkProcessorService);\n\n /**\n * Transforma texto procesando URLs y rutas internas para convertirlas en enlaces.\n *\n * @param value - El texto a procesar\n * @param config - Configuración opcional para el procesamiento de enlaces\n * @returns SafeHtml con enlaces procesados o string original si no hay enlaces\n *\n * @example\n * ```html\n * <!-- Uso básico -->\n * <p [innerHTML]=\"'Check out https://angular.io' | processLinks\"></p>\n *\n * <!-- Con configuración -->\n * <p [innerHTML]=\"message | processLinks:{ openExternalInNewTab: false }\"></p>\n * ```\n */\n transform(value: string, config?: LinkProcessorConfig): SafeHtml | string {\n if (!value) {\n return '';\n }\n\n return this.linkProcessor.processLinks(value, config);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LinkProcessorService } from '../../../services/link-processor.service';\nimport { ProcessLinksPipe } from '../../../shared/pipes/process-links.pipe';\nimport { interpolateStaticContent, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TextContentConfig, TextMetadata } from './types';\n\n@Component({\n selector: 'val-text',\n standalone: true,\n imports: [IonText, AsyncPipe, ProcessLinksPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (props.processLinks) {\n <p\n [class]=\"props.size\"\n [class.bold]=\"props.bold\"\n [innerHTML]=\"displayContent$ | async | processLinks: props.linkConfig\"\n ></p>\n } @else if (\n (props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||\n (displayContent$ | async)?.includes('<strong>')\n ) {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\" [innerHTML]=\"processPartialBold(displayContent$ | async)\"></p>\n } @else {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\">{{ displayContent$ | async }}</p>\n }\n </ion-text>\n `,\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-text\n *\n * Enhanced text component that supports both static content and reactive content from the language service.\n * The component automatically updates when the language changes if using reactive content.\n *\n * @example Static content:\n * ```html\n * <val-text [props]=\"{\n * content: 'Static text',\n * color: 'primary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeMessage',\n * contentClass: 'HomeComponent',\n * contentFallback: 'Welcome!',\n * color: 'primary',\n * size: 'large',\n * bold: true\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: 'John', count: 5 },\n * color: 'secondary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example With automatic link processing:\n * ```html\n * <val-text [props]=\"{\n * content: 'Visit https://example.com or go to /profile for more info',\n * processLinks: true,\n * linkConfig: {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'custom-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * },\n * color: 'primary',\n * size: 'medium'\n * }\"></val-text>\n * ```\n *\n * @example With partial bold support:\n * ```html\n * <val-text [props]=\"{\n * content: 'Hola <b>Victor</b>, cómo estás? También puedes usar <strong>strong</strong>',\n * allowPartialBold: true,\n * color: 'dark',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with partial bold:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeWithName',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' },\n * allowPartialBold: true,\n * color: 'primary',\n * size: 'large',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Using ContentService helper:\n * ```typescript\n * // In component\n * content = inject(ContentService);\n * componentContent = this.content.forComponent('MyComponent');\n *\n * textProps = {\n * content: this.componentContent.getText('title'), // sync\n * color: 'primary',\n * size: 'large',\n * bold: true\n * };\n * // Or with reactive binding:\n * title$ = this.componentContent.get('title');\n * ```\n *\n * @input props: TextMetadata - Configuration for the text (content, styling, and reactive content options)\n */\nexport class TextComponent implements OnInit, OnDestroy {\n /**\n * Text configuration object.\n * @type {TextMetadata}\n *\n * For static content:\n * @property content - The text to display (takes precedence over reactive content)\n *\n * For reactive content:\n * @property contentKey - The content key to retrieve from language service\n * @property contentClass - The component class name for content lookup\n * @property contentFallback - Optional fallback text if content is not found\n * @property contentInterpolation - Optional values to interpolate into content\n *\n * For styling:\n * @property color - The text color (Ionic color string)\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge')\n * @property bold - Whether the text is bold\n * @property processLinks - Whether to automatically process and convert links in text (default: false)\n * @property linkConfig - Configuration for link processing (colors, target behavior, etc.)\n * @property allowPartialBold - Whether to allow partial bold using <b> or <strong> tags (default: false)\n */\n @Input()\n props: TextMetadata;\n\n /**\n * Observable that provides the content to display.\n * This will be either static content or reactive content from the language service.\n */\n displayContent$: Observable<string>;\n\n private subscription = new Subscription();\n\n constructor(\n private langService: LangService,\n private linkProcessor: LinkProcessorService\n ) {}\n\n ngOnInit() {\n this.setupDisplayContent();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Set up the content observable based on the props configuration.\n * Priority: static content > reactive content with interpolation > reactive content\n */\n private setupDisplayContent(): void {\n if (this.props.content) {\n // Static content takes precedence\n if (this.props.contentInterpolation) {\n // Static content with interpolation\n const interpolatedContent = interpolateStaticContent(this.props.content, this.props.contentInterpolation);\n this.displayContent$ = of(interpolatedContent);\n } else {\n // Simple static content\n this.displayContent$ = of(this.props.content);\n }\n } else if (shouldUseReactiveContent(this.props)) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayContent$ = this.langService.getContentWithInterpolation(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayContent$ = this.langService.getContent(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-text: No valid content configuration provided. Use either \"content\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayContent$ = of(this.props.contentFallback || '');\n }\n }\n\n /**\n * Process partial bold tags in the content.\n * Converts <b> and <strong> tags to properly styled bold spans.\n *\n * @param content - The content string to process\n * @returns Processed content with bold styling\n */\n processPartialBold(content: string | null): string {\n if (!content) return '';\n\n // Process <b> tags\n let processedContent = content.replace(/<b>(.*?)<\\/b>/gi, '<span class=\"partial-bold\">$1</span>');\n\n // Process <strong> tags\n processedContent = processedContent.replace(/<strong>(.*?)<\\/strong>/gi, '<span class=\"partial-bold\">$1</span>');\n\n return processedContent;\n }\n}\n\n/**\n * Helper function to create reactive text props from content configuration.\n * This provides a convenient way to create val-text props with reactive content.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style configuration\n * @returns Partial TextMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'title',\n * contentClass: 'HeaderComponent'\n * }, {\n * color: 'primary',\n * size: 'large',\n * bold: true\n * })\n * };\n * ```\n *\n * @example With partial bold support:\n * ```typescript\n * // In component\n * greetingProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' }\n * }, {\n * color: 'primary',\n * size: 'medium',\n * bold: false,\n * allowPartialBold: true\n * })\n * };\n * ```\n */\nexport function createTextProps(\n contentConfig: TextContentConfig,\n styleConfig: Partial<Pick<TextMetadata, 'color' | 'size' | 'bold' | 'allowPartialBold'>> = {}\n): Partial<TextMetadata> {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n bold: styleConfig.bold || false,\n allowPartialBold: styleConfig.allowPartialBold || false,\n };\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { extractContentConfig, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TitleMetadata } from './types';\n\n@Component({\n selector: 'val-title',\n standalone: true,\n imports: [CommonModule, IonText, AsyncPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (!props.bold) {\n <p [ngClass]=\"[props.size]\" [class.thin]=\"props.thin\">\n {{ displayContent$ | async }}\n </p>\n } @else {\n <b>\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </b>\n }\n </ion-text>\n `,\n styleUrls: ['./title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-title\n *\n * A styled title or heading, with options for size, color, and boldness.\n * Supports both static content and reactive content from the language service.\n *\n * @example Static content:\n * ```html\n * <val-title [props]=\"{ content: 'My Title', size: 'large', color: 'primary', bold: true }\"></val-title>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: { key: 'pageTitle', fallback: 'Default Title' },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: {\n * key: 'welcomeTitle',\n * interpolation: { name: 'John' },\n * fallback: 'Welcome!'\n * },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @input props: TitleMetadata - Configuration for the title (content, color, size, bold, thin)\n */\nexport class TitleComponent implements OnInit, OnChanges {\n /**\n * Title configuration object.\n * @type {TitleMetadata}\n * @property content - Static title text (takes precedence over reactive content).\n * @property contentConfig - Reactive content configuration.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\n @Input()\n props: TitleMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n displayContent$: Observable<string>;\n\n constructor() {}\n\n ngOnInit() {\n this.updateContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateContent();\n this.cdr.detectChanges();\n }\n }\n\n private updateContent() {\n // Always convert to Observable for consistent template handling\n if (shouldUseReactiveContent(this.props)) {\n // Use reactive content with LangService\n const config = extractContentConfig(this.props);\n this.displayContent$ = this.langService.getContent(config.className, config.key, config.fallback);\n } else {\n // Convert static content to Observable\n const staticContent = this.props.content || '';\n this.displayContent$ = of(staticContent);\n }\n }\n}\n","import { Color } from '@ionic/core';\nimport { ReactiveTextMetadata } from '../../../shared/utils/simple-content';\n\n/**\n * Props for val-title component.\n * Supports both static content and reactive content from the language service.\n *\n * @property content - Static title text to display (takes precedence over reactive content).\n * @property contentKey - Content key for reactive content lookup.\n * @property contentClass - Component class name for content lookup.\n * @property contentFallback - Fallback text if content is not found.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\nexport interface TitleMetadata extends ReactiveTextMetadata {\n size: 'small' | 'medium' | 'large' | 'xlarge';\n color: Color;\n bold: boolean;\n thin?: boolean;\n}\n\n/**\n * Factory function to create title props with reactive content support.\n *\n * @param styleConfig - Title styling configuration\n * @param contentConfig - Content configuration (static or reactive)\n * @returns Complete TitleMetadata object\n *\n * @example Static content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * { content: 'Static Title' }\n * );\n * ```\n *\n * @example Reactive content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * {\n * contentKey: 'pageTitle',\n * contentClass: 'MyComponent',\n * contentFallback: 'Default Title'\n * }\n * );\n * ```\n */\nexport function createTitleProps(\n styleConfig: Pick<TitleMetadata, 'size' | 'color' | 'bold' | 'thin'>,\n contentConfig: Pick<TitleMetadata, 'content' | 'contentKey' | 'contentClass' | 'contentFallback'>\n): TitleMetadata {\n return {\n ...styleConfig,\n ...contentConfig,\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { ActionHeaderMetadata } from './types';\n\n@Component({\n selector: 'val-action-header',\n standalone: true,\n imports: [CommonModule, DisplayComponent, ButtonComponent],\n template: `\n <section class=\"header-content-container\">\n <val-display [props]=\"props.title\" />\n <val-button [props]=\"props.action\" />\n </section>\n `,\n styles: `\n .header-content-container {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n `,\n})\nexport class ActionHeaderComponent {\n @Input() props: ActionHeaderMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { AlertBoxMetadata, ReactiveAlertBoxMetadata } from './types';\n\n@Component({\n selector: 'val-alert-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, IconComponent, TextComponent],\n template: `\n <val-box [props]=\"props.box\">\n <div class=\"content-container\" body>\n <val-icon [props]=\"props.icon\"></val-icon>\n <!-- Support both legacy and reactive patterns -->\n @if (isLegacyProps) {\n <val-text class=\"text\" [props]=\"getLegacyTextProps()\" />\n } @else {\n <val-text class=\"text\" [props]=\"computedTextProps\" />\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./alert-box.component.scss'],\n})\n/**\n * val-alert-box\n *\n * Displays an alert box with an icon and text, using a styled box container.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Legacy pattern with TextMetadata\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, text: {...} }\"></val-alert-box>\n *\n * // Reactive pattern with simplified configuration\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, textConfig: { key: 'alert.warning' } }\"></val-alert-box>\n *\n * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box\n */\nexport class AlertBoxComponent implements OnInit, OnDestroy {\n private subscriptions = new Subscription();\n\n /**\n * Alert box configuration object.\n * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.\n */\n @Input()\n props: AlertBoxMetadata | ReactiveAlertBoxMetadata;\n\n /** Computed text properties for reactive pattern */\n computedTextProps: any;\n\n /** Whether this is using the legacy props pattern */\n get isLegacyProps(): boolean {\n return 'text' in this.props && typeof (this.props as any).text === 'object';\n }\n\n /** Get text props for legacy pattern */\n getLegacyTextProps(): any {\n return (this.props as AlertBoxMetadata).text;\n }\n\n constructor(private langService: LangService) {}\n\n ngOnInit() {\n if (!this.isLegacyProps) {\n this.initializeReactiveTextProps();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeReactiveTextProps() {\n const reactiveProps = this.props as ReactiveAlertBoxMetadata;\n\n // Base text properties with styling\n this.computedTextProps = {\n size: reactiveProps.textStyle?.size || 'medium',\n color: reactiveProps.textStyle?.color,\n bold: reactiveProps.textStyle?.bold || false,\n };\n\n // Add content configuration\n if (reactiveProps.text !== undefined) {\n // Static text\n this.computedTextProps.content = reactiveProps.text;\n } else if (reactiveProps.textConfig) {\n // Reactive content\n this.computedTextProps.contentConfig = reactiveProps.textConfig;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ButtonGroupMetadata } from './types';\n\n@Component({\n selector: 'val-button-group',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <div [ngClass]=\"['group-container', Position]\" [class.column]=\"props.columned\" style=\"width: 100%;\">\n <val-button\n *ngFor=\"let b of props.buttons\"\n [props]=\"b\"\n (onClick)=\"clickHandler(b?.token)\"\n [ngStyle]=\"{ width: props.buttons.length === 1 ? '100%' : 'auto' }\"\n ></val-button>\n </div>\n `,\n styleUrls: ['./button-group.component.scss'],\n})\n/**\n * val-button-group\n *\n * Displays a group of buttons with configurable layout and position.\n *\n * @example\n * <val-button-group [props]=\"{ buttons: [...], position: 'center', columned: false }\" (onClick)=\"handler($event)\"></val-button-group>\n *\n * @input props: ButtonGroupMetadata - Configuration for the button group (buttons, position, columned)\n * @output onClick - Emits the token of the clicked button\n */\nexport class ButtonGroupComponent implements OnInit {\n /**\n * Button group configuration object.\n * @type {ButtonGroupMetadata}\n * @property buttons - Array of button configurations.\n * @property position - Position of the button group ('center' | 'left' | 'right' | 'spaced').\n * @property columned - Whether the buttons are displayed in a column.\n */\n @Input()\n props: ButtonGroupMetadata;\n\n /**\n * Event emitted with the token of the clicked button.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n get Position(): string {\n if (this.props.buttons.length === 1 && this.props.position === 'spaced') {\n return 'right';\n }\n\n return this.props.position;\n }\n}\n","import { ButtonMetadata, ToolbarAction } from '../../types';\n\nexport enum CardType {\n native = 'native',\n checker = 'checker',\n tappable = 'tappable',\n complex = 'complex',\n}\n\nexport interface CardClickEvent {\n section: CardSection;\n token?: string;\n}\n\nexport enum CardSection {\n headerLeft,\n headerRight,\n content,\n footer,\n footerExtra,\n}\n\nexport interface CardMetadata {\n token?: string;\n type: CardType;\n title?: string;\n overtitle?: string;\n content?: string;\n image?: string;\n footerActions: ButtonMetadata[];\n footerComplexActions: ToolbarAction[];\n leftActions: ToolbarAction[];\n rightActions: ToolbarAction[];\n selected: boolean;\n headerText?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ToolbarActionType } from '../../types';\nimport { CardClickEvent, CardMetadata, CardSection, CardType } from './types';\n\n@Component({\n selector: 'val-card',\n standalone: true,\n imports: [\n CommonModule,\n ButtonComponent,\n AvatarComponent,\n ImageComponent,\n TextComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n IonCheckbox,\n IonButtons,\n IonButton,\n IonIcon,\n ],\n template: `\n <ion-card *ngIf=\"props.type === types.native\">\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.tappable\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.checker\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"checker\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n <div>\n <ion-checkbox [checked]=\"props.selected\"></ion-checkbox>\n </div>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card *ngIf=\"props.type === types.complex\" class=\"complex\">\n <ion-card-header class=\"complex-header\">\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.leftActions.length > 0\">\n <ng-container *ngFor=\"let action of props.leftActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n <div *ngIf=\"props.headerText\">\n <val-text [props]=\"{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }\" />\n </div>\n </ng-container>\n </ion-buttons>\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.rightActions.length > 0\">\n <ng-container *ngFor=\"let action of props.rightActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card-header>\n\n <div class=\"tapable\" (click)=\"clickHandler(sections.content, props.token)\">\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"complex-header\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n </ion-card-header>\n\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-content *ngIf=\"props.content\" class=\"complex-content\">{{ props.content }}</ion-card-content>\n </div>\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n <ion-buttons\n style=\"display: flex; align-items: center; justify-content: flex-end; margin: 8px\"\n *ngIf=\"props.footerComplexActions.length > 0\"\n >\n <ng-container *ngFor=\"let action of props.footerComplexActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n color=\"dark\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card>\n `,\n styleUrls: ['./card.component.scss'],\n})\n/**\n * val-card\n *\n * A flexible card component supporting images, titles, content, actions, and custom sections.\n *\n * @example\n * <val-card [props]=\"{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }\" (onClick)=\"handler($event)\"></val-card>\n *\n * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)\n * @output onClick - Emits a CardClickEvent when the card or an action is clicked\n */\nexport class CardComponent implements OnInit {\n /**\n * Card configuration object.\n * @type {CardMetadata}\n * @property type - The card type (see CardType).\n * @property title - The card title.\n * @property image - The card image URL.\n * @property content - The card content.\n * @property actions - Array of action buttons (optional).\n * @property sections - Custom card sections (optional).\n * @property overtitle - Subtitle or overtitle (optional).\n */\n @Input()\n props: CardMetadata;\n\n /**\n * Event emitted when the card or an action is clicked.\n */\n @Output()\n onClick = new EventEmitter<CardClickEvent>();\n\n types = CardType;\n actionTypes = ToolbarActionType;\n sections = CardSection;\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(section: CardSection, token?: string) {\n this.onClick.emit({ section, token });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { IonCheckbox } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-check-input',\n standalone: true,\n imports: [CommonModule, IonCheckbox],\n template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> `,\n styleUrls: ['./check-input.component.scss'],\n})\n/**\n * val-check-input\n *\n * A simple checkbox input for boolean values or agreements.\n *\n * @example\n * <val-check-input></val-check-input>\n */\nexport class CheckInputComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport * as Prism from 'prismjs';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CodeDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-code-display',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-viewer-container\">\n <div class=\"tab-bar\">\n <div\n class=\"tab\"\n *ngFor=\"let tab of props.tabs; let i = index\"\n [class.active]=\"i === selectedTab\"\n (click)=\"selectTab(i)\"\n >\n <span class=\"tab-label\">{{ tab.label }}</span>\n </div>\n </div>\n <div class=\"code-content\">\n <!-- <span class=\"language-badge\">{{ props.tabs[selectedTab]?.language || props.language }}</span> -->\n <ion-button fill=\"clear\" class=\"copy-button\" (click)=\"copyToClipboard()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.tabs[selectedTab]?.language || props.language)\" #codeElement></code></pre>\n </div>\n </div>\n `,\n\n styleUrl: './code-display.component.scss',\n})\nexport class CodeDisplayComponent implements AfterViewInit, OnChanges {\n @ViewChild('codeElement') codeElement!: ElementRef<HTMLElement>;\n\n @Input() props: CodeDisplayMetadata;\n\n toast = inject(ToastController);\n langService = inject(LangService);\n selectedTab: number = 0;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] || changes['language'] || changes['tabs']) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n selectTab(i: number) {\n this.selectedTab = i;\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeElement) {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n this.codeElement.nativeElement.textContent = code || '';\n Prism.highlightElement(this.codeElement.nativeElement);\n }\n }\n\n async copyToClipboard() {\n try {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n await Clipboard.write({ string: code || '' });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n } catch (error) {\n console.error('Error al copiar al portapapeles:', error);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CommandDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-command-display',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div class=\"command-container\">\n <div class=\"command-text\">$ {{ props.text }}</div>\n <ion-icon name=\"copy-outline\" class=\"copy-icon\" (click)=\"copyCommand()\"></ion-icon>\n </div>\n `,\n styleUrls: ['./command-display.component.scss'],\n})\nexport class CommandDisplayComponent {\n toast = inject(ToastController);\n langService = inject(LangService);\n\n @Input() props: CommandDisplayMetadata;\n\n constructor() {}\n\n async copyCommand() {\n if (this.props.text) {\n await Clipboard.write({\n string: this.props.text,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonCheckbox, IonTextarea } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-comment-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonCheckbox, IonTextarea],\n template: `\n <ion-textarea [formControl]=\"props.control\" [counter]=\"true\" [maxlength]=\"props.range.max\"></ion-textarea>\n `,\n styleUrls: ['./comment-input.component.scss'],\n})\n/**\n * val-comment-input\n *\n * A textarea input for multi-line comments, integrated with Angular forms.\n *\n * @example\n * <val-comment-input [props]=\"{ control: myControl, range: { max: 200 } }\"></val-comment-input>\n *\n * @input props: InputMetadata - Configuration for the textarea (form control, range, etc.)\n */\nexport class CommentInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the textarea.\n * @property range - The range object with max length.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { ContentLoaderMetadata } from './types';\n\n@Component({\n selector: 'val-content-loader',\n standalone: true,\n imports: [CommonModule, IonSpinner, IonText],\n template: `\n <div [ngClass]=\"['spinner-wrapper', props.size]\">\n <ion-spinner [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\"></ion-spinner>\n <ion-text [color]=\"props.color\">\n <p>{{ props.text }}</p>\n </ion-text>\n </div>\n `,\n styleUrls: ['./content-loader.component.scss'],\n})\n/**\n * val-content-loader\n *\n * A loading spinner with optional text, for indicating loading states.\n *\n * @example\n * <val-content-loader [props]=\"{ size: 'large', color: 'primary', text: 'Loading...' }\"></val-content-loader>\n *\n * @input props: ContentLoaderMetadata - Configuration for the loader (size, color, text, etc.)\n */\nexport class ContentLoaderComponent implements OnInit {\n /**\n * Loader configuration object.\n * @type {ContentLoaderMetadata}\n * @property size - The spinner size.\n * @property color - The spinner color.\n * @property text - The loading text (optional).\n * @property name - The spinner name (optional).\n */\n @Input()\n props: ContentLoaderMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Utilities for handling default values in form inputs based on InputMetadata configuration.\n */\n\nimport { InputMetadata, InputType } from '../../components/types';\n\n/**\n * Resolves the initial value for a form input based on its configuration.\n *\n * @param input - The input metadata configuration\n * @returns The resolved initial value\n *\n * @example\n * // Custom default value\n * const customValue = resolveInputDefaultValue({ withDefault: '2025-06-24', type: InputType.DATE });\n *\n * // Auto default value\n * const autoValue = resolveInputDefaultValue({ withDefault: true, type: InputType.NUMBER });\n *\n * // Explicit value (takes precedence)\n * const explicitValue = resolveInputDefaultValue({ value: 'explicit', withDefault: true, type: InputType.TEXT });\n */\nexport function resolveInputDefaultValue(input: InputMetadata): any {\n // Explicit value takes precedence\n if (input.value !== undefined && input.value !== null && input.value !== '') {\n return parseValueByType(input.value, input.type);\n }\n\n // No default configuration\n if (!input.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof input.withDefault === 'string') {\n return parseValueByType(input.withDefault, input.type);\n }\n\n // Auto default value (withDefault === true)\n return getAutoDefaultValue(input.type);\n}\n\n/**\n * Parses a string value to the appropriate type based on the input type.\n *\n * @param value - The string value to parse\n * @param type - The input type\n * @returns The parsed value\n */\nfunction parseValueByType(value: string, type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date(value).toISOString();\n case InputType.NUMBER:\n return parseFloat(value) || 0;\n case InputType.CHECK:\n return value === 'true' || value === '1';\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return value;\n }\n}\n\n/**\n * Gets the automatic default value for a given input type.\n *\n * @param type - The input type\n * @returns The auto default value\n */\nfunction getAutoDefaultValue(type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date().toISOString();\n case InputType.NUMBER:\n return 0;\n case InputType.CHECK:\n return false;\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return '';\n }\n}\n\n/**\n * Applies the resolved default value to a FormControl.\n *\n * @param input - The input metadata configuration\n * @example\n * const input = { control: myFormControl, type: InputType.DATE, withDefault: true };\n * applyDefaultValueToControl(input);\n */\nexport function applyDefaultValueToControl(input: InputMetadata): void {\n if (!input.control) return;\n\n const defaultValue = resolveInputDefaultValue(input);\n if (defaultValue !== null) {\n input.control.setValue(defaultValue);\n input.control.markAsPristine();\n input.control.updateValueAndValidity();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime, IonDatetimeButton, IonModal } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-date-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal],\n template: `\n <div class=\"button-container\">\n <ion-datetime-button class=\"action\" [datetime]=\"props.token\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [formControl]=\"props.control\"\n [id]=\"props.token\"\n presentation=\"date\"\n locale=\"es-ES\"\n [firstDayOfWeek]=\"1\"\n [showDefaultButtons]=\"true\"\n doneText=\"Aceptar\"\n cancelText=\"Cancelar\"\n formatOptions=\"{\n date: { dateStyle: 'medium' },\n time: { timeStyle: 'short' }\n }\"\n >\n <span slot=\"title\">{{ props.hint }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./date-input.component.scss'],\n})\n/**\n * val-date-input\n *\n * A date picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-date-input [props]=\"{ control: myControl, hint: 'Select a date' }\"></val-date-input>\n *\n * @input props: InputMetadata - Configuration for the date input (form control, hint, etc.)\n */\nexport class DateInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the date input.\n * @property hint - The hint text for the input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-email-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"email\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./email-input.component.scss'],\n})\n/**\n * val-email-input\n *\n * An email input field integrated with Angular forms.\n *\n * @example\n * <val-email-input [props]=\"{ control: myControl, placeholder: 'Enter your email' }\"></val-email-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class EmailInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Resolves a color string to a valid CSS value for use in styles.\n * Supports Ionic color names, CSS variables, and custom colors.\n *\n * @param color The color name, CSS variable, or custom color string\n * @returns A valid CSS color value\n *\n * @example\n * resolveColor('primary'); // returns 'var(--ion-color-primary)'\n * resolveColor('--my-custom-color'); // returns 'var(--my-custom-color)'\n * resolveColor('#ff0000'); // returns '#ff0000'\n */\nexport function resolveColor(color: string): string {\n // Si el color empieza con \"--\", se asume que es una variable CSS válida\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n // Lista de colores predefinidos de Ionic\n const ionicColors = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'warning',\n 'danger',\n 'light',\n 'medium',\n 'dark',\n ];\n\n // Verificar si el color es un color de Ionic\n if (ionicColors.includes(color)) {\n return `var(--ion-color-${color})`;\n }\n\n // Si no es una variable CSS ni un color de Ionic, devolver el color tal cual\n return color;\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ExpandableTextInput } from './types';\n\n@Component({\n selector: 'val-expandable-text',\n standalone: true,\n imports: [IonText],\n template: `\n <div class=\"description-container\" [class.expanded]=\"expanded\" [class.has-gradient]=\"!expanded && isTruncated\">\n <ion-text>\n <p class=\"description\">\n <span class=\"content\">{{ expanded ? props.content : truncatedText }}</span>\n @if (!expanded && isTruncated) {\n <span class=\"see-more\" [style.color]=\"this.color()\" (click)=\"toggleExpand()\">\n {{ getExpandText() }}\n </span>\n }\n </p>\n </ion-text>\n </div>\n `,\n styles: [\n `\n .description-container {\n position: relative;\n overflow: hidden;\n max-height: 10rem; /* Altura para texto truncado */\n transition: max-height 0.3s ease-in-out;\n }\n\n .description-container.expanded {\n max-height: none; /* Sin límite de altura al expandir */\n }\n\n .description {\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .description-container:not(.expanded) .description::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 3.5rem; /* Altura del gradiente */\n background: linear-gradient(to top, var(--ion-background-color), rgba(255, 255, 255, 0));\n pointer-events: none; /* Ignorar interacciones en el gradiente */\n }\n\n .description-container:not(.has-gradient) .description::after {\n background: transparent; /* Fondo transparente si no hay gradiente */\n }\n\n .see-more {\n position: relative;\n font-weight: bold;\n cursor: pointer;\n z-index: 1;\n margin-left: 0.3rem;\n }\n `,\n ],\n})\n/**\n * val-expandable-text\n *\n * A text component that can be expanded/collapsed to show more or less content.\n *\n * @example\n * <val-expandable-text [props]=\"{ content: '...', limit: 180, color: 'primary', expandText: 'más' }\"></val-expandable-text>\n *\n * @input props: ExpandableTextInput - Configuration for the expandable text (content, limit, color, expandText)\n */\nexport class ExpandableTextComponent {\n /**\n * Expandable text configuration object.\n * @type {ExpandableTextInput}\n * @property content - The text content to display.\n * @property limit - The character limit before truncation.\n * @property color - The color for the \"see more\" link.\n * @property expandText - The text for the expand link (optional).\n */\n @Input() props: ExpandableTextInput;\n expanded = false;\n defaultColor = 'primary';\n\n private langService = inject(LangService);\n\n get truncatedText(): string {\n const maxLength = this.props.limit || 100; // Longitud por defecto\n return this.props.content?.length > maxLength ? this.props.content.slice(0, maxLength) + '...' : this.props.content;\n }\n\n get isTruncated(): boolean {\n return this.props.content?.length > (this.props.limit || 100);\n }\n\n getExpandText(): string {\n return this.props.expandText || this.langService.getText('_global', 'seeMore', 'ver más');\n }\n\n toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { PrimarySolidDefaultRoundButton } from '../../atoms/button/factory';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonMetadata, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-file-input',\n standalone: true,\n imports: [IonIcon, TextComponent, ButtonComponent],\n template: `\n <div class=\"file-container\">\n <input style=\"display: none\" type=\"file\" (change)=\"onFileSelected($event)\" #fileInput />\n <div class=\"name-container\">\n <ion-icon [name]=\"selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'\"></ion-icon>\n <val-text\n style=\"margin-left: 4px;\"\n [props]=\"{\n content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',\n color: 'dark',\n bold: false,\n size: 'medium',\n }\"\n ></val-text>\n </div>\n <val-button [props]=\"contrastButton\" (onClick)=\"fileInput.click()\"></val-button>\n </div>\n `,\n styleUrls: ['./file-input.component.scss'],\n})\n/**\n * val-file-input\n *\n * A file input component for uploading files, integrated with Angular forms.\n *\n * @example\n * <val-file-input [props]=\"{ control: myControl }\"></val-file-input>\n *\n * @input props: InputMetadata - Configuration for the file input (form control, etc.)\n */\nexport class FileInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the file input.\n */\n @Input() props: InputMetadata;\n\n @ViewChild('fileInput') fileInput;\n\n contrastButton: ButtonMetadata = {\n ...PrimarySolidDefaultRoundButton('Subir archivo'),\n color: 'light',\n };\n selectedFile: File;\n\n constructor() {}\n\n ngOnInit() {}\n\n onFileSelected(event): void {\n this.selectedFile = event.target.files[0];\n this.props.control.setValue(this.selectedFile);\n }\n\n reset(): void {\n this.selectedFile = null;\n this.fileInput.nativeElement.value = '';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hint',\n standalone: true,\n imports: [CommonModule, TextComponent],\n template: `\n <div class=\"hint-container\" *ngIf=\"shouldShowErrors\">\n <val-text\n *ngFor=\"let e of Errors\"\n [props]=\"{\n content: e,\n color: 'danger',\n bold: false,\n size: 'small',\n }\"\n ></val-text>\n </div>\n `,\n styleUrls: ['./hint.component.scss'],\n})\n/**\n * val-hint\n *\n * Displays validation error messages for a form input, using Angular forms.\n *\n * @example\n * <val-hint [props]=\"{ control: myControl, errors: { required: 'Required field' } }\"></val-hint>\n *\n * @input props: InputMetadata - Configuration for the input (form control, errors, etc.)\n */\nexport class HintComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property errors - The error messages mapping.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n\n get shouldShowErrors(): boolean {\n if (this.props.control) {\n // Normal field with single control\n return this.props.control.invalid && (this.props.control.touched || this.props.control.dirty);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field with separate controls\n const fromInvalid = this.props.fromControl.invalid && (this.props.fromControl.touched || this.props.fromControl.dirty);\n const toInvalid = this.props.toControl.invalid && (this.props.toControl.touched || this.props.toControl.dirty);\n return fromInvalid || toInvalid;\n }\n return false;\n }\n\n get Errors(): string[] {\n const keys = Object.keys(this.props.errors || {});\n const errors = [];\n \n keys.map((e: string) => {\n if (this.props.control && this.props.control.hasError(e)) {\n // Normal field\n errors.push(this.props.errors[e]);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field - check both controls\n const fromLabel = this.props.fromLabel || 'Inicial';\n const toLabel = this.props.toLabel || 'Final';\n \n if (this.props.fromControl.hasError(e)) {\n errors.push(`${fromLabel}: ${this.props.errors[e]}`);\n }\n if (this.props.toControl.hasError(e)) {\n errors.push(`${toLabel}: ${this.props.errors[e]}`);\n }\n }\n });\n \n return errors;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hour-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonDatetime],\n template: ` <ion-datetime [formControl]=\"props.control\" presentation=\"time\"></ion-datetime>`,\n styleUrls: ['./hour-input.component.scss'],\n})\n/**\n * val-hour-input\n *\n * A time picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-hour-input [props]=\"{ control: myControl }\"></val-hour-input>\n *\n * @input props: InputMetadata - Configuration for the time input (form control, etc.)\n */\nexport class HourInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the time input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronForwardOutline } from 'ionicons/icons';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { LinkMetadata } from './types';\n\n@Component({\n selector: 'val-link',\n standalone: true,\n imports: [IonButton, IonIcon, IonText],\n template: `\n <div>\n <ion-button type=\"button\" [color]=\"props.color\" fill=\"clear\" [size]=\"props.size\" (click)=\"onClickHandler()\">\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n <ion-text>{{ props.text }}</ion-text>\n </ion-button>\n </div>\n `,\n styleUrls: ['./link.component.scss'],\n})\n/**\n * val-link\n *\n * A stylized link button with navigation support for internal, in-app, or new tab links.\n *\n * @example\n * <val-link [props]=\"{ text: 'Go', color: 'primary', link: '/home', type: 'internal' }\" (onClick)=\"handler($event)\"></val-link>\n *\n * @input props: LinkMetadata - Configuration for the link (text, color, link, type, etc.)\n * @output onClick - Emits the token of the clicked link\n */\nexport class LinkComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {LinkMetadata}\n * @property text - The link text.\n * @property color - The button color (Ionic color string).\n * @property link - The URL or route to navigate to.\n * @property type - The navigation type ('internal', 'browse', 'tab').\n * @property token - Optional token for event identification.\n * @property size - The button size (optional).\n */\n @Input()\n props: LinkMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n service = inject(NavigationService);\n\n constructor() {\n addIcons({ chevronForwardOutline });\n }\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit(this.props.token);\n\n switch (this.props.type) {\n case 'internal':\n this.service.navigateByUrl(this.props.link);\n break;\n case 'browse':\n this.service.navigateInApp(this.props.link);\n break;\n case 'tab':\n this.service.openInNewTab(this.props.link);\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { TitleBlockMetada } from './types';\n\n@Component({\n selector: 'val-title-block',\n standalone: true,\n imports: [CommonModule, TitleComponent, DisplayComponent],\n template: `\n <div [ngClass]=\"['titles-container', props.position]\">\n <val-title\n *ngIf=\"props.aboveTitle\"\n [props]=\"{\n content: props.aboveTitle.content | uppercase,\n color: props.aboveTitle.color,\n bold: false,\n size: props.aboveTitle.size,\n }\"\n ></val-title>\n <val-display\n *ngIf=\"props.title\"\n [props]=\"{\n content: props.title.content,\n color: props.title.color,\n size: props.title.size,\n }\"\n ></val-display>\n <val-title\n style=\"margin-top: 16px;\"\n *ngIf=\"props.bellowTitle\"\n [props]=\"{\n content: props.bellowTitle.content,\n color: props.bellowTitle.color,\n bold: false,\n size: props.bellowTitle.size,\n thin: props.bellowTitle.thin,\n }\"\n ></val-title>\n </div>\n `,\n styleUrls: ['./title-block.component.scss'],\n})\n/**\n * val-title-block\n *\n * Displays a block of titles (above, main, below) with configurable styles and positions.\n *\n * @example\n * <val-title-block [props]=\"{ title: {...}, aboveTitle: {...}, bellowTitle: {...}, position: 'center' }\"></val-title-block>\n *\n * @input props: TitleBlockMetada - Configuration for the title block (title, aboveTitle, bellowTitle, position)\n */\nexport class TitleBlockComponent implements OnInit, OnChanges {\n @Input()\n props: TitleBlockMetada;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n}\n","// src/app/layout/layout.component.ts (solo la parte de styles)\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { LinkComponent } from '../link/link.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { IconService } from '../../../services/icons.service';\nimport { InfoMetadata } from './types';\n\n@Component({\n selector: 'val-info',\n standalone: true,\n imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent],\n template: `\n @if (props.image) {\n <val-image style=\"display: contents;\" [props]=\"props.image\" />\n }\n <val-title-block style=\"display: block;margin-top: 16px;\" [props]=\"props.title\" />\n\n @if (props.link) {\n <val-link [props]=\"props.link\" />\n }\n\n @if (props.actions) {\n <val-button-group [props]=\"props.actions\" />\n }\n `,\n styles: ``,\n})\nexport class InfoComponent {\n icon = inject(IconService);\n\n @Input() props: InfoMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronDown } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PopoverSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-popover-selector',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSelect, IonSelectOption, IonLabel],\n template: `\n <div class=\"popover-selector-container\">\n <ion-label *ngIf=\"props.label\" class=\"selector-label\">{{ props.label }}</ion-label>\n <ion-select\n [value]=\"props.selectedValue\"\n [placeholder]=\"getPlaceholderText()\"\n [interface]=\"props.interface || 'popover'\"\n [multiple]=\"props.multiple || false\"\n [disabled]=\"props.disabled || false\"\n [cancelText]=\"getCancelText()\"\n [okText]=\"getOkText()\"\n (ionChange)=\"onSelectionChange($event)\"\n class=\"popover-selector-select\"\n >\n <ion-button\n slot=\"trigger\"\n [fill]=\"props.fill || 'clear'\"\n [size]=\"props.size || 'default'\"\n [shape]=\"'round'\"\n [color]=\"props.color || 'medium'\"\n [disabled]=\"props.disabled || false\"\n class=\"selector-trigger\"\n >\n <ion-icon *ngIf=\"props.icon\" [name]=\"props.icon\" slot=\"start\"> </ion-icon>\n\n <span class=\"trigger-text\">{{ getDisplayText() }}</span>\n\n <ion-icon name=\"chevron-down-outline\" slot=\"end\" class=\"chevron-icon\"> </ion-icon>\n </ion-button>\n\n <ion-select-option *ngFor=\"let option of props.options\" [value]=\"option.value\" [disabled]=\"option.disabled\">\n <div class=\"option-content\">\n <ion-icon *ngIf=\"option.icon\" [name]=\"option.icon\" class=\"option-icon\"> </ion-icon>\n <span>{{ option.label }}</span>\n </div>\n </ion-select-option>\n </ion-select>\n </div>\n `,\n styleUrls: ['./popover-selector.component.scss'],\n})\n/**\n * val-popover-selector\n *\n * A generic reusable popover selector component that can be used for any type of selection.\n * Provides a button trigger that opens a popover with selectable options.\n *\n * @example\n * // Basic usage\n * <val-popover-selector\n * [props]=\"selectorProps\"\n * (selectionChange)=\"onSelectionChange($event)\">\n * </val-popover-selector>\n *\n * @example\n * // With icon and custom styling\n * const selectorProps: PopoverSelectorMetadata = {\n * options: [\n * { value: 'option1', label: 'Option 1', icon: 'star' },\n * { value: 'option2', label: 'Option 2', icon: 'heart' }\n * ],\n * selectedValue: 'option1',\n * label: 'Choose option',\n * icon: 'settings',\n * color: 'primary',\n * size: 'large',\n * fill: 'solid'\n * };\n *\n * @input props: PopoverSelectorMetadata - Configuration for the selector\n * @output selectionChange: EventEmitter<string | string[]> - Emitted when selection changes\n */\nexport class PopoverSelectorComponent {\n /**\n * Popover selector configuration object.\n * @type {PopoverSelectorMetadata}\n */\n @Input()\n props: PopoverSelectorMetadata;\n\n /**\n * Event emitted when the selection changes.\n * Emits the selected value(s).\n */\n @Output()\n selectionChange = new EventEmitter<string | string[]>();\n\n private langService = inject(LangService);\n\n constructor() {\n // Register required icons\n addIcons({ chevronDown });\n }\n\n /**\n * Get reactive placeholder text.\n */\n getPlaceholderText(): string {\n return this.props.placeholder || this.langService.getText('_global', 'select', 'Seleccionar...');\n }\n\n /**\n * Get reactive cancel text.\n */\n getCancelText(): string {\n return this.props.cancelText || this.langService.getText('_global', 'cancel', 'Cancelar');\n }\n\n /**\n * Get reactive ok text.\n */\n getOkText(): string {\n return this.props.okText || this.langService.getText('_global', 'ok', 'Aceptar');\n }\n\n /**\n * Handle selection change from the ion-select.\n * @param event - The ion-select change event\n */\n onSelectionChange(event: any) {\n const selectedValue = event.detail.value;\n this.selectionChange.emit(selectedValue);\n }\n\n /**\n * Get the display text for the trigger button.\n * Shows the selected option's label or placeholder.\n * @returns The display text\n */\n getDisplayText(): string {\n if (!this.props.selectedValue) {\n return this.getPlaceholderText();\n }\n\n if (Array.isArray(this.props.selectedValue)) {\n // Multiple selection\n if (this.props.selectedValue.length === 0) {\n return this.getPlaceholderText();\n }\n if (this.props.selectedValue.length === 1) {\n const option = this.props.options.find(opt => opt.value === this.props.selectedValue[0]);\n return option?.label || this.props.selectedValue[0];\n }\n const selectedText = this.langService.getText('_global', 'selected', 'seleccionados');\n return `${this.props.selectedValue.length} ${selectedText}`;\n }\n\n // Single selection\n const selectedOption = this.props.options.find(opt => opt.value === this.props.selectedValue);\n return selectedOption?.label || this.props.selectedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport { globe, language } from 'ionicons/icons';\nimport { Observable, Subscription, combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LangOption } from '../../../services/lang-provider/types';\nimport { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';\nimport { PopoverOption, PopoverSelectorMetadata } from '../popover-selector/types';\nimport { LanguageSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-language-selector',\n standalone: true,\n imports: [CommonModule, PopoverSelectorComponent],\n template: `\n <val-popover-selector [props]=\"popoverProps\" (selectionChange)=\"onLanguageChange($event)\"> </val-popover-selector>\n `,\n styleUrls: ['./language-selector.component.scss'],\n})\n/**\n * val-language-selector\n *\n * A specialized language selector component that integrates with the LangService.\n * Uses the popover-selector component internally and provides language-specific functionality.\n *\n * @example\n * // Basic usage (auto-detects languages from LangService)\n * <val-language-selector\n * [props]=\"{ showLabel: true, showFlags: true }\">\n * </val-language-selector>\n *\n * @example\n * // Custom configuration\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * label: 'Choose Language',\n * showFlags: true,\n * color: 'primary',\n * size: 'large',\n * fill: 'outline',\n * customLanguageNames: {\n * 'es': 'Español',\n * 'en': 'English',\n * 'fr': 'Français'\n * }\n * };\n *\n * @example\n * // With reactive content\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * labelConfig: {\n * className: 'myComponent',\n * key: 'languageLabel',\n * fallback: 'Language'\n * },\n * color: 'tertiary'\n * };\n *\n * @input props: LanguageSelectorMetadata - Configuration for the language selector\n * @output languageChange: EventEmitter<string> - Emitted when language changes\n */\nexport class LanguageSelectorComponent implements OnInit, OnDestroy {\n /**\n * Language selector configuration object.\n * @type {LanguageSelectorMetadata}\n */\n @Input()\n props: LanguageSelectorMetadata = {};\n\n /**\n * Event emitted when the language selection changes.\n * Emits the selected language code.\n */\n @Output()\n languageChange = new EventEmitter<string>();\n\n /** Popover selector configuration */\n popoverProps: PopoverSelectorMetadata;\n\n /** Current language observable */\n currentLanguage$: Observable<LangOption>;\n\n /** Available languages observable */\n availableLanguages$: Observable<LangOption[]>;\n\n /** Label observable for reactive content */\n label$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n /** Default language display names */\n private readonly defaultLanguageNames: Record<string, string> = {\n es: 'Español',\n en: 'English',\n fr: 'Français',\n de: 'Deutsch',\n pt: 'Português',\n it: 'Italiano',\n zh: '中文',\n ja: '日本語',\n ko: '한국어',\n ru: 'Русский',\n ar: 'العربية',\n };\n\n /** Default flag icons for languages */\n private readonly defaultLanguageFlags: Record<string, string> = {\n es: '🇪🇸',\n en: '🇺🇸',\n fr: '🇫🇷',\n de: '🇩🇪',\n pt: '🇵🇹',\n it: '🇮🇹',\n zh: '🇨🇳',\n ja: '🇯🇵',\n ko: '🇰🇷',\n ru: '🇷🇺',\n ar: '🇸🇦',\n };\n\n constructor(private langService: LangService) {\n // Register required icons\n addIcons({ language, globe });\n }\n\n ngOnInit() {\n this.initializeLanguageState();\n this.initializeLabel();\n this.initializePopoverProps();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeLanguageState() {\n // Get current language and available languages from LangService\n this.currentLanguage$ = this.langService.currentLang$;\n this.availableLanguages$ = this.currentLanguage$.pipe(\n map(() => this.props.availableLanguages || this.langService.availableLangs)\n );\n }\n\n private initializeLabel() {\n // Initialize label observable based on configuration\n if (this.props.label !== undefined) {\n // Static label\n this.label$ = of(this.props.label);\n } else if (this.props.labelConfig) {\n // Reactive label\n this.label$ = this.langService.getContent(\n this.props.labelConfig.className || '_global',\n this.props.labelConfig.key,\n this.props.labelConfig.fallback || 'Language'\n );\n } else {\n // Default label from global content\n this.label$ = this.langService.getContent('_global', 'language', 'Idioma');\n }\n }\n\n private initializePopoverProps() {\n // Subscribe to language state changes and content changes to update popover props\n const languageSubscription = combineLatest([\n this.availableLanguages$,\n this.currentLanguage$,\n this.langService.currentLang$, // This will trigger updates when language changes\n ]).subscribe(([availableLanguages, currentLanguage]) => {\n this.updatePopoverProps(availableLanguages, currentLanguage);\n });\n this.subscriptions.add(languageSubscription);\n\n // Subscribe to label changes\n const labelSubscription = this.label$.subscribe(label => {\n if (this.popoverProps) {\n this.popoverProps = {\n ...this.popoverProps,\n label: this.props.showLabel !== false ? label : undefined,\n };\n }\n });\n this.subscriptions.add(labelSubscription);\n }\n\n private updatePopoverProps(availableLanguages: LangOption[], currentLanguage: LangOption) {\n // Convert language codes to popover options\n const options: PopoverOption[] = availableLanguages.map(lang => ({\n value: lang,\n label: this.getLanguageDisplayName(lang),\n icon: this.props.showFlags ? undefined : undefined, // We'll use text flags instead\n }));\n\n // Create popover configuration\n this.popoverProps = {\n options,\n selectedValue: currentLanguage,\n label: this.props.showLabel !== false ? '' : undefined, // Will be set by label subscription\n icon: 'language',\n placeholder: this.langService.getText('_global', 'selectLanguage', 'Seleccionar idioma...'),\n color: this.props.color || 'medium',\n size: this.props.size || 'default',\n fill: this.props.fill || 'outline',\n shape: this.props.shape,\n expand: this.props.expand,\n disabled: this.props.disabled || false,\n interface: 'popover',\n showCheckmark: true,\n multiple: false,\n cancelText: 'Cancelar',\n okText: 'Aceptar',\n };\n }\n\n private getLanguageDisplayName(languageCode: string): string {\n // Use custom names if provided\n if (this.props.customLanguageNames?.[languageCode]) {\n const customName = this.props.customLanguageNames[languageCode];\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n return flag ? `${flag} ${customName}` : customName;\n }\n\n // Use reactive content for translated language names\n // Note: This will use the current language since getLanguageDisplayName is called during subscription updates\n const translatedName = this.langService.getText('_global', `languageName_${languageCode}`);\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n\n if (translatedName && translatedName !== `languageName_${languageCode}`) {\n return flag ? `${flag} ${translatedName}` : translatedName;\n }\n\n // Fallback to default names, then to code\n const defaultName = this.defaultLanguageNames[languageCode] || languageCode.toUpperCase();\n return flag ? `${flag} ${defaultName}` : defaultName;\n }\n\n /**\n * Handle language selection change.\n * @param selectedLanguage - The selected language code(s)\n */\n onLanguageChange(selectedLanguage: string | string[]) {\n if (typeof selectedLanguage === 'string') {\n // Update the language service\n this.langService.setLang(selectedLanguage);\n\n // Emit the change event\n this.languageChange.emit(selectedLanguage);\n }\n }\n}\n","/**\n * Service for managing application themes (light, dark, auto).\n * Handles user preferences, system theme detection, and theme toggling.\n * Uses localStorage to persist the selected theme.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { THEME } from '../shared/constants/storage';\nimport { LocalStorageService } from './local-storage.service';\n\nexport enum ThemeOption {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n /**\n * Indicates if the light theme is active.\n */\n lightToggle = false;\n /**\n * Indicates if the dark theme is active.\n */\n darkToggle = false;\n /**\n * Indicates if the auto theme is active.\n */\n autoToggle = false;\n /**\n * The current selected theme option.\n */\n currentOption = ThemeOption.AUTO;\n /**\n * Enum with all available theme options.\n */\n themeOptions = ThemeOption;\n /**\n * Whether the system prefers dark mode.\n */\n prefersDark = false;\n /**\n * The default theme option.\n */\n default = ThemeOption.AUTO;\n /**\n * Observable for the current theme.\n */\n theme: BehaviorSubject<ThemeOption>;\n\n constructor() {\n const current = LocalStorageService.get<ThemeOption>(THEME);\n console.log('💡 ThemeConfig current::: ', current);\n this.theme = new BehaviorSubject<ThemeOption>(current || this.default);\n this.currentOption = this.Theme;\n console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);\n this.toggleUserPreference(this.currentOption);\n\n const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.prefersDark = prefersDarkQuery.matches;\n this.handleAutoConfiguration();\n\n prefersDarkQuery.addEventListener('change', mediaQuery => {\n console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);\n this.prefersDark = mediaQuery.matches;\n this.handleAutoConfiguration();\n });\n }\n\n private handleAutoConfiguration() {\n if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n }\n\n private handleDarkPreference() {\n this.toggleTheme(ThemeOption.DARK, true);\n this.toggleTheme(ThemeOption.LIGHT, false);\n }\n\n private handleLightPreference() {\n this.toggleTheme(ThemeOption.LIGHT, true);\n this.toggleTheme(ThemeOption.DARK, false);\n }\n\n /**\n * Returns true if the system prefers dark mode.\n */\n get IsDark(): boolean {\n return this.prefersDark;\n }\n\n /**\n * Gets the current theme option.\n */\n get Theme(): ThemeOption {\n return this.theme.value;\n }\n\n /**\n * Sets the current theme option and persists it.\n */\n set Theme(theme: ThemeOption) {\n this.theme.next(theme);\n LocalStorageService.set<ThemeOption>(THEME, theme);\n }\n\n /**\n * Toggles a theme class on the document body.\n * @param name The theme name\n * @param shouldAdd Whether to add or remove the class\n */\n toggleTheme(name: string, shouldAdd: boolean) {\n console.log('toggleTheme::: ', name, shouldAdd);\n document.body.classList.toggle(name, shouldAdd);\n }\n\n /**\n * Sets the user theme preference and updates toggles and theme classes.\n * @param option The selected theme option\n */\n toggleUserPreference(option: ThemeOption) {\n this.currentOption = option;\n this.Theme = option;\n this.lightToggle = option === ThemeOption.LIGHT;\n this.darkToggle = option === ThemeOption.DARK;\n this.autoToggle = option === ThemeOption.AUTO;\n\n switch (option) {\n case ThemeOption.LIGHT:\n this.handleLightPreference();\n break;\n case ThemeOption.DARK:\n this.handleDarkPreference();\n break;\n case ThemeOption.AUTO:\n if (this.prefersDark) {\n this.handleDarkPreference();\n } else {\n this.handleLightPreference();\n }\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { LayeredCardMetadata } from './types';\n\n@Component({\n selector: 'layered-card',\n standalone: true,\n imports: [CommonModule, ButtonGroupComponent, TitleBlockComponent],\n template: `\n <div\n class=\"fun-card\"\n [class.big-space]=\"props.bigSpace\"\n [class.hoverable]=\"props.hoverable\"\n [class.layered]=\"props.mode === 'layered'\"\n [class.poster]=\"props.mode === 'poster'\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : color(props.background),\n minHeight: props.withMin ? '340px' : 'auto',\n }\"\n >\n @if (props.mode === 'poster') {\n <img\n class=\"poster-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n @if (props.mode === 'layered') {\n <img\n class=\"layer-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n\n <section>\n <val-title-block [props]=\"props.content\" />\n @if (props.actions) {\n <val-button-group style=\"display:block; margin-top: 16px;\" [props]=\"props.actions\" />\n }\n </section>\n </div>\n `,\n styleUrl: './layered-card.component.scss',\n})\nexport class LayeredCardComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: LayeredCardMetadata;\n\n color(background) {\n if (!background) {\n return '';\n }\n return resolveColor(background);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { LinkCakeMetadata } from './types';\n\n@Component({\n selector: 'val-links-cake',\n standalone: true,\n imports: [CommonModule, TitleComponent, HrefComponent],\n template: `\n <div>\n @if (props.title) {\n <div class=\"title\">\n <val-title [props]=\"{ content: props.title, color: 'dark', bold: false, size: props.size }\"></val-title>\n </div>\n }\n <div class=\"link\" *ngFor=\"let l of props.links\">\n <val-href [props]=\"l\"></val-href>\n </div>\n </div>\n `,\n styleUrls: ['./links-cake.component.scss'],\n})\n/**\n * val-links-cake\n *\n * Displays a list of links with an optional title, styled as a \"cake\" of links.\n *\n * @example\n * <val-links-cake [props]=\"{ title: 'Links', links: [...], size: 'medium' }\"></val-links-cake>\n *\n * @input props: LinkCakeMetadata - Configuration for the links cake (title, links, size)\n */\nexport class LinksCakeComponent implements OnInit {\n /**\n * Links cake configuration object.\n * @type {LinkCakeMetadata}\n * @property title - The title for the links section (optional).\n * @property links - Array of link configurations.\n * @property size - The size of the title and links.\n */\n @Input()\n props: LinkCakeMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Removes diacritical marks (accents) from a string using Unicode normalization.\n * Useful for text search and comparison.\n *\n * @param text The input string\n * @returns The normalized string without diacritical marks\n *\n * @example\n * replaceSpecialChars('canción') // returns 'cancion'\n */\nexport const replaceSpecialChars = (text: string) =>\n text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IonSearchbar } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-searchbar',\n standalone: true,\n imports: [IonSearchbar],\n template: `\n <ion-searchbar\n mode=\"ios\"\n debounce=\"500\"\n placeholder=\"Búsqueda\"\n [disabled]=\"disabled\"\n showCancelButton=\"focus\"\n cancelButtonText=\"Cancelar\"\n (ionInput)=\"onSearch($event)\"\n (ionBlur)=\"onBlur()\"\n (ionFocus)=\"onFocus()\"\n >\n </ion-searchbar>\n `,\n styleUrls: ['./searchbar.component.scss'],\n})\n/**\n * val-searchbar\n *\n * A search bar component with debounce and event emitters for filtering, focus, and blur.\n *\n * @example\n * <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\"></val-searchbar>\n *\n * @input disabled - Whether the searchbar is disabled.\n * @output filterEvent - Emits the search term on input.\n * @output focusEvent - Emits when the searchbar gains focus.\n * @output blurEvent - Emits when the searchbar loses focus.\n */\nexport class SearchbarComponent {\n /**\n * Whether the searchbar is disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * Emits the search term on input.\n */\n @Output() filterEvent = new EventEmitter<string>();\n\n /**\n * Emits when the searchbar gains focus.\n */\n @Output() focusEvent = new EventEmitter<void>();\n\n /**\n * Emits when the searchbar loses focus.\n */\n @Output() blurEvent = new EventEmitter<void>();\n\n constructor() {}\n\n onSearch($event: any) {\n const searchTerm = $event.detail.value;\n this.filterEvent.emit(searchTerm);\n }\n\n onFocus() {\n this.focusEvent.emit();\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-multi-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <ion-item *ngIf=\"tempSelectedItems.length > 0\" lines=\"none\" color=\"light\">\n <ion-icon name=\"checkmark-circle-outline\" slot=\"start\" color=\"success\"></ion-icon>\n <ion-label>\n <h3>{{ tempSelectedItems.length }} item{{ tempSelectedItems.length === 1 ? '' : 's' }} seleccionado{{ tempSelectedItems.length === 1 ? '' : 's' }}</h3>\n </ion-label>\n </ion-item>\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-checkbox \n [checked]=\"isItemSelected(item)\" \n slot=\"start\"\n [disabled]=\"true\"\n ></ion-checkbox>\n <ion-label>{{ item[labelProperty] }}</ion-label>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n <ion-footer *ngIf=\"tempSelectedItems.length > 0\">\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"clearSelection()\">Limpiar</ion-button>\n <ion-button fill=\"solid\" (click)=\"applySelection()\">Aplicar ({{ tempSelectedItems.length }})</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n `,\n ],\n})\nexport class MultiSelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string;\n @Input() props: InputMetadata;\n\n private langService = inject(LangService);\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n tempSelectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n constructor() {\n this.label = this.langService.getText('_global', 'selectMultiple', 'Seleccionar múltiples');\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(() => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n \n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n\n const controlValue = this.props.control.value;\n if (!controlValue || controlValue === '') {\n this.selectedItems = [];\n return;\n }\n\n // Handle both array and string formats\n let valueArray: string[] = [];\n if (Array.isArray(controlValue)) {\n valueArray = controlValue;\n } else if (typeof controlValue === 'string') {\n valueArray = controlValue.split(',').filter(v => v.trim() !== '');\n }\n\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [opt[this.valueProperty], opt]));\n this.selectedItems = valueArray\n .map(value => map.get(value.toString().trim()))\n .filter(item => item !== undefined);\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event: any) {\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n this.syncControlValueWithSelectedItems();\n this.tempSelectedItems = [...this.selectedItems];\n this.updateDisplayValue();\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n const index = this.tempSelectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n this.tempSelectedItems.push(item);\n } else {\n this.tempSelectedItems.splice(index, 1);\n }\n }\n\n isItemSelected(item: any): boolean {\n return this.tempSelectedItems.some(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n }\n\n clearSelection() {\n this.tempSelectedItems = [];\n }\n\n applySelection() {\n this.selectedItems = [...this.tempSelectedItems];\n this.updateDisplayValue();\n this.applyChanges();\n this.cancelModal();\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n const values = this.selectedItems.map(item => item[this.valueProperty]);\n const stringValue = values.join(',');\n this.props.control.setValue(stringValue);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n this.props.control.updateValueAndValidity();\n \n // Debug validators if still having issues\n if (this.props.control.invalid) {\n console.warn('Control is invalid after setValue:', {\n value: this.props.control.value,\n errors: this.props.control.errors,\n validators: this.props.control.validator\n });\n }\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue('');\n }\n this.changeDetector.detectChanges();\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n Input,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\n\n@Component({\n selector: 'val-multi-select-simple',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectSimpleComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"multi-select-container\" (click)=\"toggleDropdown($event)\">\n <!-- Main input display -->\n <ion-input\n #mainInput\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n class=\"main-input\"\n [class.is-open]=\"isOpen\"\n />\n \n <!-- Dropdown icon -->\n <ion-icon \n name=\"chevron-down-outline\" \n class=\"dropdown-icon\" \n [class.rotated]=\"isOpen\"\n ></ion-icon>\n \n <!-- Hidden input for form control -->\n <ion-input \n style=\"position: absolute; opacity: 0; pointer-events: none;\" \n [formControl]=\"props?.control\" \n type=\"hidden\"\n />\n </div>\n\n <!-- Dropdown overlay -->\n <div \n class=\"dropdown-overlay\" \n [class.visible]=\"isOpen\"\n #dropdown\n >\n <!-- Search bar -->\n <div class=\"search-container\">\n <ion-searchbar\n #searchbar\n [placeholder]=\"searchPlaceholder\"\n (ionInput)=\"onSearch($event)\"\n [value]=\"searchTerm\"\n show-clear-button=\"focus\"\n ></ion-searchbar>\n </div>\n \n <!-- Action buttons -->\n <div class=\"actions-container\">\n <ion-button \n fill=\"clear\" \n size=\"small\" \n (click)=\"selectAll()\"\n [disabled]=\"filteredOptions.length === 0\"\n >\n Seleccionar todos\n </ion-button>\n <ion-button \n fill=\"clear\" \n size=\"small\" \n color=\"medium\" \n (click)=\"clearAll()\"\n [disabled]=\"selectedValues.length === 0\"\n >\n Limpiar\n </ion-button>\n </div>\n \n <!-- Options list -->\n <div class=\"options-container\">\n <ion-list class=\"options-list\">\n <ion-item \n *ngFor=\"let option of filteredOptions; trackBy: trackByFn\" \n button \n (click)=\"toggleOption(option)\"\n class=\"option-item\"\n >\n <ion-checkbox\n slot=\"start\"\n [checked]=\"isSelected(option)\"\n ></ion-checkbox>\n <ion-label>{{ option[labelProperty] }}</ion-label>\n </ion-item>\n \n <!-- No results message -->\n <ion-item *ngIf=\"filteredOptions.length === 0\" class=\"no-results\">\n <ion-label color=\"medium\">\n {{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </div>\n `,\n styleUrls: ['./multi-select-simple.component.scss']\n})\nexport class MultiSelectSimpleComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n @ViewChild('dropdown') dropdownRef!: ElementRef;\n @ViewChild('mainInput') mainInputRef!: ElementRef;\n\n @Input() props!: InputMetadata;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string = '';\n\n private langService = inject(LangService);\n private changeDetector = inject(ChangeDetectorRef);\n \n // Classic Angular properties\n isOpen = false;\n searchTerm = '';\n selectedValues: string[] = [];\n displayValue = '';\n filteredOptions: InputOption[] = [];\n searchPlaceholder: string = '';\n\n // ControlValueAccessor\n private onChange = (_value: any) => {};\n private onTouched = () => {};\n\n constructor() {\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n this.searchPlaceholder = this.langService.getText('_global', 'search', 'Buscar');\n \n // Close dropdown when clicking outside\n document.addEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeOptions();\n this.syncSelectedValues();\n this.updateDisplayValue();\n }\n\n ngOnDestroy() {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props'] && this.props) {\n this.initializeOptions();\n this.syncSelectedValues();\n this.updateDisplayValue();\n this.changeDetector.detectChanges();\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n const valueArray = this.parseValue(value);\n this.selectedValues = valueArray;\n this.updateDisplayValue();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Handle disabled state if needed\n }\n\n // Component methods\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n \n if (this.isOpen) {\n this.onTouched();\n // Focus search bar when opening\n setTimeout(() => {\n const searchbar = this.dropdownRef?.nativeElement?.querySelector('ion-searchbar');\n if (searchbar) {\n searchbar.setFocus();\n }\n }, 100);\n }\n }\n\n onSearch(event: any): void {\n this.searchTerm = event.detail.value || '';\n this.filterOptions();\n }\n\n toggleOption(option: InputOption): void {\n const value = String(option[this.valueProperty]);\n \n if (this.isSelected(option)) {\n // Remove from selection\n this.selectedValues = this.selectedValues.filter(v => v !== value);\n } else {\n // Add to selection\n this.selectedValues = [...this.selectedValues, value];\n }\n \n this.updateDisplayValue();\n this.emitValue();\n }\n\n selectAll(): void {\n const allValues = this.filteredOptions.map(option => String(option[this.valueProperty]));\n \n // Add only new values to avoid duplicates\n const newValues = allValues.filter(value => !this.selectedValues.includes(value));\n this.selectedValues = [...this.selectedValues, ...newValues];\n \n this.updateDisplayValue();\n this.emitValue();\n }\n\n clearAll(): void {\n this.selectedValues = [];\n this.updateDisplayValue();\n this.emitValue();\n }\n\n isSelected(option: InputOption): boolean {\n return this.selectedValues.includes(String(option[this.valueProperty]));\n }\n\n trackByFn(_index: number, option: InputOption): any {\n return option[this.valueProperty];\n }\n\n private handleClickOutside(event: Event): void {\n if (this.isOpen && \n !this.mainInputRef?.nativeElement?.contains(event.target) &&\n !this.dropdownRef?.nativeElement?.contains(event.target)) {\n this.isOpen = false;\n this.searchTerm = '';\n this.initializeOptions();\n }\n }\n\n private parseValue(value: any): string[] {\n if (!value) return [];\n if (Array.isArray(value)) return value.map(v => String(v));\n if (typeof value === 'string') {\n return value.split(',').map(v => v.trim()).filter(v => v !== '');\n }\n return [String(value)];\n }\n\n private emitValue(): void {\n const value = this.selectedValues.join(',');\n this.onChange(value);\n \n if (this.props?.control) {\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n }\n }\n\n private getOptionByValue(value: string): InputOption | undefined {\n return this.filteredOptions.find(option => \n String(option[this.valueProperty]) === String(value)\n );\n }\n\n private applyDefaultValue(): void {\n if (this.props) {\n applyDefaultValueToControl(this.props);\n }\n }\n\n private initializeOptions(): void {\n this.filteredOptions = this.props?.options || [];\n }\n \n private filterOptions(): void {\n if (!this.searchTerm) {\n this.initializeOptions();\n return;\n }\n \n const search = replaceSpecialChars(this.searchTerm.toLowerCase());\n this.filteredOptions = (this.props?.options || []).filter(option => {\n const label = option[this.labelProperty]\n ? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())\n : '';\n const value = option[this.valueProperty]\n ? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n }\n \n private updateDisplayValue(): void {\n if (this.selectedValues.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedValues.length === 1) {\n const option = this.getOptionByValue(this.selectedValues[0]);\n this.displayValue = option ? option[this.labelProperty] : '';\n } else {\n this.displayValue = `${this.selectedValues.length} elementos seleccionados`;\n }\n }\n\n private syncSelectedValues(): void {\n if (this.props?.control?.value) {\n const valueArray = this.parseValue(this.props.control.value);\n this.selectedValues = valueArray;\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { NotesBoxMetadata } from './types';\n\n@Component({\n selector: 'val-notes-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, TextComponent],\n template: `\n <val-box\n [props]=\"{\n icon: '',\n bordered: false,\n color: props.color,\n leftBorder: true,\n rounded: props.rounded,\n padding: props.padding,\n }\"\n >\n <div [ngClass]=\"['content-container', props.size]\" body>\n @if (props.prefix) {\n <val-text\n [props]=\"{ content: props.prefix, color: props.textColor, bold: true, size: props.size }\"\n ></val-text>\n }\n <val-text [props]=\"{ content: props.text, color: props.textColor, bold: false, size: props.size }\"></val-text>\n </div>\n </val-box>\n `,\n styleUrls: ['./notes-box.component.scss'],\n})\n/**\n * val-notes-box\n *\n * Displays a styled notes/info box with optional prefix and configurable color, size, and padding.\n *\n * @example\n * <val-notes-box [props]=\"{ text: 'Note', prefix: 'Info', color: 'primary', textColor: 'dark', size: 'medium', rounded: true, padding: '8px' }\"></val-notes-box>\n *\n * @input props: NotesBoxMetadata - Configuration for the notes box (text, prefix, color, textColor, size, rounded, padding)\n */\nexport class NotesBoxComponent implements OnInit {\n /**\n * Notes box configuration object.\n * @type {NotesBoxMetadata}\n * @property text - The main text content.\n * @property prefix - Optional prefix text (bold).\n * @property color - The background color of the box.\n * @property textColor - The color of the text.\n * @property size - The size of the text and box.\n * @property rounded - Whether the box has rounded corners.\n * @property padding - Custom padding for the box.\n */\n @Input()\n props: NotesBoxMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { IonInput, IonLabel } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-from-to',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonLabel],\n template: `\n <div class=\"number-from-to-container\">\n <ion-label position=\"stacked\">{{ props.fromLabel || 'Inicial' }}</ion-label>\n <ion-input\n [formControl]=\"fromControl\"\n type=\"number\"\n [placeholder]=\"props.fromPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n\n <ion-label position=\"stacked\">{{ props.toLabel || 'Final' }}</ion-label>\n <ion-input\n [formControl]=\"toControl\"\n type=\"number\"\n [placeholder]=\"props.toPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n </div>\n `,\n styleUrls: ['./number-from-to.component.scss'],\n})\nexport class NumberFromToComponent implements OnInit {\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values if configured\n if (this.props?.withDefault || this.props?.value) {\n this.applyDefaultValues();\n }\n }\n\n private applyDefaultValues() {\n const defaultValue = this.resolveDefaultValue();\n if (defaultValue !== null) {\n if (typeof defaultValue === 'object' && defaultValue.from !== undefined) {\n this.fromControl?.setValue(defaultValue.from);\n this.toControl?.setValue(defaultValue.to);\n } else {\n // Si es un valor simple, aplicarlo a ambos controles\n this.fromControl?.setValue(defaultValue);\n this.toControl?.setValue(defaultValue);\n }\n this.fromControl?.markAsPristine();\n this.toControl?.markAsPristine();\n this.fromControl?.updateValueAndValidity();\n this.toControl?.updateValueAndValidity();\n }\n }\n\n private resolveDefaultValue(): any {\n // Explicit value takes precedence\n if (this.props.value !== undefined && this.props.value !== null && this.props.value !== '') {\n return this.parseValue(this.props.value);\n }\n\n // No default configuration\n if (!this.props.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof this.props.withDefault === 'string') {\n return this.parseValue(this.props.withDefault);\n }\n\n // Auto default value (withDefault === true)\n return { from: 0, to: 0 };\n }\n\n private parseValue(value: string): any {\n try {\n // Try to parse as JSON first (for object values)\n return JSON.parse(value);\n } catch {\n // If not JSON, treat as number\n const numValue = parseFloat(value) || 0;\n return { from: numValue, to: numValue };\n }\n }\n\n get fromControl(): FormControl {\n return this.props.fromControl;\n }\n\n get toControl(): FormControl {\n return this.props.toControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"number\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./number-input.component.scss'],\n})\n/**\n * val-number-input\n *\n * A number input field integrated with Angular forms.\n *\n * @example\n * <val-number-input [props]=\"{ control: myControl, placeholder: 'Enter a number' }\"></val-number-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class NumberInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonInput } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-password-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonButton, IonIcon],\n template: `\n <div class=\"input-container\">\n <ion-input\n class=\"sign-in__input-password\"\n [formControl]=\"props.control\"\n [type]=\"hidePassword ? 'password' : 'text'\"\n [placeholder]=\"props.placeholder\"\n ></ion-input>\n <ion-button color=\"dark\" fill=\"clear\" (click)=\"hidePassword = !hidePassword\" size=\"small\">\n <ion-icon slot=\"icon-only\" [name]=\"hidePassword ? 'eye-off-outline' : 'eye-outline'\"></ion-icon>\n </ion-button>\n </div>\n `,\n styleUrls: ['./password-input.component.scss'],\n})\n/**\n * val-password-input\n *\n * A password input field with show/hide toggle, integrated with Angular forms.\n *\n * @example\n * <val-password-input [props]=\"{ control: myControl, placeholder: 'Enter password' }\"></val-password-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class PasswordInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n hidePassword = true;\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { ActionHeaderComponent } from '../action-header/action-header.component';\nimport { PillMetadata } from './types';\n\n@Component({\n selector: 'val-pill',\n standalone: true,\n imports: [CommonModule, ActionHeaderComponent],\n template: `\n <div\n [id]=\"props.token\"\n class=\"fun-card\"\n [class.bordered]=\"props.bordered\"\n [class.hoverable]=\"props.hoverable\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n >\n <val-action-header style=\"width: 100%;\" [props]=\"props.content\" />\n </div>\n `,\n styleUrls: ['./pill.component.scss'],\n})\nexport class PillComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: PillMetadata;\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgOtpInputComponent, NgOtpInputConfig, NgOtpInputModule } from 'ng-otp-input';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-pin-input',\n standalone: true,\n imports: [NgOtpInputModule],\n template: `\n <div class=\"otp\">\n <ng-otp-input [formCtrl]=\"props.control\" [config]=\"otpInputConfig\"></ng-otp-input>\n </div>\n `,\n styleUrls: ['./pin-input.component.scss'],\n})\n/**\n * val-pin-input\n *\n * A PIN code input using ng-otp-input, integrated with Angular forms.\n *\n * @example\n * <val-pin-input [props]=\"{ control: myControl }\"></val-pin-input>\n *\n * @input props: InputMetadata - Configuration for the PIN input (form control, etc.)\n */\nexport class PinInputComponent implements OnInit {\n @ViewChild(NgOtpInputComponent, { static: false }) pinCode: NgOtpInputComponent | undefined;\n\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the PIN input.\n */\n @Input() props: InputMetadata;\n\n codeLength = 5;\n otpInputConfig: NgOtpInputConfig = {\n inputStyles: {\n 'font-size': '32px',\n width: '58px',\n height: '60px',\n },\n inputClass: 'otp-input-box',\n length: this.codeLength,\n allowNumbersOnly: true,\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n reset() {\n if (this.pinCode) {\n this.pinCode.setValue('');\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\n\nimport * as Prism from 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PlainCodeBoxMetadata } from './types';\n\n@Component({\n selector: 'val-plain-code-box',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-box-container\">\n <ion-button *ngIf=\"props.showCopyButton !== false\" fill=\"clear\" class=\"copy-button\" (click)=\"copyCode()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.language || 'bash')\" #codeBlock><ng-container *ngFor=\"let line of props.lines; let i = index\"><span [class]=\"line.type ? 'line-' + line.type : 'line-normal'\">{{ line.text }}</span><br *ngIf=\"i < props.lines.length - 1\">\n</ng-container></code></pre>\n </div>\n `,\n styleUrls: ['./plain-code-box.component.scss'],\n})\nexport class PlainCodeBoxComponent implements AfterViewInit, OnChanges {\n toast = inject(ToastController);\n cdr = inject(ChangeDetectorRef);\n langService = inject(LangService);\n\n @Input() props: PlainCodeBoxMetadata = { lines: [] };\n\n @ViewChild('codeBlock') codeBlock!: ElementRef<HTMLElement>;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props'] && !changes['props'].firstChange) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeBlock && this.props.lines && this.props.lines.length > 0) {\n Prism.highlightElement(this.codeBlock.nativeElement);\n }\n }\n\n async copyCode() {\n const fullCode = this.props.lines.map(line => line.text).join('\\n');\n if (fullCode) {\n await Clipboard.write({\n string: fullCode,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProgressBarComponent } from '../../atoms/progress-bar/progress-bar.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ProgressStatusMetadata } from './types';\n\n//TODO: support automatic or manual interval for messages. Include the interval number as a parameter.\n@Component({\n selector: 'val-progress-status',\n standalone: true,\n imports: [TitleBlockComponent, ProgressBarComponent, TextComponent],\n template: `\n <div class=\"status-container\">\n <div class=\"title-container\">\n <val-title-block\n [props]=\"{\n position: 'center',\n aboveTitle: props.titles.aboveTitle,\n title: props.titles.title,\n bellowTitle: props.titles.bellowTitle,\n }\"\n ></val-title-block>\n </div>\n <div class=\"progress-bar-container\">\n <val-progress-bar\n [props]=\"{\n progress: props.progress,\n size: 'xlarge',\n color: props.color,\n rounded: true,\n type: 'determinate',\n buffer: 1,\n }\"\n ></val-progress-bar>\n </div>\n <div class=\"subtitle-container\">\n <div class=\"subtitle\" [class.blink]=\"blinking\">\n <val-text [props]=\"{ content: Content, color: 'medium', bold: false, size: props.size }\"></val-text>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./progress-status.component.scss'],\n})\n/**\n * val-progress-status\n *\n * Displays a progress bar with status messages and titles, useful for multi-step or loading processes.\n *\n * @example\n * <val-progress-status [props]=\"{ progress: 0.5, color: 'primary', size: 'medium', titles: {...}, messages: [...] }\"></val-progress-status>\n *\n * @input props: ProgressStatusMetadata - Configuration for the progress status (progress, color, size, titles, messages)\n */\nexport class ProgressStatusComponent implements OnInit {\n /**\n * Progress status configuration object.\n * @type {ProgressStatusMetadata}\n * @property progress - The progress value (0 to 1).\n * @property color - The color of the progress bar.\n * @property size - The size of the text and bar.\n * @property titles - Title block configuration.\n * @property messages - Array of status messages.\n */\n @Input()\n props: ProgressStatusMetadata;\n\n currentIndex = 0;\n blinking = false;\n\n constructor() {}\n\n ngOnInit() {\n setInterval(() => {\n this.blinking = !this.blinking;\n }, 1000);\n\n setInterval(() => {\n this.getNextMessage();\n }, 9000);\n }\n\n get Content(): string {\n return this.props.messages[this.currentIndex];\n }\n\n getNextMessage(): void {\n this.currentIndex = (this.currentIndex + 1) % this.props.messages.length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { PrompterMetadata } from './types';\n\n@Component({\n selector: 'val-prompter',\n standalone: true,\n imports: [CommonModule, BoxComponent, ButtonGroupComponent, TextComponent, HrefComponent],\n template: `\n <val-box\n class=\"teleprompter-container\"\n [props]=\"{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false, padding: props.padding }\"\n (onClick)=\"clickHandler()\"\n >\n <div class=\"container\" [class.teleprompter-content]=\"props.teleprompter\" body>\n <div>\n <val-text\n [props]=\"{\n content: props.content,\n color: '',\n bold: true,\n size: props.size,\n }\"\n ></val-text>\n </div>\n @if (props.buttons || props.hrefs) {\n <div class=\"actions-container\">\n <val-button-group\n class=\"buttons-container\"\n [props]=\"{ buttons: props.buttons, position: 'right', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n <val-href\n class=\"link\"\n *ngFor=\"let l of props.hrefs\"\n [props]=\"l\"\n (onClick)=\"clickHandler($event)\"\n ></val-href>\n </div>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./prompter.component.scss'],\n})\n/**\n * val-prompter\n *\n * Displays a prompt/info box with text, actions (buttons/links), and custom styles.\n *\n * @example\n * <val-prompter [props]=\"{ content: 'Message', buttons: [...], hrefs: [...], color: 'primary', size: 'medium' }\"></val-prompter>\n *\n * @input props: PrompterMetadata - Configuration for the prompter (content, buttons, hrefs, color, size, etc.)\n * @output onClick - Emits when an action is clicked\n */\nexport class PrompterComponent implements OnInit {\n /**\n * Prompter configuration object.\n * @type {PrompterMetadata}\n * @property content - The main text content.\n * @property buttons - Array of button configurations (optional).\n * @property hrefs - Array of link configurations (optional).\n * @property color - The background color of the box.\n * @property size - The size of the text and box.\n * @property bordered - Whether the box has a border.\n * @property padding - Custom padding for the box.\n * @property teleprompter - Whether to use teleprompter style (optional).\n */\n @Input()\n props: PrompterMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgFor } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-radio-input',\n standalone: true,\n imports: [NgFor, ReactiveFormsModule, IonRadioGroup, IonRadio],\n template: `\n <ion-radio-group [allowEmptySelection]=\"true\" [formControl]=\"props.control\">\n <ng-container *ngFor=\"let o of props.options\">\n <ion-radio [value]=\"o.id\">{{ o.name }}</ion-radio>\n <br />\n </ng-container>\n </ion-radio-group>\n `,\n styleUrls: ['./radio-input.component.scss'],\n})\n/**\n * val-radio-input\n *\n * A radio group input for selecting one option, integrated with Angular forms.\n *\n * @example\n * <val-radio-input [props]=\"{ control: myControl, options: [{ id: '1', name: 'Option 1' }] }\"></val-radio-input>\n *\n * @input props: InputMetadata - Configuration for the radio input (form control, options, etc.)\n */\nexport class RadioInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the radio input.\n * @property options - The available options for the radio group.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-select-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonSelect, IonSelectOption],\n template: `\n <ion-select\n [formControl]=\"props.control\"\n [label]=\"props.label\"\n [interfaceOptions]=\"customModalOptions\"\n interface=\"modal\"\n [placeholder]=\"[props.placeholder]\"\n cancelText=\"Cancelar\"\n okText=\"Ok\"\n >\n @for (o of props.options; track o.id) {\n <ion-select-option [value]=\"o.id\">{{ o.name }}</ion-select-option>\n }\n </ion-select>\n `,\n styleUrls: ['./select-input.component.scss'],\n})\n/**\n * val-select-input\n *\n * A select/dropdown input integrated with Angular forms, using Ionic's select component.\n *\n * @example\n * <val-select-input [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-input>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SearchSelectorComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n customModalOptions = {\n header: 'Seleccione',\n breakpoints: [0, 0.6],\n initialBreakpoint: 0.6,\n };\n\n constructor() {}\n\n ngOnInit() {\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n this.customModalOptions.header = this.props.label;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\n\n@Component({\n selector: 'val-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule],\n template: `\n <div class=\"select-container\" (click)=\"toggleDropdown($event)\">\n <!-- Main input display -->\n <ion-input\n #mainInput\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n class=\"main-input\"\n [class.is-open]=\"isOpen\"\n />\n \n <!-- Dropdown icon -->\n <ion-icon \n name=\"chevron-down-outline\" \n class=\"dropdown-icon\" \n [class.rotated]=\"isOpen\"\n ></ion-icon>\n \n <!-- Hidden input for form control -->\n <ion-input \n style=\"position: absolute; opacity: 0; pointer-events: none;\" \n [formControl]=\"props?.control\" \n type=\"hidden\"\n />\n </div>\n\n <!-- Dropdown overlay -->\n <div \n class=\"dropdown-overlay\" \n [class.visible]=\"isOpen\"\n #dropdown\n >\n <!-- Debug button -->\n <div class=\"search-container\" style=\"background: red; color: white; padding: 4px;\">\n <button (click)=\"debugOptions()\">DEBUG: {{ filteredOptions.length }} opciones</button>\n </div>\n \n <!-- Search bar -->\n <div class=\"search-container\" *ngIf=\"props?.options && props.options.length > 5\">\n <ion-searchbar\n #searchbar\n [placeholder]=\"'Buscar'\"\n (ionInput)=\"onSearch($event)\"\n [value]=\"searchTerm\"\n show-clear-button=\"focus\"\n [debounce]=\"200\"\n ></ion-searchbar>\n </div>\n \n <!-- Options list -->\n <div class=\"options-container\">\n <ion-list class=\"options-list\">\n <ion-item \n *ngFor=\"let option of filteredOptions; trackBy: trackByFn\" \n button \n (click)=\"selectOption(option)\"\n class=\"option-item\"\n >\n <ion-label>{{ option[labelProperty] }}</ion-label>\n <ion-icon \n *ngIf=\"isSelected(option)\" \n name=\"checkmark-outline\" \n slot=\"end\" \n color=\"primary\"\n ></ion-icon>\n </ion-item>\n \n <!-- No results message -->\n <ion-item *ngIf=\"filteredOptions.length === 0\" class=\"no-results\">\n <ion-label color=\"medium\">\n {{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}\n <!-- Debug info -->\n <br><small>Debug: {{ filteredOptions.length }} opciones | Props: {{ !!props }} | Search: \"{{ searchTerm }}\"</small>\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </div>\n `,\n styleUrls: ['./select-search.component.scss']\n})\nexport class SelectSearchComponent implements OnInit, OnDestroy, OnChanges {\n @ViewChild('dropdown') dropdownRef!: ElementRef;\n @ViewChild('mainInput') mainInputRef!: ElementRef;\n\n @Input() props!: InputMetadata;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string = '';\n\n private langService = inject(LangService);\n \n private changeDetector = inject(ChangeDetectorRef);\n \n // Classic Angular properties\n isOpen = false;\n searchTerm = '';\n selectedValue: string | null = null;\n displayValue = '';\n filteredOptions: InputOption[] = [];\n\n constructor() {\n this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');\n \n // Close dropdown when clicking outside\n document.addEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeOptions();\n this.syncSelectedValue();\n this.updateDisplayValue();\n }\n\n ngOnDestroy() {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props'] && this.props) {\n this.initializeOptions();\n this.syncSelectedValue();\n this.updateDisplayValue();\n this.changeDetector.detectChanges();\n }\n }\n\n // Component methods\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n \n if (this.isOpen) {\n // Focus search bar when opening if available\n setTimeout(() => {\n const searchbar = this.dropdownRef?.nativeElement?.querySelector('ion-searchbar');\n if (searchbar) {\n searchbar.setFocus();\n }\n }, 100);\n }\n }\n\n onSearch(event: any): void {\n this.searchTerm = event.detail.value || '';\n this.filterOptions();\n }\n\n selectOption(option: InputOption): void {\n const value = String(option[this.valueProperty]);\n this.selectedValue = value;\n this.isOpen = false;\n this.searchTerm = '';\n this.updateDisplayValue();\n this.initializeOptions(); // Reset filter\n \n // Update form control\n if (this.props?.control) {\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n }\n }\n\n isSelected(option: InputOption): boolean {\n return String(this.selectedValue) === String(option[this.valueProperty]);\n }\n\n trackByFn(_index: number, option: InputOption): any {\n return option[this.valueProperty];\n }\n\n private handleClickOutside(event: Event): void {\n if (this.isOpen && \n !this.mainInputRef?.nativeElement?.contains(event.target) &&\n !this.dropdownRef?.nativeElement?.contains(event.target)) {\n this.isOpen = false;\n this.searchTerm = '';\n this.initializeOptions();\n }\n }\n\n private getOptionByValue(value: string): InputOption | undefined {\n return this.filteredOptions.find(option => \n String(option[this.valueProperty]) === String(value)\n );\n }\n \n private initializeOptions(): void {\n this.filteredOptions = this.props?.options || [];\n }\n \n private filterOptions(): void {\n if (!this.searchTerm) {\n this.initializeOptions();\n return;\n }\n \n const search = replaceSpecialChars(this.searchTerm.toLowerCase());\n this.filteredOptions = (this.props?.options || []).filter(option => {\n const label = option[this.labelProperty]\n ? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())\n : '';\n const value = option[this.valueProperty]\n ? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n }\n \n private updateDisplayValue(): void {\n if (!this.selectedValue) {\n this.displayValue = '';\n return;\n }\n \n const option = this.getOptionByValue(this.selectedValue);\n this.displayValue = option ? option[this.labelProperty] : '';\n }\n\n private applyDefaultValue(): void {\n if (this.props) {\n applyDefaultValueToControl(this.props);\n }\n }\n\n debugOptions(): void {\n console.log('[SelectSearch] DEBUG CLICK:', {\n props: this.props,\n filteredOptions: this.filteredOptions,\n searchTerm: this.searchTerm,\n propsOptions: this.props?.options,\n displayValue: this.displayValue,\n selectedValue: this.selectedValue,\n isOpen: this.isOpen\n });\n }\n\n private syncSelectedValue(): void {\n if (this.props?.control?.value) {\n this.selectedValue = String(this.props.control.value);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { ComponentStates, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-text-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"text\" [placeholder]=\"props.placeholder\" /> `,\n styleUrls: ['./text-input.component.scss'],\n})\n/**\n * val-text-input\n *\n * A text input field integrated with Angular forms.\n *\n * @example\n * <val-text-input [props]=\"{ control: myControl, placeholder: 'Enter text', ... }\"></val-text-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)\n */\nexport class TextInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n * @property label, name, hint, type, validators, etc. - See InputMetadata for all options.\n */\n @Input() props: InputMetadata;\n\n states = ComponentStates;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ImageMetadata } from '../../atoms/image/types';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport {\n ArticleButtonElement,\n ArticleCodeElement,\n ArticleCustomElement,\n ArticleElement,\n ArticleHighlightElement,\n ArticleImageElement,\n ArticleListElement,\n ArticleMetadata,\n ArticleQuoteElement,\n ArticleSeparatorElement,\n ArticleSubtitleElement,\n ArticleTextElement,\n ArticleTitleElement,\n ArticleVideoElement,\n} from './types';\n\n@Component({\n selector: 'val-article',\n standalone: true,\n imports: [CommonModule, TitleComponent, TextComponent, ButtonComponent, ImageComponent],\n template: `\n <article\n class=\"val-article\"\n [class]=\"props.cssClass\"\n [ngClass]=\"{\n 'val-article--centered': props.centered,\n 'val-article--light': props.theme === 'light',\n 'val-article--dark': props.theme === 'dark',\n }\"\n [style.max-width]=\"props.maxWidth\"\n >\n <div\n *ngFor=\"let element of props.elements; trackBy: trackByFn\"\n class=\"val-article__element\"\n [class]=\"element.cssClass\"\n [ngClass]=\"getElementSpacingClass(element)\"\n [style.display]=\"element.visible === false ? 'none' : 'block'\"\n >\n <!-- Título -->\n <ng-container *ngIf=\"element.type === 'title'\">\n <val-title [props]=\"getTitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Subtítulo -->\n <ng-container *ngIf=\"element.type === 'subtitle'\">\n <val-title [props]=\"getSubtitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Texto/Párrafo -->\n <ng-container *ngIf=\"element.type === 'text' || element.type === 'paragraph'\">\n <val-text [props]=\"getTextElement(element).props\"></val-text>\n </ng-container>\n\n <!-- Cita -->\n <ng-container *ngIf=\"element.type === 'quote'\">\n <div class=\"val-article__quote\">\n <div class=\"val-article__quote-content\">\n <val-text [props]=\"getQuoteTextProps(element)\"></val-text>\n </div>\n <div *ngIf=\"getQuoteElement(element).props.author\" class=\"val-article__quote-author\">\n — {{ getQuoteElement(element).props.author }}\n <span *ngIf=\"getQuoteElement(element).props.source\" class=\"val-article__quote-source\">\n , {{ getQuoteElement(element).props.source }}\n </span>\n </div>\n </div>\n </ng-container>\n\n <!-- Texto destacado -->\n <ng-container *ngIf=\"element.type === 'highlight'\">\n <div\n class=\"val-article__highlight\"\n [ngClass]=\"{\n 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,\n }\"\n [style.background-color]=\"getHighlightColor(element)\"\n >\n <val-text [props]=\"getHighlightTextProps(element)\"></val-text>\n </div>\n </ng-container>\n\n <!-- Código -->\n <ng-container *ngIf=\"element.type === 'code'\">\n <div class=\"val-article__code\">\n <div *ngIf=\"getCodeElement(element).props.language\" class=\"val-article__code-language\">\n {{ getCodeElement(element).props.language }}\n </div>\n <pre\n class=\"val-article__code-content\"\n [ngClass]=\"{\n 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',\n }\"\n ><code>{{ getCodeElement(element).props.code }}</code></pre>\n </div>\n </ng-container>\n\n <!-- Lista -->\n <ng-container *ngIf=\"element.type === 'list'\">\n <ul *ngIf=\"getListElement(element).props.listType !== 'ordered'\" class=\"val-article__list\">\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n <span *ngIf=\"getListElement(element).props.listType === 'checklist'\" class=\"val-article__list-check\"\n >✓</span\n >\n {{ item.text }}\n </li>\n </ul>\n <ol\n *ngIf=\"getListElement(element).props.listType === 'ordered'\"\n class=\"val-article__list val-article__list--ordered\"\n >\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n {{ item.text }}\n </li>\n </ol>\n </ng-container>\n\n <!-- Botón -->\n <ng-container *ngIf=\"element.type === 'button'\">\n <div\n class=\"val-article__button-container\"\n [ngClass]=\"{\n 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',\n 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',\n 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',\n }\"\n >\n <val-button [props]=\"getButtonProps(element)\"></val-button>\n </div>\n </ng-container>\n\n <!-- Separador -->\n <ng-container *ngIf=\"element.type === 'separator'\">\n <div class=\"val-article__separator\">\n <hr\n *ngIf=\"getSeparatorElement(element).props.style === 'line'\"\n class=\"val-article__separator-line\"\n [ngClass]=\"{\n 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',\n 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',\n }\"\n />\n <div *ngIf=\"getSeparatorElement(element).props.style === 'dots'\" class=\"val-article__separator-dots\">\n • • •\n </div>\n <div\n *ngIf=\"getSeparatorElement(element).props.style === 'space'\"\n class=\"val-article__separator-space\"\n ></div>\n </div>\n </ng-container>\n\n <!-- Imagen -->\n <ng-container *ngIf=\"element.type === 'image'\">\n <val-image [props]=\"getImageMetadata(element)\"></val-image>\n </ng-container>\n\n <!-- Video -->\n <ng-container *ngIf=\"element.type === 'video'\">\n <div class=\"val-article__video\">\n <video\n [src]=\"getVideoElement(element).props.src\"\n [poster]=\"getVideoElement(element).props.poster\"\n [controls]=\"getVideoElement(element).props.controls !== false\"\n [autoplay]=\"getVideoElement(element).props.autoplay\"\n [muted]=\"getVideoElement(element).props.muted\"\n [style.max-width]=\"getVideoElement(element).props.maxWidth\"\n class=\"val-article__video-content\"\n >\n Tu navegador no soporta el elemento video.\n </video>\n <div *ngIf=\"getVideoElement(element).props.title\" class=\"val-article__video-title\">\n {{ getVideoElement(element).props.title }}\n </div>\n </div>\n </ng-container>\n\n <!-- Contenido personalizado -->\n <ng-container *ngIf=\"element.type === 'custom'\">\n <div class=\"val-article__custom\" [innerHTML]=\"getCustomElement(element).props.htmlContent\"></div>\n </ng-container>\n </div>\n </article>\n `,\n styleUrls: ['./article.component.scss'],\n // changeDetection: ChangeDetectionStrategy.OnPush, // Comentado temporalmente para debug\n})\n/**\n * val-article\n *\n * Componente para crear artículos, blogs y documentación de forma declarativa.\n * Permite combinar múltiples elementos (títulos, texto, imágenes, código, etc.)\n * con espaciado automático y soporte multi-idioma.\n *\n * @example Uso básico:\n * ```html\n * <val-article [props]=\"articleConfig\"></val-article>\n * ```\n *\n * @example Con ArticleBuilder:\n * ```typescript\n * articleConfig = new ArticleBuilder()\n * .title(titleProps)\n * .paragraph(textProps)\n * .code('console.log(\"Hello World\")', 'javascript')\n * .build();\n * ```\n *\n * @input props: ArticleMetadata - Configuración completa del artículo\n */\nexport class ArticleComponent implements OnInit {\n /**\n * Configuración del artículo\n * @type {ArticleMetadata}\n */\n @Input()\n props!: ArticleMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Validación básica\n if (!this.props || !this.props.elements) {\n console.warn('val-article: props.elements is required');\n }\n }\n\n /**\n * Función de trackBy para optimizar el rendering de elementos\n */\n trackByFn(index: number, element: ArticleElement): any {\n return element.id || index;\n }\n\n /**\n * Obtiene las clases CSS para el espaciado del elemento\n */\n getElementSpacingClass(element: ArticleElement): string {\n const spacing = element.spacing || this.props.defaultSpacing;\n const classes: string[] = [];\n\n if (spacing?.top) {\n classes.push(`val-article__spacing-top--${spacing.top}`);\n }\n if (spacing?.bottom) {\n classes.push(`val-article__spacing-bottom--${spacing.bottom}`);\n }\n if (spacing?.horizontal) {\n classes.push(`val-article__spacing-horizontal--${spacing.horizontal}`);\n }\n\n return classes.join(' ');\n }\n\n // === FUNCIONES DE TIPO PARA TYPESCRIPT ===\n\n getTitleElement(element: ArticleElement): ArticleTitleElement {\n return element as ArticleTitleElement;\n }\n\n getSubtitleElement(element: ArticleElement): ArticleSubtitleElement {\n return element as ArticleSubtitleElement;\n }\n\n getTextElement(element: ArticleElement): ArticleTextElement {\n return element as ArticleTextElement;\n }\n\n getQuoteElement(element: ArticleElement): ArticleQuoteElement {\n return element as ArticleQuoteElement;\n }\n\n getHighlightElement(element: ArticleElement): ArticleHighlightElement {\n return element as ArticleHighlightElement;\n }\n\n getCodeElement(element: ArticleElement): ArticleCodeElement {\n return element as ArticleCodeElement;\n }\n\n getListElement(element: ArticleElement): ArticleListElement {\n return element as ArticleListElement;\n }\n\n getButtonElement(element: ArticleElement): ArticleButtonElement {\n return element as ArticleButtonElement;\n }\n\n getSeparatorElement(element: ArticleElement): ArticleSeparatorElement {\n return element as ArticleSeparatorElement;\n }\n\n getImageElement(element: ArticleElement): ArticleImageElement {\n return element as ArticleImageElement;\n }\n\n getVideoElement(element: ArticleElement): ArticleVideoElement {\n return element as ArticleVideoElement;\n }\n\n getCustomElement(element: ArticleElement): ArticleCustomElement {\n return element as ArticleCustomElement;\n }\n\n // === FUNCIONES AUXILIARES PARA PROPS ===\n\n getQuoteTextProps(element: ArticleElement) {\n const quoteElement = this.getQuoteElement(element);\n const { author, source, ...textProps } = quoteElement.props;\n return textProps;\n }\n\n getHighlightTextProps(element: ArticleElement) {\n const highlightElement = this.getHighlightElement(element);\n const { backgroundColor, rounded, ...textProps } = highlightElement.props;\n return textProps;\n }\n\n getHighlightColor(element: ArticleElement): string {\n const highlightElement = this.getHighlightElement(element);\n return highlightElement.props.backgroundColor || 'var(--ion-color-light)';\n }\n\n getButtonProps(element: ArticleElement) {\n const buttonElement = this.getButtonElement(element);\n const { alignment, ...buttonProps } = buttonElement.props;\n return buttonProps;\n }\n\n getImageMetadata(element: ArticleElement): ImageMetadata {\n const imageElement = this.getImageElement(element);\n const props = imageElement.props;\n\n return {\n src: props.src,\n alt: props.alt,\n mode: props.rounded ? 'rounded' : 'box',\n size: 'medium',\n shaded: false,\n bordered: false,\n alignment: props.alignment || 'center',\n caption: props.caption,\n captionSize: 'medium' as const,\n width: props.maxWidth ? parseInt(props.maxWidth.replace('px', '')) : undefined,\n };\n }\n}\n","import { Color } from '@ionic/core';\nimport { TextMetadata } from '../../atoms/text/types';\nimport { TitleMetadata } from '../../atoms/title/types';\nimport { ButtonMetadata } from '../../types';\n\n/**\n * Tipos de contenido soportados en el componente val-article\n */\nexport type ArticleContentType =\n | 'title'\n | 'subtitle'\n | 'text'\n | 'paragraph'\n | 'quote'\n | 'highlight'\n | 'code'\n | 'list'\n | 'button'\n | 'separator'\n | 'image'\n | 'video'\n | 'custom';\n\n/**\n * Configuración de espaciado entre elementos\n */\nexport interface ArticleSpacing {\n /** Espaciado superior */\n top?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado inferior */\n bottom?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado lateral */\n horizontal?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n}\n\n/**\n * Configuración base para cualquier elemento del artículo\n */\nexport interface BaseArticleElement {\n /** Tipo de elemento */\n type: ArticleContentType;\n /** ID único del elemento (opcional) */\n id?: string;\n /** Clases CSS adicionales */\n cssClass?: string;\n /** Configuración de espaciado */\n spacing?: ArticleSpacing;\n /** Elemento visible condicionalmente */\n visible?: boolean;\n}\n\n/**\n * Elemento de título\n */\nexport interface ArticleTitleElement extends BaseArticleElement {\n type: 'title';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de subtítulo\n */\nexport interface ArticleSubtitleElement extends BaseArticleElement {\n type: 'subtitle';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de texto/párrafo\n */\nexport interface ArticleTextElement extends BaseArticleElement {\n type: 'text' | 'paragraph';\n props: TextMetadata;\n}\n\n/**\n * Elemento de cita\n */\nexport interface ArticleQuoteElement extends BaseArticleElement {\n type: 'quote';\n props: TextMetadata & {\n /** Autor de la cita */\n author?: string;\n /** Fuente de la cita */\n source?: string;\n };\n}\n\n/**\n * Elemento de texto destacado\n */\nexport interface ArticleHighlightElement extends BaseArticleElement {\n type: 'highlight';\n props: TextMetadata & {\n /** Color de fondo del highlight */\n backgroundColor?: Color;\n /** Esquinas redondeadas */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de código\n */\nexport interface ArticleCodeElement extends BaseArticleElement {\n type: 'code';\n props: {\n /** Código a mostrar */\n code: string;\n /** Lenguaje de programación */\n language?: string;\n /** Mostrar números de línea */\n showLineNumbers?: boolean;\n /** Tema del código */\n theme?: 'light' | 'dark';\n };\n}\n\n/**\n * Elemento de lista\n */\nexport interface ArticleListElement extends BaseArticleElement {\n type: 'list';\n props: {\n /** Elementos de la lista */\n items: Array<{\n /** Texto del elemento */\n text: string;\n /** Configuración de contenido reactivo */\n contentKey?: string;\n contentClass?: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n }>;\n /** Tipo de lista */\n listType?: 'unordered' | 'ordered' | 'checklist';\n /** Color de los elementos */\n color?: Color;\n };\n}\n\n/**\n * Elemento de botón\n */\nexport interface ArticleButtonElement extends BaseArticleElement {\n type: 'button';\n props: ButtonMetadata & {\n /** Alineación del botón */\n alignment?: 'left' | 'center' | 'right';\n };\n}\n\n/**\n * Elemento separador\n */\nexport interface ArticleSeparatorElement extends BaseArticleElement {\n type: 'separator';\n props: {\n /** Tipo de separador */\n style?: 'line' | 'dots' | 'space';\n /** Color del separador */\n color?: Color;\n /** Grosor del separador */\n thickness?: 'thin' | 'medium' | 'thick';\n };\n}\n\n/**\n * Elemento de imagen\n */\nexport interface ArticleImageElement extends BaseArticleElement {\n type: 'image';\n props: {\n /** URL de la imagen */\n src: string;\n /** Texto alternativo */\n alt: string;\n /** Título de la imagen */\n title?: string;\n /** Leyenda de la imagen */\n caption?: string;\n /** Configuración de contenido reactivo para caption */\n captionContentKey?: string;\n captionContentClass?: string;\n captionContentFallback?: string;\n /** Alineación de la imagen */\n alignment?: 'left' | 'center' | 'right';\n /** Ancho máximo */\n maxWidth?: string;\n /** Imagen con bordes redondeados */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de video\n */\nexport interface ArticleVideoElement extends BaseArticleElement {\n type: 'video';\n props: {\n /** URL del video */\n src: string;\n /** Imagen de poster */\n poster?: string;\n /** Título del video */\n title?: string;\n /** Controles visibles */\n controls?: boolean;\n /** Reproducción automática */\n autoplay?: boolean;\n /** Silenciado por defecto */\n muted?: boolean;\n /** Ancho máximo */\n maxWidth?: string;\n };\n}\n\n/**\n * Elemento personalizado\n */\nexport interface ArticleCustomElement extends BaseArticleElement {\n type: 'custom';\n props: {\n /** Contenido HTML personalizado */\n htmlContent?: string;\n /** Clase de componente personalizado */\n componentClass?: any;\n /** Props para el componente personalizado */\n componentProps?: any;\n };\n}\n\n/**\n * Unión de todos los tipos de elementos posibles\n */\nexport type ArticleElement =\n | ArticleTitleElement\n | ArticleSubtitleElement\n | ArticleTextElement\n | ArticleQuoteElement\n | ArticleHighlightElement\n | ArticleCodeElement\n | ArticleListElement\n | ArticleButtonElement\n | ArticleSeparatorElement\n | ArticleImageElement\n | ArticleVideoElement\n | ArticleCustomElement;\n\n/**\n * Configuración del artículo completo\n */\nexport interface ArticleMetadata {\n /** Elementos del artículo */\n elements: ArticleElement[];\n /** Configuración de espaciado global */\n defaultSpacing?: ArticleSpacing;\n /** Ancho máximo del artículo */\n maxWidth?: string;\n /** Centrar el artículo */\n centered?: boolean;\n /** Tema del artículo */\n theme?: 'light' | 'dark' | 'auto';\n /** Clases CSS adicionales */\n cssClass?: string;\n}\n\n/**\n * Configuración de espaciado predefinida\n */\nexport const ARTICLE_SPACING = {\n NONE: { top: 'none', bottom: 'none' } as ArticleSpacing,\n SMALL: { top: 'small', bottom: 'small' } as ArticleSpacing,\n MEDIUM: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LARGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n XLARGE: { top: 'xlarge', bottom: 'xlarge' } as ArticleSpacing,\n\n // Espaciados específicos para elementos\n TITLE: { top: 'large', bottom: 'medium' } as ArticleSpacing,\n SUBTITLE: { top: 'medium', bottom: 'small' } as ArticleSpacing,\n PARAGRAPH: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n QUOTE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n CODE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LIST: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n BUTTON: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n IMAGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n SEPARATOR: { top: 'large', bottom: 'large' } as ArticleSpacing,\n} as const;\n\n/**\n * Función helper para crear elementos de artículo de forma fácil\n */\nexport class ArticleBuilder {\n private elements: ArticleElement[] = [];\n\n /**\n * Añade un título al artículo\n */\n title(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'title',\n props,\n spacing: ARTICLE_SPACING.TITLE,\n ...options,\n } as ArticleTitleElement);\n return this;\n }\n\n /**\n * Añade un subtítulo al artículo\n */\n subtitle(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'subtitle',\n props,\n spacing: ARTICLE_SPACING.SUBTITLE,\n ...options,\n } as ArticleSubtitleElement);\n return this;\n }\n\n /**\n * Añade un párrafo al artículo\n */\n paragraph(props: TextMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'paragraph',\n props,\n spacing: ARTICLE_SPACING.PARAGRAPH,\n ...options,\n } as ArticleTextElement);\n return this;\n }\n\n /**\n * Añade una cita al artículo\n */\n quote(\n props: ArticleQuoteElement['props'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'quote',\n props,\n spacing: ARTICLE_SPACING.QUOTE,\n ...options,\n } as ArticleQuoteElement);\n return this;\n }\n\n /**\n * Añade código al artículo\n */\n code(code: string, language?: string, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'code',\n props: { code, language },\n spacing: ARTICLE_SPACING.CODE,\n ...options,\n } as ArticleCodeElement);\n return this;\n }\n\n /**\n * Añade una lista al artículo\n */\n list(\n items: ArticleListElement['props']['items'],\n listType?: ArticleListElement['props']['listType'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'list',\n props: { items, listType },\n spacing: ARTICLE_SPACING.LIST,\n ...options,\n } as ArticleListElement);\n return this;\n }\n\n /**\n * Añade un botón al artículo\n */\n button(\n props: ButtonMetadata,\n alignment?: 'left' | 'center' | 'right',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'button',\n props: { ...props, alignment },\n spacing: ARTICLE_SPACING.BUTTON,\n ...options,\n } as ArticleButtonElement);\n return this;\n }\n\n /**\n * Añade un separador al artículo\n */\n separator(\n style?: 'line' | 'dots' | 'space',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'separator',\n props: { style },\n spacing: ARTICLE_SPACING.SEPARATOR,\n ...options,\n } as ArticleSeparatorElement);\n return this;\n }\n\n /**\n * Añade una imagen al artículo\n */\n image(\n src: string,\n alt: string,\n caption?: string,\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'image',\n props: { src, alt, caption },\n spacing: ARTICLE_SPACING.IMAGE,\n ...options,\n } as ArticleImageElement);\n return this;\n }\n\n /**\n * Construye el artículo final\n */\n build(config?: Partial<ArticleMetadata>): ArticleMetadata {\n return {\n elements: this.elements,\n defaultSpacing: ARTICLE_SPACING.MEDIUM,\n maxWidth: '800px',\n centered: true,\n theme: 'auto',\n ...config,\n };\n }\n\n /**\n * Resetea el builder para crear un nuevo artículo\n */\n clear(): ArticleBuilder {\n this.elements = [];\n return this;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { TitleBlockComponent } from '../../molecules/title-block/title-block.component';\nimport { BannerMetadata } from './types';\n\n@Component({\n selector: 'val-banner',\n standalone: true,\n imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent],\n template: `\n <val-box\n [props]=\"{\n icon: props.closable ? 'close-outline' : '',\n bordered: props.bordered,\n color: '',\n padding: props.padding,\n }\"\n (onClick)=\"closeHandler()\"\n >\n <div [ngClass]=\"['content-container', props.mode, props.alignment]\" body>\n <val-title-block\n [props]=\"{\n position: props.content.position,\n aboveTitle: props.content.aboveTitle,\n title: props.content.title,\n bellowTitle: props.content.bellowTitle,\n }\"\n ></val-title-block>\n @if (props.actions) {\n <val-button-group\n [ngClass]=\"['buttons-container', props.mode, props.alignment]\"\n [props]=\"props.actions\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./banner.component.scss'],\n})\n/**\n * val-banner\n *\n * Displays a banner with title block, actions, and optional close button.\n *\n * @example\n * <val-banner [props]=\"{ content: {...}, actions: {...}, closable: true, bordered: true, mode: 'center', alignment: 'center', padding: '8px' }\" (onClick)=\"handler($event)\" (onClose)=\"closeHandler()\"></val-banner>\n *\n * @input props: BannerMetadata - Configuration for the banner (content, actions, closable, bordered, mode, alignment, padding)\n * @output onClick - Emits when an action is clicked\n * @output onClose - Emits when the banner is closed\n */\nexport class BannerComponent implements OnInit, OnChanges {\n @Input()\n props: BannerMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onClose = new EventEmitter();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n closeHandler() {\n this.onClose.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonMenuButton,\n IonText,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronBackOutline } from 'ionicons/icons';\nimport { IconService } from '../../../services/icons.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ToolbarAction, ToolbarActionType } from '../../types';\nimport { ToolbarMetadata } from './types';\n\n/**\n * ToolbarComponent\n *\n * Componente de barra de herramientas reutilizable para encabezados y pies de página.\n * Permite acciones, botón de retroceso, menú y personalización de colores y título.\n *\n * @example\n * <val-toolbar [props]=\"{ title: 'Mi App', withBack: true, actions: [...] }\" (onClick)=\"handleToolbarAction($event)\"></val-toolbar>\n *\n * @input props {ToolbarMetadata} - Metadatos de la barra de herramientas.\n * @output onClick - Emite el token de la acción clicada.\n */\n@Component({\n selector: 'val-toolbar',\n standalone: true,\n imports: [\n CommonModule,\n IonToolbar,\n IonButtons,\n IonButton,\n IonIcon,\n IonText,\n IonTitle,\n AvatarComponent,\n ImageComponent,\n IonMenuButton,\n ],\n template: `\n <ion-toolbar [color]=\"props.color\" [class.background]=\"props.color === 'background'\">\n <ng-container *ngIf=\"props.withBack\">\n <ion-buttons class=\"left-buttons\" slot=\"start\" *ngIf=\"props.withBack\">\n <ion-button fill=\"clear\" (click)=\"goBack()\" [color]=\"props.textColor\" style=\"margin-left: 8px;\">\n <ion-icon name=\"chevron-back-outline\" [slot]=\"props.backText ? 'start' : 'icon-only'\"></ion-icon>\n <ion-text *ngIf=\"props.backText\">{{ props.backText }}</ion-text>\n </ion-button>\n </ion-buttons>\n </ng-container>\n <ng-container *ngIf=\"props.withActions\">\n <ion-buttons slot=\"end\" *ngIf=\"someInRight() || props.withMenu\">\n <ng-container *ngFor=\"let action of rightActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button\n [color]=\"props.textColor\"\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(action.token)\"\n >{{ action.description }}</ion-button\n >\n </ng-container>\n @if (props.withMenu) {\n <ion-menu-button color=\"dark\"></ion-menu-button>\n }\n </ion-buttons>\n <ion-buttons slot=\"start\" *ngIf=\"someInLeft()\" style=\"padding-left: 4px;\">\n <ng-container *ngFor=\"let action of leftActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button *ngIf=\"action.type === actionTypes.BUTTON\" (click)=\"clickHandler(action.token)\">{{\n action.description\n }}</ion-button>\n </ng-container>\n </ion-buttons>\n </ng-container>\n <ion-title *ngIf=\"props.title\" [color]=\"props.textColor\">{{ props.title }}</ion-title>\n <!-- experimental -->\n <ng-content select=\"[toolbar-bottom]\"></ng-content>\n </ion-toolbar>\n `,\n styleUrls: ['./toolbar.component.scss'],\n})\nexport class ToolbarComponent implements OnInit {\n /**\n * Metadatos de la barra de herramientas.\n */\n @Input()\n props: ToolbarMetadata;\n\n /**\n * Evento emitido al hacer click en una acción o botón de la barra.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n actionTypes = ToolbarActionType;\n\n constructor(\n private navCtrl: NavController,\n icon: IconService\n ) {\n addIcons({ chevronBackOutline });\n }\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Navega hacia atrás usando NavController.\n */\n goBack() {\n this.navCtrl.back();\n }\n\n /**\n * Determina si hay acciones a la derecha.\n */\n someInRight(): boolean {\n return !!this.props.actions.find(x => x.position === 'right');\n }\n\n /**\n * Determina si hay acciones a la izquierda.\n */\n someInLeft(): boolean {\n return !!this.props.actions.find(x => x.position === 'left');\n }\n\n /**\n * Devuelve las acciones de la derecha.\n */\n rightActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'right');\n }\n\n /**\n * Devuelve las acciones de la izquierda.\n */\n leftActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'left');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { FooterMetadata } from './types';\n\n/**\n * FooterComponent\n *\n * Componente de pie de página reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) y contenido adicional.\n *\n * @example\n * <val-footer [props]=\"footerProps\" (onClick)=\"handleFooterAction($event)\">\n * <div extra>Contenido extra</div>\n * </val-footer>\n *\n * @input props {FooterMetadata} - Metadatos del pie de página y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\n@Component({\n selector: 'val-footer',\n standalone: true,\n imports: [CommonModule, IonFooter, ToolbarComponent],\n template: `\n <ion-footer\n [class.ion-no-border]=\"!props.bordered\"\n [translucent]=\"props.translucent\"\n [class.background]=\"props.toolbar.color === 'background'\"\n >\n <val-toolbar\n *ngIf=\"props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack\"\n [props]=\"props.toolbar\"\n (onClick)=\"clickHandler($event)\"\n ></val-toolbar>\n <ng-content select=\"[extra]\"></ng-content>\n </ion-footer>\n `,\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent implements OnInit {\n /**\n * Metadatos del pie de página y su toolbar.\n */\n @Input()\n props: FooterMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { ComponentStates, InputMetadata, InputType } from '../../types';\n\nexport const maxLength = (\n field: string,\n max: number\n): { validator: ValidatorFn; error: string } => {\n return {\n validator: Validators.maxLength(max),\n error: `El campo ${field} no debe superar los ${max} caracteres.`,\n };\n};\n\nexport const createNumberFromToField = (\n name: string,\n label: string,\n fromLabel: string,\n toLabel: string,\n options?: {\n fromPlaceholder?: string;\n toPlaceholder?: string;\n hint?: string;\n range?: { min: number; max: number };\n validators?: ValidatorFn[];\n order?: number;\n }\n): InputMetadata => {\n return {\n control: null as any, // Will be set by form component\n token: `number-from-to-${name}`,\n label,\n name,\n hint: options?.hint || '',\n placeholder: '',\n type: InputType.NUMBER_FROM_TO,\n order: options?.order || 0,\n validators: options?.validators || [],\n range: options?.range,\n errors: {},\n state: ComponentStates.ENABLED,\n fromLabel,\n toLabel,\n fromPlaceholder: options?.fromPlaceholder,\n toPlaceholder: options?.toPlaceholder,\n };\n};\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\n\n@Component({\n selector: 'val-form-footer',\n standalone: true,\n imports: [FooterComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: 'background',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./form-footer.component.scss'],\n})\nexport class FormFooterComponent implements OnInit {\n @Input()\n props: { form: FormGroup; data: FormMetadata };\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n constructor() {}\n\n ngOnInit() {}\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.props.form.value, token });\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.props.form) {\n return [];\n }\n\n if (this.props.form.valid) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.WORKING) {\n this.props.data.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.data.state === ComponentStates.ENABLED) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.DISABLED) {\n this.props.data.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.data.actions];\n }\n}\n","import { ElementRef } from '@angular/core';\n\n/**\n * Scrolls smoothly to the top of the element with the given id.\n * @param id The id of the element to scroll to\n */\nexport const goToTop = (id: string): void => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({\n block: 'start',\n inline: 'nearest',\n behavior: 'smooth',\n });\n }\n};\n\n/**\n * Checks if the bottom of the given ElementRef is within the viewport.\n * Useful for determining if a form or element is fully visible.\n * @param elementRef The Angular ElementRef to check\n * @returns True if the element's bottom is at or above the window's bottom\n */\nexport const isAtEnd = (elementRef: ElementRef): boolean => {\n const formElement = elementRef.nativeElement;\n const rect = formElement.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n return rect.bottom <= windowHeight;\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { isAtEnd } from '../../../shared/utils/dom';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { CheckInputComponent } from '../../molecules/check-input/check-input.component';\nimport { CommentInputComponent } from '../../molecules/comment-input/comment-input.component';\nimport { DateInputComponent } from '../../molecules/date-input/date-input.component';\nimport { EmailInputComponent } from '../../molecules/email-input/email-input.component';\nimport { FileInputComponent } from '../../molecules/file-input/file-input.component';\nimport { HintComponent } from '../../molecules/hint/hint.component';\nimport { HourInputComponent } from '../../molecules/hour-input/hour-input.component';\nimport { NumberInputComponent } from '../../molecules/number-input/number-input.component';\nimport { NumberFromToComponent } from '../../molecules/number-from-to/number-from-to.component';\nimport { PasswordInputComponent } from '../../molecules/password-input/password-input.component';\nimport { PinInputComponent } from '../../molecules/pin-input/pin-input.component';\nimport { RadioInputComponent } from '../../molecules/radio-input/radio-input.component';\nimport { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';\nimport { SelectSearchComponent } from '../../molecules/select-search/select-search.component';\nimport { MultiSelectSearchComponent } from '../../molecules/multi-select-search/multi-select-search.component';\nimport { MultiSelectSimpleComponent } from '../../molecules/multi-select-simple/multi-select-simple.component';\nimport { TextInputComponent } from '../../molecules/text-input/text-input.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit, InputMetadata, InputType } from '../../types';\n\n@Component({\n selector: 'val-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DisplayComponent,\n TitleComponent,\n TextInputComponent,\n CheckInputComponent,\n ButtonGroupComponent,\n DividerComponent,\n HintComponent,\n CommentInputComponent,\n DateInputComponent,\n FileInputComponent,\n HourInputComponent,\n EmailInputComponent,\n NumberInputComponent,\n NumberFromToComponent,\n RadioInputComponent,\n PasswordInputComponent,\n PinInputComponent,\n SelectSearchComponent,\n MultiSelectSearchComponent,\n MultiSelectSimpleComponent,\n SearchSelectorComponent,\n],\n template: `\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <val-display\n *ngIf=\"props.name\"\n [props]=\"{\n content: props.name,\n color: 'dark',\n size: 'large',\n }\"\n ></val-display>\n <div class=\"section\" *ngFor=\"let s of processedSections\">\n <val-title [props]=\"{ content: s.name, size: 'large', color: '', bold: false }\"></val-title>\n <div class=\"input\" *ngFor=\"let f of s.fields\">\n <val-title [props]=\"{ content: f.label, size: 'small', color: 'dark', bold: false }\"></val-title>\n <ng-container *ngIf=\"f.type === types.TEXT\">\n <val-text-input [props]=\"f\"></val-text-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.CHECK\">\n <val-check-input></val-check-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.COMMENT\">\n <val-comment-input [props]=\"f\"></val-comment-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.DATE\">\n <val-date-input [props]=\"f\"></val-date-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.EMAIL\">\n <val-email-input [props]=\"f\"></val-email-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.FILE\">\n <val-file-input [props]=\"f\"></val-file-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.HOUR\">\n <val-hour-input [props]=\"f\"></val-hour-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER\">\n <val-number-input [props]=\"f\"></val-number-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER_FROM_TO\">\n <val-number-from-to [props]=\"f\"></val-number-from-to>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PASSWORD\">\n <val-password-input [props]=\"f\"></val-password-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PIN_CODE\">\n <val-pin-input [props]=\"f\"></val-pin-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.RADIO\">\n <val-radio-input [props]=\"f\"></val-radio-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SELECT\">\n <val-select-input [props]=\"f\"></val-select-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SEARCH_SELECT\">\n <val-select-search [props]=\"f\"></val-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT\">\n <val-multi-select-search [props]=\"f\"></val-multi-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT_SIMPLE\">\n <val-multi-select-simple [props]=\"f\"></val-multi-select-simple>\n </ng-container>\n <val-hint [props]=\"f\"></val-hint>\n </div>\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'medium' }\"></val-divider>\n <ng-content></ng-content>\n </div>\n <val-button-group\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </form>\n </div>\n `,\n styleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit {\n @Input()\n props: FormMetadata;\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n @Output()\n onInvalid = new EventEmitter();\n\n @Output()\n onSelectChange = new EventEmitter<{ field: string; value: any }>();\n\n form: FormGroup;\n types = InputType;\n private subscriptions: Subscription[] = [];\n \n // Cache processed field properties\n processedSections: { name: string; fields: InputMetadata[] }[] = [];\n private previousValues = new Map<string, any>();\n\n constructor(\n private fb: FormBuilder,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n this.createForm();\n this.processAllSections();\n this.setupChangeTracking();\n }\n \n private createForm() {\n const formControls = {};\n this.props.sections.forEach(section => {\n section.fields.forEach(field => {\n if (field.type === this.types.NUMBER_FROM_TO) {\n // Crear dos controles para campos NUMBER_FROM_TO\n formControls[`${field.name}_from`] = [undefined, field.validators || []];\n formControls[`${field.name}_to`] = [undefined, field.validators || []];\n } else {\n formControls[field.name] = [undefined, field.validators || []];\n }\n });\n });\n this.form = this.fb.group(formControls);\n }\n \n private processAllSections() {\n console.log('[FormComponent] Processing all sections - ONE TIME ONLY');\n \n this.processedSections = this.props.sections.map(section => ({\n name: section.name,\n fields: section.fields.map(field => this.processField(field))\n }));\n }\n \n private processField(field: InputMetadata): InputMetadata {\n // Generate token if not provided\n if (!field.token) {\n field.token = `input-${field.type}-${field.name}`;\n }\n \n // Debug: verificar opciones para select fields - SOLO UNA VEZ\n if (field.type === this.types.SEARCH_SELECT || field.type === this.types.MULTI_SELECT || field.type === this.types.MULTI_SELECT_SIMPLE) {\n console.log(`[FormComponent] Processing field ${field.name} options:`, {\n type: field.type,\n optionsCount: field.options?.length || 0,\n options: field.options?.slice(0, 2) || []\n });\n }\n \n if (field.type === this.types.NUMBER_FROM_TO) {\n const fromControl = this.getControl(`${field.name}_from`);\n const toControl = this.getControl(`${field.name}_to`);\n \n if (field.state === ComponentStates.DISABLED) {\n fromControl.disable();\n toControl.disable();\n } else {\n fromControl.enable();\n toControl.enable();\n }\n \n return {\n ...field,\n fromControl,\n toControl,\n control: undefined, // Remove control for NUMBER_FROM_TO fields\n };\n } else {\n const control = this.getControl(field.name);\n if (field.state === ComponentStates.DISABLED) {\n control.disable();\n } else {\n control.enable();\n }\n return {\n ...field,\n control,\n };\n }\n }\n \n private setupChangeTracking() {\n this.props.sections.forEach(section => {\n section.fields\n .filter(x => x.type === this.types.SELECT || x.type === this.types.TEXT || x.type === this.types.SEARCH_SELECT || x.type === this.types.MULTI_SELECT || x.type === this.types.MULTI_SELECT_SIMPLE)\n .forEach(field => {\n console.log(`[FormComponent] Tracking changes for field: ${field.name}, type: ${field.type}`);\n this.trackSelectChanges(field.name);\n });\n });\n }\n\n ngOnDestroy() {\n // Cleanup subscriptions to avoid memory leaks\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n trackSelectChanges(fieldName: string) {\n const control = this.getControl(fieldName);\n \n // Initialize previous value\n this.previousValues.set(fieldName, control.value);\n \n const subscription = control.valueChanges\n .pipe(distinctUntilChanged()) // Evitar valores duplicados\n .subscribe(value => {\n console.log(`[FormComponent] valueChanges for ${fieldName}:`, {\n field: fieldName,\n newValue: value,\n previousValue: this.previousValues.get(fieldName),\n willEmit: this.previousValues.get(fieldName) !== value\n });\n \n // Evitar loops - solo emitir si el valor realmente cambió\n const previousValue = this.previousValues.get(fieldName);\n if (previousValue !== value) {\n this.previousValues.set(fieldName, value);\n console.log(`[FormComponent] EMITTING onSelectChange:`, { field: fieldName, value });\n this.onSelectChange.emit({ field: fieldName, value });\n } else {\n console.log(`[FormComponent] SKIPPING emit - same value for ${fieldName}`);\n }\n });\n this.subscriptions.push(subscription);\n }\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.form.getRawValue(), token });\n }\n\n getControl(field: string): FormControl {\n return this.Form.get(field) as FormControl;\n }\n\n /**\n * @deprecated This method is now only used internally. \n * Use processedSections property instead to avoid multiple calls.\n */\n getFieldProp(field: InputMetadata): InputMetadata {\n console.warn('[FormComponent] getFieldProp is deprecated and should not be called directly');\n return this.processField(field);\n }\n\n get isAtEndOfForm(): boolean {\n return isAtEnd(this.elementRef);\n }\n\n get Form(): FormGroup {\n return this.form;\n }\n\n get FormState(): { form: FormGroup; data: FormMetadata } {\n return {\n form: this.Form,\n data: this.props,\n };\n }\n\n // Helper method to reset field value without triggering change event\n resetField(fieldName: string, emitEvent: boolean = false): void {\n const control = this.getControl(fieldName);\n const currentValue = control.value;\n \n console.log(`[FormComponent] Resetting field ${fieldName}:`, { currentValue, emitEvent });\n \n // Update our cache to avoid triggering change event\n if (!emitEvent) {\n this.previousValues.set(fieldName, '');\n }\n \n control.setValue('', { emitEvent });\n control.markAsPristine();\n control.markAsUntouched();\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.form) {\n return [];\n }\n\n if (this.form.valid) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.WORKING) {\n this.props.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.state === ComponentStates.ENABLED) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.DISABLED) {\n this.props.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.actions];\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonHeader } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { HeaderMetadata } from './types';\n\n@Component({\n selector: 'val-header',\n standalone: true,\n imports: [IonHeader, ToolbarComponent],\n template: `\n <ion-header [class.ion-no-border]=\"!props.bordered\" [translucent]=\"props.translucent\">\n <val-toolbar [props]=\"props.toolbar\" (onClick)=\"clickHandler($event)\"></val-toolbar>\n </ion-header>\n `,\n styleUrls: ['./header.component.scss'],\n})\n/**\n * HeaderComponent\n *\n * Componente de encabezado reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) configurable.\n *\n * @example\n * <val-header [props]=\"headerProps\" (onClick)=\"handleHeaderAction($event)\"></val-header>\n *\n * @input props {HeaderMetadata} - Metadatos del encabezado y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\nexport class HeaderComponent implements OnInit {\n /**\n * Metadatos del encabezado y su toolbar.\n */\n @Input()\n props: HeaderMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport {\n IonAvatar,\n IonButton,\n IonIcon,\n IonItem,\n IonLabel,\n IonList,\n IonListHeader,\n IonNote,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ComponentStates } from '../../types';\nimport { ListMetadata } from './types';\n\n@Component({\n selector: 'val-item-list',\n standalone: true,\n imports: [\n RouterLink,\n NgStyle,\n NgClass,\n IonList,\n IonListHeader,\n IonLabel,\n IonNote,\n IonItem,\n IonAvatar,\n IonIcon,\n IonButton,\n IonSpinner,\n ],\n template: `\n <ion-list\n [inset]=\"props.rounded\"\n [class.shadowed]=\"props.shadowed\"\n [class.bordered]=\"props.bordered\"\n [style.borderColor]=\"this.color()\"\n >\n @if (props.title) {\n <ion-list-header>\n <ion-label>{{ props.title }}</ion-label>\n </ion-list-header>\n }\n @for (item of props.items; track item.token) {\n @if (item.mode == 'justext') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n\n @if (item.subtitle) {\n <p>{{ item.subtitle }}</p>\n }\n </ion-label>\n\n @if (item.endNote) {\n <ion-note slot=\"end\">{{ item.endNote }}</ion-note>\n }\n </ion-item>\n }\n\n @if (item.mode == 'actionable') {\n <ion-item [lines]=\"item.lines\" [button]=\"item.clickable\" [disabled]=\"item.disabled\">\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.endNote) {\n <h3>{{ item.endNote }}</h3>\n }\n\n @if (item.subtitle) {\n <ion-note color=\"medium\"> {{ item.subtitle }} </ion-note>\n }\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n\n @if (item.actions) {\n @for (action of item.actions; track action.token) {\n <ion-button\n fill=\"outline\"\n color=\"dark\"\n slot=\"end\"\n [disabled]=\"action.state === states.WORKING\"\n (click)=\"onActionClickHandler(action.token)\"\n >\n @if (action.state !== states.WORKING) {\n @if (action.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"action.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n {{ action.description }}\n }\n\n @if (action.state === states.WORKING) {\n <ion-spinner class=\"action-spinner\" name=\"circular\"></ion-spinner>\n }\n </ion-button>\n }\n }\n </ion-item>\n }\n\n @if (item.mode == 'route') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n [routerLink]=\"item.routerLink\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n @if (item.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'subtitule') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h1>{{ item.text }}</h1>\n <p>{{ item.subtitle }}</p>\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'avatar') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-avatar aria-hidden=\"true\" slot=\"start\">\n <img alt=\"\" [src]=\"item.image\" />\n </ion-avatar>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'icon') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n `,\n styleUrls: ['./item-list.component.scss'],\n})\n/**\n * ItemListComponent\n *\n * Componente de lista reutilizable para mostrar una colección de elementos con diferentes modos de visualización (texto, subtítulo, avatar, icono, ruta, acciones).\n * Permite acciones por elemento, indicadores de no leído, y personalización de estilos.\n *\n * @example\n * <val-item-list [props]=\"{ title: 'Usuarios', items: [{ text: 'Juan', mode: 'avatar', image: 'avatar.jpg' }] }\" (onClick)=\"handleClick($event)\"></val-item-list>\n *\n * @input props {ListMetadata} - Metadatos de la lista y sus elementos.\n * @output onClick - Emite el token del elemento clicado.\n * @output onActionClick - Emite el token de la acción clicada en un elemento.\n */\nexport class ItemListComponent implements OnInit {\n states = ComponentStates;\n defaultColor = 'primary';\n\n /**\n * Metadatos de la lista y sus elementos.\n */\n @Input()\n props: ListMetadata;\n\n /**\n * Evento emitido al hacer click en un elemento de la lista.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n /**\n * Evento emitido al hacer click en una acción de un elemento.\n */\n @Output()\n onActionClick = new EventEmitter<string>();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n /**\n * Emite el token del elemento clicado.\n * @param token Token del elemento\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n onActionClickHandler(token?: string) {\n this.onActionClick.emit(token);\n }\n\n /**\n * Devuelve el color de borde de la lista.\n */\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { BannerComponent } from '../banner/banner.component';\nimport { NoContentMetadata } from './types';\n\n@Component({\n selector: 'val-no-content',\n standalone: true,\n imports: [ImageComponent, BannerComponent],\n template: `\n @if (props.topContent) {\n <div>\n <val-banner [props]=\"props.topContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n }\n <val-image class=\"image-container\" [props]=\"props.image\"></val-image>\n <div>\n <val-banner [props]=\"props.bottomContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n `,\n styleUrls: ['./no-content.component.scss'],\n})\n/**\n * NoContentComponent\n *\n * Componente para mostrar una pantalla de \"sin contenido\" con imagen y banners opcionales arriba y abajo.\n * Útil para estados vacíos, errores o mensajes informativos.\n *\n * @example\n * <val-no-content [props]=\"{ image: { src: 'empty.svg' }, bottomContent: { ... } }\"></val-no-content>\n *\n * @input props {NoContentMetadata} - Metadatos de la imagen y banners a mostrar.\n * @output onClick - Emite el token de acción de los banners si corresponde.\n */\nexport class NoContentComponent implements OnInit, OnChanges {\n @Input()\n props: NoContentMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple para asegurar actualización\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n onClickHandler(token: string) {\n this.onClick.emit(token);\n }\n}\n","/**\n * Tipos y metadatos para el componente WizardComponent.\n * Permiten definir los pasos, botones, estado y navegación del wizard.\n */\nimport { ButtonMetadata, ComponentState } from '../../types';\nimport { NoContentMetadata } from '../no-content/types';\n\n/**\n * Metadatos del wizard.\n * @property state Estado global del wizard.\n * @property current Paso actual.\n * @property steps Colección de pasos.\n * @property error Paso de error.\n */\nexport type WizardMetadata = {\n state: ComponentState;\n current: number;\n steps: Steps;\n error: Step;\n};\n\n/**\n * Representa un paso del wizard.\n * @property titles Metadatos de \"no contenido\" para el paso.\n * @property buttons Botones disponibles en el paso.\n */\nexport type Step = {\n titles: NoContentMetadata;\n buttons: ButtonMetadata[];\n};\n\n/**\n * Colección de pasos del wizard, indexados por número de paso.\n */\nexport type Steps = {\n [step: number]: Step;\n};\n\n/**\n * Enumera los posibles movimientos de navegación en el wizard.\n */\nexport enum MOTION {\n BACKWARD,\n FORWARD,\n RETRY,\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ProgressBarComponent } from '../../../atoms/progress-bar/progress-bar.component';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\nimport { MOTION, Step, WizardMetadata } from '../types';\n\n@Component({\n selector: 'val-wizard-footer',\n standalone: true,\n imports: [FooterComponent, ProgressBarComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: '',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-progress-bar\n extra\n [props]=\"{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }\"\n ></val-progress-bar>\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'spaced', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./wizard-footer.component.scss'],\n})\nexport class WizardFooterComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.cdr.detectChanges();\n }\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('right')) {\n this.tryToStep(MOTION.FORWARD);\n }\n if (token.includes('left')) {\n this.tryToStep(MOTION.BACKWARD);\n }\n }\n\n get Current(): Step {\n return this.props.steps[this.props.current];\n }\n\n get Progress(): number {\n if (this.props.steps && this.props.current) {\n return this.props.current / Object.keys(this.props.steps).length;\n }\n return 0;\n }\n\n get actions(): ButtonMetadata[] {\n if (this.props.state === ComponentStates.ERROR && this.Current.buttons.length > 1) {\n this.Current.buttons[1].state = ComponentStates.DISABLED;\n }\n\n if (this.props.current === 1 && this.Current.buttons.length > 1) {\n return [this.Current.buttons[1]];\n }\n return this.Current.buttons;\n }\n\n tryToStep(motion: MOTION): void {\n this.onClick.emit({ current: this.props.current, motion });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { goToTop } from '../../../shared/utils/dom';\nimport { ContentLoaderComponent } from '../../molecules/content-loader/content-loader.component';\nimport { ComponentStates } from '../../types';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { MOTION, Step, WizardMetadata } from './types';\n\n@Component({\n selector: 'val-wizard',\n standalone: true,\n imports: [CommonModule, NoContentComponent, ContentLoaderComponent],\n template: `\n <div [id]=\"wrapperId\" class=\"wrapper\">\n <ng-container *ngIf=\"props.state !== 'ERROR'\">\n <val-no-content [props]=\"currentStepTitles\" [attr.data-step]=\"props.current\"></val-no-content>\n <div class=\"step\">\n <div *ngIf=\"props.state === 'WORKING'\">\n <val-content-loader\n [props]=\"{\n name: 'circular',\n color: 'primary',\n size: 'large',\n text: loadingText,\n }\"\n />\n </div>\n <ng-content select=\"[step]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"props.state === 'ERROR'\">\n <val-no-content [props]=\"props.error.titles\" (onClick)=\"clickHandler($event)\"></val-no-content>\n </ng-container>\n </div>\n `,\n styleUrls: ['./wizard.component.scss'],\n})\nexport class WizardComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n currentStep: Step | null = null;\n currentStepTitles: any = null;\n loadingText: string;\n\n private cdr = inject(ChangeDetectorRef);\n private langService = inject(LangService);\n\n constructor() {\n this.loadingText = this.langService.getText('_global', 'pleaseWait', 'Por favor espere...');\n }\n\n ngOnInit() {\n this.updateCurrentStep();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateCurrentStep();\n this.cdr.detectChanges();\n }\n }\n\n private updateCurrentStep(): void {\n if (this.props?.steps && this.props?.current) {\n this.currentStep = this.props.steps[this.props.current];\n // Forzar nueva referencia de objeto para asegurar detección de cambios\n // Agregar timestamp para garantizar que es un objeto completamente nuevo\n this.currentStepTitles = this.currentStep?.titles\n ? {\n ...JSON.parse(JSON.stringify(this.currentStep.titles)),\n _timestamp: Date.now(), // Forzar nueva referencia\n _step: this.props.current, // Agregar identificador del paso\n }\n : null;\n\n // Forzar detección de cambios inmediatamente\n this.cdr.detectChanges();\n }\n }\n\n working() {\n this.props.state = ComponentStates.WORKING;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.DISABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n done() {\n if (this.props.state === ComponentStates.ENABLED) {\n return;\n }\n\n this.props.state = ComponentStates.ENABLED;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.ENABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n get Current(): Step {\n if (this.props?.steps && this.props?.current) {\n return this.props.steps[this.props.current];\n }\n return this.currentStep || { titles: null, buttons: [] };\n }\n\n setCurrent(newStep: number) {\n if (newStep === this.props.current) {\n return;\n }\n\n this.props.current = newStep;\n this.updateCurrentStep();\n\n // Forzar múltiples ciclos de detección de cambios\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n\n goToTop(this.wrapperId);\n }\n\n setError(error: string) {\n if (this.props.state === ComponentStates.ERROR) {\n return;\n }\n\n this.props.error.titles.bottomContent.content.bellowTitle.content = error;\n this.props.state = ComponentStates.ERROR;\n this.cdr.markForCheck();\n goToTop(this.wrapperId);\n }\n\n reset() {\n this.props.error.titles.bottomContent.content.bellowTitle.content = '';\n this.done();\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('retry')) {\n this.reset();\n }\n\n this.onClick.emit({ current: this.props.current, motion: MOTION.RETRY });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'val-layout',\n standalone: true,\n imports: [],\n template: `\n <div class=\"layout-container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './layout.component.scss',\n})\nexport class LayoutComponent {}\n","import { NgStyle } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';\nimport { ThemeService } from '../../../services/theme.service';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { ExpandableTextComponent } from '../../molecules/expandable-text/expandable-text.component';\nimport { LinkComponent } from '../../molecules/link/link.component';\nimport { HeaderComponent } from '../../organisms/header/header.component';\nimport { LayoutComponent } from '../layout/layout.component';\nimport { SimpleMetadata } from './types';\n\n@Component({\n selector: 'val-simple',\n standalone: true,\n imports: [\n NgStyle,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonContent,\n HeaderComponent,\n LayoutComponent,\n DividerComponent,\n LinkComponent,\n ExpandableTextComponent,\n ],\n template: `\n <val-header [props]=\"props.header\" />\n\n <ion-content\n [fullscreen]=\"true\"\n [ngStyle]=\"{\n '--background': theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n [scrollEvents]=\"true\"\n (ionScroll)=\"onScrollHandler($event)\"\n >\n <ion-header collapse=\"condense\">\n <ion-toolbar style=\"--background: transparent;\">\n <ion-title style=\"padding: 0;\" size=\"large\">{{ props.pageTitle }}</ion-title>\n </ion-toolbar>\n </ion-header>\n @if (props.pageDescription) {\n <div class=\"description-container\">\n <val-expandable-text\n [props]=\"{\n limit: 180,\n content: props.pageDescription,\n color: 'primary',\n expandText: 'más',\n }\"\n />\n </div>\n }\n @if (props.link) {\n <val-link [props]=\"props.link\" (onClick)=\"onClickHandler($event)\"></val-link>\n }\n @if (props.withDivider) {\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'dark' }\" />\n }\n <val-layout>\n <ng-content select=\"[inner-container]\"></ng-content>\n </val-layout>\n </ion-content>\n <ng-content select=\"[outter-container]\"></ng-content>\n `,\n styles: `\n .description-container {\n padding: 0px 16px;\n }\n `,\n})\nexport class SimpleComponent {\n @Input()\n props: SimpleMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onScrollEvent = new EventEmitter<boolean>();\n\n theme = inject(ThemeService);\n\n onClickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n onScrollHandler($event: Event) {\n this.onScrollEvent.emit(true);\n }\n}\n","import { LanguagesContent, TextContent } from '../types';\n\nconst text: LanguagesContent = {\n es: {\n spanish: 'Español',\n english: 'Inglés',\n },\n en: {\n spanish: 'Spanish',\n english: 'English',\n },\n};\n\nexport default new TextContent(text);\n","import LangSettings from './components/lang-settings';\nimport { LanguagesContent, TextContent } from './types';\n\nexport interface Provider {\n [x: string]: TextContent;\n}\n\n/**\n * Global content that can be used across all components.\n * These are common texts like buttons, actions, states, etc.\n * Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}, fr: {...}}\n *\n * Note: You can add any language code. The system will automatically detect available languages\n * and provide intelligent fallbacks with warnings for missing translations.\n */\nconst globalContentData: LanguagesContent = {\n es: {\n // Common buttons\n ok: 'Aceptar',\n cancel: 'Cancelar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n close: 'Cerrar',\n back: 'Volver',\n next: 'Siguiente',\n previous: 'Anterior',\n finish: 'Finalizar',\n continue: 'Continuar',\n\n // Common actions\n add: 'Agregar',\n remove: 'Quitar',\n search: 'Buscar',\n filter: 'Filtrar',\n sort: 'Ordenar',\n refresh: 'Actualizar',\n\n // Common states and messages\n loading: 'Cargando...',\n pleaseWait: 'Por favor espere...',\n noData: 'No hay datos disponibles',\n error: 'Error',\n success: 'Éxito',\n warning: 'Advertencia',\n info: 'Información',\n language: 'Idioma',\n\n // Common confirmations\n areYouSure: '¿Estás seguro?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Español',\n languageName_en: 'Inglés',\n languageName_fr: 'Francés',\n languageName_de: 'Alemán',\n languageName_pt: 'Portugués',\n languageName_it: 'Italiano',\n languageName_zh: 'Chino',\n languageName_ja: 'Japonés',\n languageName_ko: 'Coreano',\n languageName_ru: 'Ruso',\n languageName_ar: 'Árabe',\n deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',\n unsavedChanges: 'Tienes cambios sin guardar. ¿Deseas continuar?',\n\n // Common placeholders\n searchPlaceholder: 'Buscar...',\n select: 'Seleccionar...',\n selectOption: 'Seleccione una opción',\n selectLanguage: 'Seleccionar idioma...',\n\n // Status messages\n copied: '¡Copiado al portapapeles!',\n seeMore: 'ver más',\n selected: 'seleccionados',\n\n // Image preview\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n // Common buttons\n ok: 'OK',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n close: 'Close',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n finish: 'Finish',\n continue: 'Continue',\n\n // Common actions\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n refresh: 'Refresh',\n\n // Common states and messages\n loading: 'Loading...',\n pleaseWait: 'Please wait...',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n language: 'Language',\n\n // Common confirmations\n areYouSure: 'Are you sure?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Spanish',\n languageName_en: 'English',\n languageName_fr: 'French',\n languageName_de: 'German',\n languageName_pt: 'Portuguese',\n languageName_it: 'Italian',\n languageName_zh: 'Chinese',\n languageName_ja: 'Japanese',\n languageName_ko: 'Korean',\n languageName_ru: 'Russian',\n languageName_ar: 'Arabic',\n deleteConfirmation: 'Are you sure you want to delete {itemName}?',\n unsavedChanges: 'You have unsaved changes. Do you want to continue?',\n\n // Common placeholders\n searchPlaceholder: 'Search...',\n select: 'Select...',\n selectOption: 'Select an option',\n selectLanguage: 'Select language...',\n\n // Status messages\n copied: 'Copied to clipboard!',\n seeMore: 'see more',\n selected: 'selected',\n\n // Image preview\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst GlobalContent = new TextContent(globalContentData);\n\n// ImageComponent specific content\nconst imageComponentData: LanguagesContent = {\n es: {\n close: 'Cerrar',\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n close: 'Close',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst ImageComponentContent = new TextContent(imageComponentData);\n\nconst content: Provider = {\n _global: GlobalContent,\n LangSettings,\n ImageComponent: ImageComponentContent,\n};\n\nexport default content;\n\n// Export named exports for user convenience\nexport { content, GlobalContent, globalContentData };\n","import { Injectable } from '@angular/core';\nimport { ToastController, ToastOptions } from '@ionic/angular';\n\n/**\n * Service for displaying toast notifications using Ionic's ToastController.\n * Provides methods to show and present toasts with custom options.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n constructor(private toastController: ToastController) {}\n\n /**\n * Presents a toast notification with the given options.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n async presentToast(request: ToastOptions) {\n const toast = await this.toastController.create({\n message: request.message,\n duration: request.duration,\n position: request.position,\n color: request.color,\n });\n\n await toast.present();\n }\n\n /**\n * Shows a toast notification and logs the result.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n show(request: ToastOptions) {\n this.presentToast(request)\n .then(() => {\n console.info('Toast created');\n })\n .catch(error => {\n console.error(JSON.stringify(error));\n });\n }\n}\n","import { Observable, map } from 'rxjs';\nimport { LangService } from '../../services/lang-provider/lang-provider.service';\n\n/**\n * Content utilities for reactive text binding in components.\n *\n * These utilities provide a convenient way to bind component properties\n * to language content that automatically updates when the language changes.\n */\n\n/**\n * Unified configuration for content binding with optional interpolation.\n * Supports both simple content retrieval and content with dynamic values.\n */\nexport interface ContentConfig {\n /**\n * The component class name (used for content lookup).\n * If omitted, searches in global content (_global namespace).\n */\n className?: string;\n /** The content key to retrieve */\n key: string;\n /** Optional fallback text if content is not found */\n fallback?: string;\n /** Optional object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * @deprecated Use ContentConfig with interpolation property instead.\n * This interface is kept for backward compatibility.\n */\nexport interface InterpolatedContentConfig extends ContentConfig {\n /** Object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * Create a reactive content observable from a content key.\n * This is the primary utility for the `fromContent` pattern with unified support\n * for both simple content and content with interpolation.\n *\n * @param langService - The language service instance\n * @param config - Content configuration with optional interpolation\n * @returns Observable that emits the content string and updates on language change\n *\n * @example Simple content:\n * ```typescript\n * // Component-specific content\n * this.title$ = fromContent(this.langService, {\n * className: 'HeaderComponent',\n * key: 'title',\n * fallback: 'Default Title'\n * });\n *\n * // Global content (no className needed)\n * this.saveButton$ = fromContent(this.langService, {\n * key: 'save'\n * });\n * ```\n *\n * @example Content with interpolation:\n * ```typescript\n * // Content: \"Hello {name}, you have {count} messages\"\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * // Results in: \"Hello John, you have 5 messages\"\n * ```\n */\nexport function fromContent(langService: LangService, config: ContentConfig): Observable<string> {\n // Use _global as default className if not provided\n const finalClassName = config.className || '_global';\n\n const contentObservable = langService.getContent(finalClassName, config.key, config.fallback);\n\n // If interpolation is provided, apply it\n if (config.interpolation) {\n return contentObservable.pipe(\n map(content => interpolateContent(content, config.interpolation))\n );\n }\n\n return contentObservable;\n}\n\n/**\n * Create a reactive content observable with interpolation support.\n *\n * @deprecated Use fromContent() with interpolation property instead.\n * This method is kept for backward compatibility.\n *\n * @param langService - The language service instance\n * @param config - Interpolated content configuration\n * @returns Observable that emits the interpolated content string\n *\n * @example Migration:\n * ```typescript\n * // OLD (deprecated):\n * this.greeting$ = fromContentWithInterpolation(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n *\n * // NEW (recommended):\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: LangService,\n config: InterpolatedContentConfig\n): Observable<string> {\n // Delegate to the unified fromContent method\n return fromContent(langService, config);\n}\n\n/**\n * Create multiple reactive content observables at once.\n * Useful when a component needs several content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @param keys - Array of content keys to retrieve\n * @returns Observable that emits an object with all requested content\n *\n * @example\n * ```typescript\n * this.content$ = fromMultipleContent(this.langService, 'FormComponent', [\n * 'title', 'submitButton', 'cancelButton'\n * ]);\n *\n * // In template\n * <ng-container *ngIf=\"content$ | async as content\">\n * <h2>{{ content.title }}</h2>\n * <button>{{ content.submitButton }}</button>\n * <button>{{ content.cancelButton }}</button>\n * </ng-container>\n * ```\n */\nexport function fromMultipleContent(\n langService: LangService,\n className: string,\n keys: string[]\n): Observable<Record<string, string>> {\n return langService.getMultipleContent(className, keys);\n}\n\n/**\n * Helper function to interpolate values into a content string.\n * Replaces placeholders in the format {key} with corresponding values.\n *\n * @param content - The content string with placeholders\n * @param values - Object with values to interpolate\n * @returns The interpolated string\n *\n * @example\n * ```typescript\n * const result = interpolateContent(\"Hello {name}!\", { name: \"World\" });\n * // Returns: \"Hello World!\"\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values) return content;\n\n return Object.entries(values).reduce((result, [key, value]) => {\n return result.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), String(value));\n }, content);\n}\n\n/**\n * Type-safe content key builder for better IDE support.\n * This is a utility type that can be used to ensure content keys exist.\n *\n * @example\n * ```typescript\n * // Define your component's content keys\n * interface MyComponentContent {\n * title: string;\n * description: string;\n * submitButton: string;\n * }\n *\n * // Use with type safety\n * const titleKey: ContentKey<MyComponentContent> = 'title'; // ✓ Valid\n * const invalidKey: ContentKey<MyComponentContent> = 'invalid'; // ✗ Type error\n * ```\n */\nexport type ContentKey<T> = keyof T & string;\n\n/**\n * Factory function to create a content helper bound to a specific component class.\n * This creates a more convenient API for components that need multiple content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @returns Object with convenient methods for content retrieval\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private content = createContentHelper(this.langService, 'MyComponent');\n *\n * constructor(private langService: LangService) {}\n *\n * ngOnInit() {\n * this.title$ = this.content.get('title');\n * this.allContent$ = this.content.getMultiple(['title', 'description']);\n * }\n * }\n * ```\n */\nexport function createContentHelper(langService: LangService, className: string) {\n return {\n /**\n * Get a single content string reactively.\n */\n get(key: string, fallback?: string): Observable<string> {\n return fromContent(langService, { className, key, fallback });\n },\n\n /**\n * Get multiple content strings reactively.\n */\n getMultiple(keys: string[]): Observable<Record<string, string>> {\n return fromMultipleContent(langService, className, keys);\n },\n\n /**\n * Get content with interpolation.\n */\n getWithInterpolation(\n key: string,\n interpolation: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return fromContentWithInterpolation(langService, {\n className,\n key,\n interpolation,\n fallback,\n });\n },\n\n /**\n * Get a single content string synchronously (current language only).\n */\n getText(key: string, fallback?: string): string {\n return langService.getText(className, key, fallback);\n },\n\n /**\n * Check if a content key exists.\n */\n hasContent(key: string): boolean {\n return langService.hasContent(className, key);\n },\n };\n}\n","/*\n * Public API Surface of valtech-components\n */\n\nexport * from './lib/components/atoms/avatar/avatar.component';\nexport * from './lib/components/atoms/avatar/types';\nexport * from './lib/components/atoms/box/box.component';\nexport * from './lib/components/atoms/box/types';\nexport * from './lib/components/atoms/button/button.component';\nexport * from './lib/components/atoms/button/factory';\nexport * from './lib/components/atoms/display/display.component';\nexport * from './lib/components/atoms/display/types';\nexport * from './lib/components/atoms/divider/divider.component';\nexport * from './lib/components/atoms/divider/types';\nexport * from './lib/components/atoms/href/href.component';\nexport * from './lib/components/atoms/href/types';\nexport * from './lib/components/atoms/icon/icon.component';\nexport * from './lib/components/atoms/icon/types';\nexport * from './lib/components/atoms/image/image.component';\nexport * from './lib/components/atoms/image/types';\nexport * from './lib/components/atoms/progress-bar/progress-bar.component';\nexport * from './lib/components/atoms/progress-bar/types';\nexport * from './lib/components/atoms/text/text.component';\nexport * from './lib/components/atoms/text/types';\nexport * from './lib/components/atoms/title/title.component';\nexport * from './lib/components/atoms/title/types';\n\nexport * from './lib/components/molecules/action-header/action-header.component';\nexport * from './lib/components/molecules/action-header/types';\nexport * from './lib/components/molecules/alert-box/alert-box.component';\nexport * from './lib/components/molecules/alert-box/types';\nexport * from './lib/components/molecules/button-group/button-group.component';\nexport * from './lib/components/molecules/button-group/types';\nexport * from './lib/components/molecules/card/card.component';\nexport * from './lib/components/molecules/card/types';\nexport * from './lib/components/molecules/check-input/check-input.component';\nexport * from './lib/components/molecules/code-display/code-display.component';\nexport * from './lib/components/molecules/code-display/types';\nexport * from './lib/components/molecules/command-display/command-display.component';\nexport * from './lib/components/molecules/command-display/types';\nexport * from './lib/components/molecules/comment-input/comment-input.component';\nexport * from './lib/components/molecules/content-loader/content-loader.component';\nexport * from './lib/components/molecules/content-loader/types';\nexport * from './lib/components/molecules/date-input/date-input.component';\nexport * from './lib/components/molecules/email-input/email-input.component';\nexport * from './lib/components/molecules/expandable-text/expandable-text.component';\nexport * from './lib/components/molecules/expandable-text/types';\nexport * from './lib/components/molecules/file-input/file-input.component';\nexport * from './lib/components/molecules/hint/hint.component';\nexport * from './lib/components/molecules/hour-input/hour-input.component';\nexport * from './lib/components/molecules/info/info.component';\nexport * from './lib/components/molecules/info/types';\nexport * from './lib/components/molecules/language-selector/language-selector.component';\nexport * from './lib/components/molecules/language-selector/types';\nexport * from './lib/components/molecules/layered-card/layered-card.component';\nexport * from './lib/components/molecules/layered-card/types';\nexport * from './lib/components/molecules/link/link.component';\nexport * from './lib/components/molecules/link/types';\nexport * from './lib/components/molecules/links-cake/links-cake.component';\nexport * from './lib/components/molecules/links-cake/types';\nexport * from './lib/components/molecules/multi-select-search/multi-select-search.component';\nexport * from './lib/components/molecules/multi-select-simple/multi-select-simple.component';\nexport * from './lib/components/molecules/notes-box/notes-box.component';\nexport * from './lib/components/molecules/notes-box/types';\nexport * from './lib/components/molecules/number-from-to/number-from-to.component';\nexport * from './lib/components/molecules/number-input/number-input.component';\nexport * from './lib/components/molecules/password-input/password-input.component';\nexport * from './lib/components/molecules/pill/pill.component';\nexport * from './lib/components/molecules/pill/types';\nexport * from './lib/components/molecules/pin-input/pin-input.component';\nexport * from './lib/components/molecules/plain-code-box/plain-code-box.component';\nexport * from './lib/components/molecules/plain-code-box/types';\nexport * from './lib/components/molecules/popover-selector/popover-selector.component';\nexport * from './lib/components/molecules/popover-selector/types';\nexport * from './lib/components/molecules/progress-status/progress-status.component';\nexport * from './lib/components/molecules/progress-status/types';\nexport * from './lib/components/molecules/prompter/prompter.component';\nexport * from './lib/components/molecules/prompter/types';\nexport * from './lib/components/molecules/radio-input/radio-input.component';\nexport * from './lib/components/molecules/searchbar/searchbar.component';\nexport * from './lib/components/molecules/select-input/select-input.component';\nexport * from './lib/components/molecules/select-search/select-search.component';\nexport * from './lib/components/molecules/text-input/text-input.component';\nexport * from './lib/components/molecules/title-block/title-block.component';\nexport * from './lib/components/molecules/title-block/types';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\nexport * from './lib/components/organisms/banner/banner.component';\nexport * from './lib/components/organisms/banner/types';\nexport * from './lib/components/organisms/footer/footer.component';\nexport * from './lib/components/organisms/form/factory';\nexport * from './lib/components/organisms/form/form-footer/form-footer.component';\nexport * from './lib/components/organisms/form/form.component';\nexport * from './lib/components/organisms/header/header.component';\nexport * from './lib/components/organisms/header/types';\nexport * from './lib/components/organisms/item-list/item-list.component';\nexport * from './lib/components/organisms/item-list/types';\nexport * from './lib/components/organisms/no-content/no-content.component';\nexport * from './lib/components/organisms/no-content/types';\nexport * from './lib/components/organisms/toolbar/toolbar.component';\nexport * from './lib/components/organisms/toolbar/types';\nexport * from './lib/components/organisms/wizard/types';\nexport * from './lib/components/organisms/wizard/wizard-footer/wizard-footer.component';\nexport * from './lib/components/organisms/wizard/wizard.component';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\n\nexport * from './lib/components/templates/layout/layout.component';\nexport * from './lib/components/templates/simple/simple.component';\nexport * from './lib/components/templates/simple/types';\n\nexport * from './lib/services/download.service';\nexport * from './lib/services/icons.service';\nexport * from './lib/services/in-app-browser.service';\nexport * from './lib/services/lang-provider/content';\nexport * from './lib/services/lang-provider/lang-provider.service';\nexport * from './lib/services/lang-provider/types';\nexport * from './lib/services/link-processor.service';\nexport * from './lib/services/local-storage.service';\nexport * from './lib/services/navigation.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/types';\n\nexport * from './lib/components/types';\nexport * from './lib/shared/pipes/process-links.pipe';\nexport * from './lib/shared/utils/content';\nexport * from './lib/shared/utils/dom';\nexport * from './lib/shared/utils/form-defaults';\n// Export specific functions from simple-content to avoid conflicts\nexport {\n createReactiveContentMetadata,\n extractContentConfig,\n extractContentConfigWithInterpolation,\n interpolateStaticContent,\n ReactiveContentMetadata,\n ReactiveContentWithInterpolation,\n ReactiveTextMetadata,\n shouldUseReactiveContent,\n shouldUseReactiveContentWithInterpolation\n} from './lib/shared/utils/simple-content';\nexport * from './lib/shared/utils/styles';\nexport * from './lib/shared/utils/text';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconService","i2","interpolateContent","fromContentWithInterpolation","i1.DownloadService","i2.IconService","i3.NavigationService","i4.LangService","i1","i1.LangService","i2.LinkProcessorService","map","i3","distinctUntilChanged"],"mappings":"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"}
1
+ {"version":3,"file":"valtech-components.mjs","sources":["../../../projects/valtech-components/src/lib/components/atoms/avatar/avatar.component.ts","../../../projects/valtech-components/src/lib/services/icons.service.ts","../../../projects/valtech-components/src/lib/components/atoms/box/box.component.ts","../../../projects/valtech-components/src/lib/shared/utils/simple-content.ts","../../../projects/valtech-components/src/lib/components/types.ts","../../../projects/valtech-components/src/lib/services/download.service.ts","../../../projects/valtech-components/src/lib/services/in-app-browser.service.ts","../../../projects/valtech-components/src/lib/services/navigation.service.ts","../../../projects/valtech-components/src/lib/shared/constants/storage.ts","../../../projects/valtech-components/src/lib/services/local-storage.service.ts","../../../projects/valtech-components/src/lib/services/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/types.ts","../../../projects/valtech-components/src/lib/services/lang-provider/lang-provider.service.ts","../../../projects/valtech-components/src/lib/components/atoms/button/button.component.ts","../../../projects/valtech-components/src/lib/components/atoms/button/factory.ts","../../../projects/valtech-components/src/lib/components/atoms/display/display.component.ts","../../../projects/valtech-components/src/lib/components/atoms/divider/divider.component.ts","../../../projects/valtech-components/src/lib/components/atoms/href/href.component.ts","../../../projects/valtech-components/src/lib/components/atoms/icon/icon.component.ts","../../../projects/valtech-components/src/lib/components/atoms/image/image.component.ts","../../../projects/valtech-components/src/lib/components/atoms/progress-bar/progress-bar.component.ts","../../../projects/valtech-components/src/lib/services/link-processor.service.ts","../../../projects/valtech-components/src/lib/shared/pipes/process-links.pipe.ts","../../../projects/valtech-components/src/lib/components/atoms/text/text.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/title.component.ts","../../../projects/valtech-components/src/lib/components/atoms/title/types.ts","../../../projects/valtech-components/src/lib/components/molecules/action-header/action-header.component.ts","../../../projects/valtech-components/src/lib/components/molecules/alert-box/alert-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/button-group/button-group.component.ts","../../../projects/valtech-components/src/lib/components/molecules/card/types.ts","../../../projects/valtech-components/src/lib/components/molecules/card/card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/check-input/check-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/code-display/code-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/command-display/command-display.component.ts","../../../projects/valtech-components/src/lib/components/molecules/comment-input/comment-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/content-loader/content-loader.component.ts","../../../projects/valtech-components/src/lib/shared/utils/form-defaults.ts","../../../projects/valtech-components/src/lib/components/molecules/date-input/date-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/email-input/email-input.component.ts","../../../projects/valtech-components/src/lib/shared/utils/styles.ts","../../../projects/valtech-components/src/lib/components/molecules/expandable-text/expandable-text.component.ts","../../../projects/valtech-components/src/lib/components/molecules/file-input/file-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hint/hint.component.ts","../../../projects/valtech-components/src/lib/components/molecules/hour-input/hour-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/link/link.component.ts","../../../projects/valtech-components/src/lib/components/molecules/title-block/title-block.component.ts","../../../projects/valtech-components/src/lib/components/molecules/info/info.component.ts","../../../projects/valtech-components/src/lib/components/molecules/popover-selector/popover-selector.component.ts","../../../projects/valtech-components/src/lib/components/molecules/language-selector/language-selector.component.ts","../../../projects/valtech-components/src/lib/services/theme.service.ts","../../../projects/valtech-components/src/lib/components/molecules/layered-card/layered-card.component.ts","../../../projects/valtech-components/src/lib/components/molecules/links-cake/links-cake.component.ts","../../../projects/valtech-components/src/lib/shared/utils/text.ts","../../../projects/valtech-components/src/lib/components/molecules/searchbar/searchbar.component.ts","../../../projects/valtech-components/src/lib/components/molecules/multi-select-search/multi-select-search.component.ts","../../../projects/valtech-components/src/lib/components/molecules/multi-select-simple/multi-select-simple.component.ts","../../../projects/valtech-components/src/lib/components/molecules/notes-box/notes-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-from-to/number-from-to.component.ts","../../../projects/valtech-components/src/lib/components/molecules/number-input/number-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/password-input/password-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pill/pill.component.ts","../../../projects/valtech-components/src/lib/components/molecules/pin-input/pin-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/plain-code-box/plain-code-box.component.ts","../../../projects/valtech-components/src/lib/components/molecules/progress-status/progress-status.component.ts","../../../projects/valtech-components/src/lib/components/molecules/prompter/prompter.component.ts","../../../projects/valtech-components/src/lib/components/molecules/radio-input/radio-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/select-input/select-input.component.ts","../../../projects/valtech-components/src/lib/components/molecules/select-search/select-search.component.ts","../../../projects/valtech-components/src/lib/components/molecules/text-input/text-input.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/article.component.ts","../../../projects/valtech-components/src/lib/components/organisms/article/types.ts","../../../projects/valtech-components/src/lib/components/organisms/banner/banner.component.ts","../../../projects/valtech-components/src/lib/components/organisms/toolbar/toolbar.component.ts","../../../projects/valtech-components/src/lib/components/organisms/footer/footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/form/factory.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form-footer/form-footer.component.ts","../../../projects/valtech-components/src/lib/shared/utils/dom.ts","../../../projects/valtech-components/src/lib/components/organisms/form/form.component.ts","../../../projects/valtech-components/src/lib/components/organisms/header/header.component.ts","../../../projects/valtech-components/src/lib/components/organisms/item-list/item-list.component.ts","../../../projects/valtech-components/src/lib/components/organisms/no-content/no-content.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/types.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.ts","../../../projects/valtech-components/src/lib/components/organisms/wizard/wizard.component.ts","../../../projects/valtech-components/src/lib/components/templates/layout/layout.component.ts","../../../projects/valtech-components/src/lib/components/templates/simple/simple.component.ts","../../../projects/valtech-components/src/lib/services/lang-provider/components/lang-settings.ts","../../../projects/valtech-components/src/lib/services/lang-provider/content.ts","../../../projects/valtech-components/src/lib/services/toast.service.ts","../../../projects/valtech-components/src/lib/shared/utils/content.ts","../../../projects/valtech-components/src/public-api.ts","../../../projects/valtech-components/src/valtech-components.ts"],"sourcesContent":["import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonAvatar } from '@ionic/angular/standalone';\nimport { AvatarMetadata } from './types';\n\n@Component({\n selector: 'val-avatar',\n standalone: true,\n imports: [IonAvatar],\n template: `\n <ion-avatar\n aria-hidden=\"true\"\n [class]=\"props.size\"\n [class.box]=\"props.box\"\n [class.grayscale]=\"props.grayscale\"\n (click)=\"onClickHandler()\"\n >\n <img alt=\"profile image\" [src]=\"props.image || props.default\" />\n </ion-avatar>\n `,\n styleUrls: ['./avatar.component.scss'],\n})\n/**\n * val-avatar\n *\n * Displays a user or profile image, optionally with a box style and different sizes.\n *\n * @example\n * <val-avatar [props]=\"{ image: 'url', size: 'medium', box: true }\" (onClick)=\"handler()\"></val-avatar>\n *\n * @input props: AvatarMetadata - Configuration for the avatar (image, size, box, default image)\n * @output onClick - Emits when the avatar is clicked\n */\nexport class AvatarComponent implements OnInit {\n @Input() props: AvatarMetadata;\n\n /**\n * Event emitted when the avatar is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit();\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for registering and managing custom Ionicons icons in the application.\n * Automatically registers a set of commonly used icons on initialization.\n */\n\nimport { Injectable } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport {\n addCircleOutline,\n addOutline,\n alertCircleOutline,\n alertOutline,\n arrowBackOutline,\n arrowDownOutline,\n arrowForwardOutline,\n businessOutline,\n calendarOutline,\n chatbubblesOutline,\n checkmarkCircleOutline,\n checkmarkOutline,\n chevronDownOutline,\n chevronForwardOutline,\n clipboardOutline,\n closeOutline,\n copyOutline,\n createOutline,\n documentTextOutline,\n ellipsisHorizontalOutline,\n eyeOffOutline,\n eyeOutline,\n filterOutline,\n heart,\n heartOutline,\n homeOutline,\n informationCircleOutline,\n locationOutline,\n lockClosedOutline,\n logoFacebook,\n logoInstagram,\n logoLinkedin,\n logoNpm,\n logoTiktok,\n logoTwitter,\n logoYoutube,\n notificationsOutline,\n openOutline,\n playOutline,\n refreshOutline,\n removeOutline,\n scanOutline,\n shareOutline,\n trashOutline,\n} from 'ionicons/icons';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconService {\n /**\n * Registers a set of Ionicons icons for use throughout the app.\n */\n constructor() {\n addIcons({\n addOutline,\n addCircleOutline,\n alertOutline,\n alertCircleOutline,\n arrowBackOutline,\n arrowForwardOutline,\n arrowDownOutline,\n checkmarkCircleOutline,\n ellipsisHorizontalOutline,\n notificationsOutline,\n openOutline,\n closeOutline,\n chatbubblesOutline,\n shareOutline,\n heart,\n heartOutline,\n homeOutline,\n eyeOffOutline,\n eyeOutline,\n scanOutline,\n chevronDownOutline,\n chevronForwardOutline,\n checkmarkOutline,\n clipboardOutline,\n copyOutline,\n filterOutline,\n locationOutline,\n calendarOutline,\n businessOutline,\n logoTwitter,\n logoInstagram,\n logoLinkedin,\n logoYoutube,\n logoTiktok,\n logoFacebook,\n createOutline,\n trashOutline,\n playOutline,\n refreshOutline,\n documentTextOutline,\n lockClosedOutline,\n informationCircleOutline,\n logoNpm,\n removeOutline,\n });\n }\n}\n","import { CommonModule, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonCard, IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { BoxMetadata } from './types';\n\n@Component({\n selector: 'val-box',\n standalone: true,\n imports: [CommonModule, IonCard, IonIcon, NgStyle],\n template: `\n <ion-card\n class=\"box\"\n [color]=\"props.color\"\n [class.rounded]=\"props.rounded\"\n [class.bordered]=\"props.bordered\"\n [class.transparent]=\"!props.color\"\n [class.left-border]=\"props.leftBorder\"\n [ngStyle]=\"{\n padding: props.padding ? props.padding : '0px',\n }\"\n >\n @if (props.icon) {\n <ion-icon class=\"icon\" [name]=\"props.icon\" (click)=\"clickHandler()\"></ion-icon>\n }\n <div\n [ngStyle]=\"{\n 'margin-right': props.icon ? '24px' : '0px',\n }\"\n >\n <ng-content select=\"[body]\"></ng-content>\n </div>\n </ion-card>\n `,\n styleUrls: ['./box.component.scss'],\n})\n/**\n * val-box\n *\n * A stylized card container for grouping content, with optional icon, color, border, and click event.\n *\n * @example\n * <val-box [props]=\"{ color: 'primary', rounded: true, icon: 'star' }\" (onClick)=\"handler()\">\n * <div body>Content here</div>\n * </val-box>\n *\n * @input props: BoxMetadata - Configuration for the box (color, icon, border, etc.)\n * @output onClick - Emits when the box or its icon is clicked\n */\nexport class BoxComponent implements OnInit {\n /**\n * Box configuration object.\n * @type {BoxMetadata}\n * @property color - The color of the box (Ionic color string).\n * @property icon - The name of the icon to display (optional).\n * @property bordered - Whether the box has a border (optional).\n * @property leftBorder - Whether the box has a left border (optional).\n * @property rounded - Whether the box has rounded corners (optional).\n * @property padding - Custom padding for the box (optional).\n */\n @Input()\n props: BoxMetadata;\n\n /**\n * Event emitted when the box or its icon is clicked.\n */\n @Output()\n onClick = new EventEmitter();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n clickHandler() {\n this.onClick.emit();\n }\n}\n","/**\n * Simplified content utilities for the new LangService-only system.\n * This replaces the old reactive-content.ts with a much simpler approach.\n */\n\n/**\n * Base metadata for components that support reactive content.\n * Simplified version that works directly with LangService.\n */\nexport interface ReactiveContentMetadata {\n /** Static content text (takes precedence over reactive content) */\n content?: string;\n /** Content key for reactive content from LangService */\n contentKey?: string;\n /** Component class name for content lookup */\n contentClass?: string;\n /** Fallback text if content is not found */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for text-based components with reactive content support.\n */\nexport interface ReactiveTextMetadata extends ReactiveContentMetadata {\n /** Static content text */\n content?: string;\n /** Content key for reactive lookup */\n contentKey?: string;\n /** Component class name */\n contentClass?: string;\n /** Fallback text */\n contentFallback?: string;\n}\n\n/**\n * Extended metadata for components that support content interpolation.\n */\nexport interface ReactiveContentWithInterpolation extends ReactiveContentMetadata {\n /** Interpolation data for parameterized content */\n contentInterpolation?: Record<string, string | number>;\n}\n\n/**\n * Helper function to determine if component should use reactive content.\n * @param metadata Component metadata\n * @returns True if component should use reactive content\n */\nexport function shouldUseReactiveContent(metadata: ReactiveContentMetadata): boolean {\n return !metadata.content && !!(metadata.contentKey && metadata.contentClass);\n}\n\n/**\n * Extract content configuration from metadata.\n * @param metadata Component metadata\n * @returns Content configuration for LangService\n */\nexport function extractContentConfig(metadata: ReactiveContentMetadata) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n };\n}\n\n/**\n * Create reactive content metadata with defaults.\n * @param config Partial content configuration\n * @returns Complete reactive content metadata\n */\nexport function createReactiveContentMetadata(\n config: Partial<ReactiveContentMetadata>\n): ReactiveContentMetadata {\n return {\n content: config.content,\n contentKey: config.contentKey,\n contentClass: config.contentClass,\n contentFallback: config.contentFallback,\n };\n}\n\n/**\n * Interpolate content string with values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateContent('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n}\n\n/**\n * Check if component should use reactive content with interpolation.\n * @param metadata Component metadata with interpolation\n * @returns True if component should use reactive content with interpolation\n */\nexport function shouldUseReactiveContentWithInterpolation(\n metadata: ReactiveContentWithInterpolation\n): boolean {\n return shouldUseReactiveContent(metadata) && !!metadata.contentInterpolation;\n}\n\n/**\n * Extract content configuration with interpolation from metadata.\n * @param metadata Component metadata with interpolation\n * @returns Content configuration for LangService with interpolation data\n */\nexport function extractContentConfigWithInterpolation(metadata: ReactiveContentWithInterpolation) {\n return {\n className: metadata.contentClass || '',\n key: metadata.contentKey || '',\n fallback: metadata.contentFallback,\n interpolation: metadata.contentInterpolation,\n };\n}\n\n/**\n * Helper function to get reactive content with interpolation using LangService.\n * This provides a unified way to get reactive, interpolated content.\n *\n * @param langService - The LangService instance\n * @param metadata - Component metadata with interpolation\n * @returns Observable that emits interpolated content\n *\n * @example\n * ```typescript\n * const content$ = fromContentWithInterpolation(this.langService, {\n * contentClass: 'MyComponent',\n * contentKey: 'greeting',\n * contentInterpolation: { name: 'World' }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: any, // LangService type would cause circular dependency\n metadata: ReactiveContentWithInterpolation\n): any {\n // Observable<string> but avoiding import\n const config = extractContentConfigWithInterpolation(metadata);\n\n if (!config.className || !config.key) {\n throw new Error('fromContentWithInterpolation requires both contentClass and contentKey');\n }\n\n return langService.getContentWithInterpolation(\n config.className,\n config.key,\n config.interpolation,\n config.fallback\n );\n}\n\n/**\n * Helper function to get static content with interpolation.\n * This provides interpolation for static content strings.\n *\n * @param content - Static content string\n * @param interpolationData - Values to interpolate\n * @returns Interpolated string\n */\nexport function interpolateStaticContent(\n content: string,\n interpolationData?: Record<string, string | number>\n): string {\n return interpolateContent(content, interpolationData);\n}\n","import { FormControl, ValidatorFn } from '@angular/forms';\nimport { Color } from '@ionic/core';\nimport { ImageMetadata } from './atoms/image/types';\n\n/**\n * Possible states for an interactive component.\n */\nexport type ComponentState = 'ENABLED' | 'DISABLED' | 'WORKING' | 'ERROR';\nconst ENABLED: ComponentState = 'ENABLED';\nconst DISABLED: ComponentState = 'DISABLED';\nconst WORKING: ComponentState = 'WORKING';\nconst ERROR: ComponentState = 'ERROR';\n\n/**\n * Object containing all possible component states.\n */\nexport const ComponentStates = { ENABLED, DISABLED, WORKING, ERROR };\n\n/**\n * Types of actions that a button or link can perform.\n */\nexport enum ActionType {\n BROWSER_NEW_TAB, // Open in a new browser tab\n BROWSER_DOWNLOAD, // Download via browser\n NATIVE_DOWNLOAD, // Download using native capabilities\n APP_NAVIGATION, // Internal app navigation\n BROWSER_NAVIGATION, // Navigation in the browser\n}\n\n/**\n * Represents an executable action for a button or link.\n */\nexport type Action = {\n /** Action description */\n description: string;\n /** Action type */\n type: ActionType;\n /** Action source or destination */\n source: string;\n};\n\n/**\n * Supported input types for forms.\n */\nexport enum InputType {\n TEXT,\n EMAIL,\n PASSWORD,\n COMMENT,\n NUMBER,\n NUMBER_FROM_TO,\n PIN_CODE,\n DATE,\n HOUR,\n CHECK,\n RADIO,\n SELECT,\n SEARCH_SELECT,\n MULTI_SELECT,\n MULTI_SELECT_SIMPLE,\n FILE,\n}\n\n/**\n * Option for select, radio, etc. inputs.\n */\nexport type InputOption = {\n /** Unique option identifier */\n id: string;\n /** Display name */\n name: string;\n /** Whether the option is selected by default */\n selected?: boolean;\n /** Display order */\n order: number;\n};\n\n/**\n * Metadata for a form field.\n */\nexport type InputMetadata = {\n /** Associated form control */\n control: FormControl;\n /** From control (only for NUMBER_FROM_TO type) */\n fromControl?: FormControl;\n /** To control (only for NUMBER_FROM_TO type) */\n toControl?: FormControl;\n /** Unique token for the input */\n token: string;\n /** Display label */\n label: string;\n /** Field name */\n name: string;\n /** Help text */\n hint: string;\n /** Input placeholder */\n placeholder: string;\n /** Input type */\n type: InputType;\n /** Display order */\n order: number;\n /** Associated validators */\n validators: ValidatorFn[];\n /** Options (for select, radio, etc.) */\n options?: InputOption[];\n /** Allowed range (for number, date, etc.) */\n range?: {\n min: number;\n max: number;\n };\n /** Custom error messages */\n errors: {\n [key: string]: string;\n };\n /** Initial value for the field */\n value?: string;\n /** Default value configuration - string for custom defaults, true for auto defaults */\n withDefault?: string | boolean;\n /** Field state */\n state: ComponentState;\n /** Label for \"from\" field (only for NUMBER_FROM_TO type) */\n fromLabel?: string;\n /** Label for \"to\" field (only for NUMBER_FROM_TO type) */\n toLabel?: string;\n /** Placeholder for \"from\" field (only for NUMBER_FROM_TO type) */\n fromPlaceholder?: string;\n /** Placeholder for \"to\" field (only for NUMBER_FROM_TO type) */\n toPlaceholder?: string;\n};\n\n/**\n * A section in a form, grouping multiple fields.\n */\nexport type FormSection = {\n /** Section name */\n name: string;\n /** Display order */\n order: number;\n /** Fields included in the section */\n fields: InputMetadata[];\n};\n\n/**\n * Data sent when submitting a form.\n */\nexport type FormSubmit = {\n /** List of fields and their values */\n fields: { key: string; value: string }[];\n /** Optional token for the operation */\n token?: string;\n};\n\n/**\n * Metadata for a complete form.\n */\nexport type FormMetadata = {\n /** Form name */\n name: string;\n /** Form sections */\n sections: FormSection[];\n /** Action buttons configuration */\n actions: ButtonMetadata;\n /** Global form state */\n state: ComponentState;\n};\n\n/**\n * Possible action types for a toolbar.\n */\nexport enum ToolbarActionType {\n AVATAR = 'AVATAR',\n ICON = 'ICON',\n IMAGE = 'IMAGE',\n BUTTON = 'BUTTON',\n}\n\n/**\n * Toolbar action definition.\n */\nexport type ToolbarAction = {\n /** Action type */\n type: 'AVATAR' | 'ICON' | 'IMAGE' | 'BUTTON';\n /** Optional token identifier */\n token?: string;\n /** Toolbar position */\n position: 'left' | 'right' | 'center';\n /** Optional description */\n description?: string;\n /** Associated image (if any) */\n image?: ImageMetadata;\n};\n\n/**\n * Metadata for an icon.\n */\nexport interface IconMetada {\n /** Icon name */\n name: string;\n /** Icon slot position */\n slot: 'start' | 'end';\n}\n\n/**\n * Button configuration object.\n * Supports both static and reactive content.\n * @type {ButtonMetadata}\n * @property text - Static button label (takes precedence over textConfig).\n * @property textConfig - Reactive content configuration for button text.\n * @property color - The button color (Ionic color string).\n * @property icon - Icon to display (optional).\n * @property state - Button state (enabled, disabled, working, etc.).\n * @property expand, fill, size, shape, href, target, download, handler, etc. - See ButtonMetadata for all options.\n */\nexport interface ButtonMetadata {\n /** Associated action type */\n actionType?: ActionType;\n /** Button expansion */\n expand?: 'full' | 'block';\n /** Associated link */\n link?: string;\n /** Associated href link */\n href?: string;\n /** Link target */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** Download file name */\n download?: string;\n /** Button color */\n color: Color;\n /** Button state */\n state: ComponentState;\n /** Static display text (takes precedence over reactive content) */\n text?: string;\n /** Reactive content configuration for button text */\n contentKey?: string;\n /** Component class name for content lookup (required with contentKey) */\n contentClass?: string;\n /** Fallback text if contentKey is not found */\n contentFallback?: string;\n /** Values to interpolate into the content string */\n contentInterpolation?: Record<string, string | number>;\n /** Associated icon */\n icon?: IconMetada;\n /** Button shape */\n shape?: 'round';\n /** Button size */\n size?: 'small' | 'default' | 'large';\n /** Button fill */\n fill?: 'clear' | 'outline' | 'solid' | 'default';\n /** Button type */\n type: 'button' | 'submit' | 'reset';\n /** Optional token identifier */\n token?: string;\n /** Optional reference */\n ref?: any;\n /** Action handler */\n handler?: (value: any) => any | Promise<any>;\n}\n\n/**\n * Configuration for reactive content in val-button component.\n * Use this interface when you only need to specify content-related properties.\n * This follows the same pattern as TextContentConfig for consistency.\n */\nexport interface ButtonContentConfig {\n contentKey: string;\n contentClass: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n}\n\n","/**\n * Service for downloading files and opening links in new tabs.\n * Provides utility methods for browser-based file downloads and extracting file names from URLs.\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DownloadService {\n /**\n * Extracts the file name from a given URL.\n * @param url The file URL\n * @returns The file name\n */\n getFileNameFromUrl(url: string): string {\n try {\n const pathSegments = url.split('/');\n const lastSegment = pathSegments[pathSegments.length - 1];\n const fileName = decodeURIComponent(lastSegment);\n return fileName;\n } catch (error) {\n console.error('Error al obtener nombre de archivo: ', JSON.stringify(error));\n return 'filename';\n }\n }\n\n /**\n * Opens a given URL in a new browser tab and triggers download if possible.\n * @param url The file URL\n */\n openNewTab(url: string): void {\n if (url) {\n const fileName = this.getFileNameFromUrl(url);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('La URL no está definida');\n }\n }\n\n /**\n * Downloads a file from the browser using fetch and triggers a download dialog.\n * @param url The file URL\n */\n downloadLinkFromBrowser(url: string): void {\n console.log('trying to download file from url');\n if (url) {\n fetch(url)\n .then(response => response.blob())\n .then(blob => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n\n const fileName = this.getFileNameFromUrl(url);\n link.download = `${+new Date()}-${fileName}`;\n link.target = '_self';\n link.click();\n\n window.URL.revokeObjectURL(url);\n })\n .catch(error => {\n console.error('Error al descargar el archivo:', JSON.stringify(error));\n });\n } else {\n console.error('La URL no está definida');\n }\n }\n}\n","/* eslint-disable no-underscore-dangle */\n\n/**\n * Service for opening URLs using Capacitor's InAppBrowser plugin.\n * Provides a method to open links in a popover-style browser within the app.\n */\nimport { Injectable } from '@angular/core';\nimport { Browser, OpenOptions } from '@capacitor/browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class InAppBrowserService {\n /**\n * Default options for the in-app browser.\n */\n options: OpenOptions = {\n presentationStyle: 'popover',\n url: '',\n };\n constructor() {}\n\n /**\n * Opens a URL using Capacitor's InAppBrowser with the configured options.\n * @param url The URL to open\n */\n async openWithInAppBrowser(url: string) {\n await Browser.open({ ...this.options, url });\n }\n}\n","import { Location } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { InAppBrowserService } from './in-app-browser.service';\n\n/**\n * Service for navigation and routing within the application.\n * Supports navigation with data transfer, in-app browser, and opening links in new tabs.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n /**\n * Arbitrary data to be transferred during navigation.\n */\n data: any;\n router = inject(Router);\n location = inject(Location);\n inAppBrowser = inject(InAppBrowserService);\n\n constructor() {}\n\n /**\n * Opens a URL using the in-app browser service.\n * @param url The URL to open\n */\n navigateInApp(url: string) {\n this.inAppBrowser.openWithInAppBrowser(url);\n }\n\n /**\n * Navigates to a route and transfers data using Angular Router state.\n * @param route The route to navigate to\n * @param dataTransfer The data to transfer\n */\n navigateWithData(route: string, dataTransfer: any) {\n const navigationExtras: NavigationExtras = {\n state: {\n data: dataTransfer,\n },\n };\n\n this.router.navigate([route], navigationExtras);\n }\n\n /**\n * Navigates to a URL using Angular Router.\n * @param url The URL to navigate to\n */\n navigateByUrl(url: string) {\n this.router\n .navigateByUrl(url)\n .then(response => {})\n .catch(error => {});\n }\n\n /**\n * Opens a URL in a new browser tab.\n * @param url The URL to open\n */\n openInNewTab(url: string): void {\n window.open(url, '_blank', 'noopener,noreferrer');\n }\n\n /**\n * Navigates back to the previous page in the browser history.\n */\n back(): void {\n this.location.back();\n }\n}\n","export const LANG = 'LANG';\nexport const THEME = 'THEME';\n","/**\n * Utility service for interacting with browser localStorage in a type-safe way.\n * Provides static methods for setting, getting, removing, and clearing items.\n */\nexport class LocalStorageService {\n /**\n * Stores a value in localStorage under the given reference key.\n * @param reference The key to store the value under\n * @param value The value to store\n */\n static set<T>(reference: string, value: T): void {\n localStorage.setItem(reference, JSON.stringify(value));\n }\n\n /**\n * Retrieves a value from localStorage by key.\n * @param reference The key to retrieve\n * @returns The parsed value\n */\n static get<T>(reference: string): T {\n const value = localStorage.getItem(reference);\n return JSON.parse(value) as T;\n }\n\n /**\n * Removes an item from localStorage by key.\n * @param reference The key to remove\n */\n static remove(reference: string): void {\n localStorage.removeItem(reference);\n }\n\n /**\n * Clears all items from localStorage.\n */\n static clear() {\n localStorage.clear();\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Provider } from './lang-provider/content';\n\nexport interface ValtechConfig {\n content: Provider;\n}\n\nexport const ValtechConfigService = new InjectionToken<ValtechConfig>('ValtechConfig');\n","export type LanguageText = {\n [key: string]: string;\n};\n\nexport type LanguagesContent = {\n [key: string]: LanguageText;\n};\n\nexport class TextContent {\n text: LanguagesContent;\n constructor(text: LanguagesContent) {\n this.text = text;\n }\n\n get Content(): LanguagesContent {\n return this.text;\n }\n}\n\n/**\n * Language code type - supports any valid language code string.\n * Common examples: 'es', 'en', 'fr', 'de', 'pt', 'it', 'zh', 'ja', etc.\n */\nexport type LangOption = string;\n\n/**\n * Common language constants for convenience.\n * Users can still use any language code string directly.\n */\nexport const LANGUAGES = {\n ES: 'es' as const,\n EN: 'en' as const,\n FR: 'fr' as const,\n DE: 'de' as const,\n PT: 'pt' as const,\n IT: 'it' as const,\n ZH: 'zh' as const,\n JA: 'ja' as const,\n} as const;\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, distinctUntilChanged, map, shareReplay } from 'rxjs';\nimport { LANG } from '../../shared/constants/storage';\nimport { LocalStorageService } from '../local-storage.service';\nimport { ValtechConfig, ValtechConfigService } from '../types';\nimport { Provider } from './content';\nimport { LANGUAGES, LangOption, LanguageText, LanguagesContent, TextContent } from './types';\n\n/**\n * LangService - Reactive language and content management service.\n *\n * This service provides reactive content management with Observable-based language switching.\n * Components can subscribe to content changes and automatically update when the language changes.\n *\n * The service automatically detects available languages from the content configuration\n * and provides intelligent fallbacks with console warnings for missing translations.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private langService: LangService) {}\n *\n * // Get current language\n * const currentLang = this.langService.currentLang;\n *\n * // Subscribe to language changes\n * this.langService.currentLang$.subscribe(lang => console.log('Language changed:', lang));\n *\n * // Get static text\n * const text = this.langService.getText('ComponentName', 'textKey');\n *\n * // Get reactive text\n * const text$ = this.langService.getContent('ComponentName', 'textKey');\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LangService {\n private content: Provider;\n private defaultLang: LangOption;\n private availableLanguages: LangOption[] = [];\n private selectedLang: BehaviorSubject<LangOption>;\n private config: ValtechConfig;\n private warnedMissingLanguages = new Set<string>();\n\n constructor(@Inject(ValtechConfigService) config: ValtechConfig) {\n console.log('LangService: Injected config:', config);\n this.content = config.content;\n this.config = config;\n\n // Detect available languages from content\n this.detectAvailableLanguages();\n\n // Set default language (prefer Spanish, then English, then first available)\n this.defaultLang = this.determineDefaultLanguage();\n\n // Initialize with stored language or default\n const current = LocalStorageService.get<LangOption>(LANG);\n const initialLang = this.validateLanguage(current) || this.defaultLang;\n\n this.selectedLang = new BehaviorSubject<LangOption>(initialLang);\n\n console.log('LangService: Initialized with languages:', {\n available: this.availableLanguages,\n default: this.defaultLang,\n current: initialLang,\n });\n }\n\n /**\n * Detect available languages from the content configuration.\n * Scans all component content to find which languages are actually configured.\n */\n private detectAvailableLanguages(): void {\n const languageSet = new Set<LangOption>();\n\n Object.values(this.content).forEach(componentContent => {\n if (componentContent?.Content) {\n Object.keys(componentContent.Content).forEach(lang => {\n languageSet.add(lang);\n });\n }\n });\n\n this.availableLanguages = Array.from(languageSet).sort();\n\n if (this.availableLanguages.length === 0) {\n console.warn('LangService: No languages detected in content configuration!');\n this.availableLanguages = [LANGUAGES.ES]; // Fallback\n }\n }\n\n /**\n * Determine the best default language based on available content.\n */\n private determineDefaultLanguage(): LangOption {\n // Preference order: Spanish, English, then first available\n const preferredOrder = [LANGUAGES.ES, LANGUAGES.EN];\n\n for (const preferred of preferredOrder) {\n if (this.availableLanguages.includes(preferred)) {\n return preferred;\n }\n }\n\n return this.availableLanguages[0];\n }\n\n /**\n * Validate if a language is available in the content.\n */\n private validateLanguage(lang: LangOption | null): LangOption | null {\n if (!lang) return null;\n return this.availableLanguages.includes(lang) ? lang : null;\n }\n\n /**\n * Get the best available language for a component and key.\n * Provides intelligent fallback with warnings.\n */\n private getBestAvailableContent(\n className: string,\n key: string,\n requestedLang: LangOption\n ): {\n content: string | undefined;\n actualLang: LangOption;\n shouldWarn: boolean;\n } {\n const componentContent = this.content[className];\n\n if (!componentContent) {\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Try requested language first\n const requestedContent = componentContent.Content[requestedLang];\n if (requestedContent?.[key]) {\n return {\n content: requestedContent[key],\n actualLang: requestedLang,\n shouldWarn: false,\n };\n }\n\n // Language not available, try fallbacks\n const warningKey = `${className}.${key}.${requestedLang}`;\n const shouldWarn = !this.warnedMissingLanguages.has(warningKey);\n\n if (shouldWarn) {\n this.warnedMissingLanguages.add(warningKey);\n }\n\n // Try default language\n if (requestedLang !== this.defaultLang) {\n const defaultContent = componentContent.Content[this.defaultLang];\n if (defaultContent?.[key]) {\n return {\n content: defaultContent[key],\n actualLang: this.defaultLang,\n shouldWarn,\n };\n }\n }\n\n // Try first available language\n for (const availableLang of this.availableLanguages) {\n const availableContent = componentContent.Content[availableLang];\n if (availableContent?.[key]) {\n return {\n content: availableContent[key],\n actualLang: availableLang,\n shouldWarn,\n };\n }\n }\n\n return {\n content: undefined,\n actualLang: requestedLang,\n shouldWarn,\n };\n }\n\n /**\n * Observable that emits the current language whenever it changes.\n * Use this to subscribe to language changes in components.\n */\n get currentLang$(): Observable<LangOption> {\n return this.selectedLang.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1) // Ensure new subscribers get the current value\n );\n }\n\n /**\n * Get the current language synchronously.\n */\n get currentLang(): LangOption {\n return this.selectedLang.value;\n }\n\n /**\n * Get array of available languages detected from content.\n */\n get availableLangs(): LangOption[] {\n return [...this.availableLanguages];\n }\n\n /**\n * Get the default language.\n */\n get defaultLanguage(): LangOption {\n return this.defaultLang;\n }\n\n /**\n * Set the current language and persist it to localStorage.\n * This will trigger updates in all reactive content subscriptions.\n *\n * Validates that the language is available and warns if not.\n *\n * @param lang - The language to set\n */\n setLang(lang: LangOption): void {\n if (!this.availableLanguages.includes(lang)) {\n console.warn(\n `LangService: Language \"${lang}\" is not available. Available languages:`,\n this.availableLanguages\n );\n console.warn(`LangService: Falling back to default language \"${this.defaultLang}\"`);\n lang = this.defaultLang;\n }\n\n this.selectedLang.next(lang);\n LocalStorageService.set<LangOption>(LANG, lang);\n }\n\n /**\n * Get content for a component class and key (legacy method).\n *\n * @deprecated Use getText() or getContent() for better type safety\n */\n Text(className: string): LanguageText {\n const componentContent = this.content[className];\n return componentContent?.Content[this.selectedLang.value] || {};\n }\n\n /**\n * Get a single content string synchronously for the current language.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns The text string or fallback\n */\n getText(className: string, key: string, fallback?: string): string {\n const result = this.getBestAvailableContent(className, key, this.selectedLang.value);\n\n if (result.shouldWarn && result.actualLang !== this.selectedLang.value) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${this.selectedLang.value}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }\n\n /**\n * Get a reactive Observable for a specific text key that updates when language changes.\n * This is the recommended method for components that need reactive content.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits the text string whenever language changes\n */\n getContent(className: string, key: string, fallback?: string): Observable<string> {\n return this.currentLang$.pipe(\n map(lang => {\n const result = this.getBestAvailableContent(className, key, lang);\n\n if (result.shouldWarn && result.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${result.actualLang}\" instead. Available languages:`,\n this.availableLanguages\n );\n }\n\n return result.content || fallback || `[${className}.${key}]`;\n }),\n distinctUntilChanged()\n );\n }\n\n /**\n * Get reactive content for multiple keys at once.\n * Provides intelligent fallback with warnings for missing translations.\n *\n * @param className - The component class name\n * @param keys - Array of text keys to retrieve\n * @returns Observable that emits an object with all requested keys\n */\n getMultipleContent(className: string, keys: string[]): Observable<Record<string, string>> {\n return this.currentLang$.pipe(\n map(lang => {\n const result: Record<string, string> = {};\n\n keys.forEach(key => {\n const contentResult = this.getBestAvailableContent(className, key, lang);\n\n if (contentResult.shouldWarn && contentResult.actualLang !== lang) {\n console.warn(\n `LangService: Content \"${className}.${key}\" not available in \"${lang}\".`,\n `Using \"${contentResult.actualLang}\" instead.`\n );\n }\n\n result[key] = contentResult.content || `[${className}.${key}]`;\n });\n\n return result;\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n /**\n * Check if a content key exists for a component in any available language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @returns True if the key exists in any language\n */\n hasContent(className: string, key: string): boolean {\n const classContent = this.content[className];\n if (!classContent) return false;\n\n return Object.values(classContent.Content).some(\n langContent => langContent && typeof langContent[key] === 'string'\n );\n }\n\n /**\n * Check if a content key exists for a component in a specific language.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param lang - The language to check (defaults to current language)\n * @returns True if the key exists in the specified language\n */\n hasContentInLanguage(className: string, key: string, lang?: LangOption): boolean {\n const targetLang = lang || this.currentLang;\n const classContent = this.content[className]?.Content[targetLang];\n return classContent && typeof classContent[key] === 'string';\n }\n\n /**\n * Get available languages for a specific component.\n *\n * @param className - The component class name\n * @returns Array of language codes available for the component\n */\n getAvailableLanguagesForComponent(className: string): LangOption[] {\n const classContent = this.content[className];\n if (!classContent) return [];\n\n return Object.keys(classContent.Content).filter(\n lang => classContent.Content[lang] && Object.keys(classContent.Content[lang]).length > 0\n );\n }\n\n /**\n * Get missing content keys for a component in a specific language.\n * Useful for identifying incomplete translations.\n *\n * @param className - The component class name\n * @param lang - The language to check\n * @param referenceLang - The reference language to compare against (defaults to default language)\n * @returns Array of missing keys\n */\n getMissingContentKeys(className: string, lang: LangOption, referenceLang?: LangOption): string[] {\n const refLang = referenceLang || this.defaultLang;\n const classContent = this.content[className];\n\n if (!classContent) return [];\n\n const referenceContent = classContent.Content[refLang] || {};\n const targetContent = classContent.Content[lang] || {};\n\n return Object.keys(referenceContent).filter(\n key => !targetContent[key] || typeof targetContent[key] !== 'string'\n );\n }\n\n /**\n * Register or update content for a component dynamically.\n * This allows registering content at runtime without APP_INITIALIZER.\n *\n * @param className - The component class name\n * @param content - The multilingual content object\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerContent('MyComponent', {\n * [LANGUAGES.ES]: { title: 'Título', description: 'Descripción' },\n * [LANGUAGES.EN]: { title: 'Title', description: 'Description' }\n * });\n * ```\n */\n registerContent(className: string, content: LanguagesContent, merge: boolean = true): void {\n if (!className) {\n console.error('LangService: className is required for registerContent');\n return;\n }\n\n if (!content || typeof content !== 'object') {\n console.error('LangService: Invalid content provided for registerContent');\n return;\n }\n\n console.log(`LangService: Registering content for \"${className}\"`, {\n merge,\n languages: Object.keys(content),\n });\n\n // Initialize component content if it doesn't exist\n if (!this.content[className]) {\n this.content[className] = new TextContent({});\n }\n\n // Merge or replace content for each language\n Object.entries(content).forEach(([lang, langContent]) => {\n if (!langContent || typeof langContent !== 'object') {\n console.warn(`LangService: Invalid content for language \"${lang}\" in \"${className}\"`);\n return;\n }\n\n if (!this.content[className].Content[lang]) {\n this.content[className].Content[lang] = {};\n }\n\n if (merge) {\n this.content[className].Content[lang] = {\n ...this.content[className].Content[lang],\n ...langContent,\n };\n } else {\n this.content[className].Content[lang] = { ...langContent };\n }\n });\n\n // Update available languages\n this.detectAvailableLanguages();\n\n console.log(`LangService: Content registered successfully for \"${className}\"`);\n }\n\n /**\n * Update multiple content registrations at once.\n *\n * @param contentMap - Map of className to content\n * @param merge - Whether to merge with existing content (default: true)\n *\n * @example\n * ```typescript\n * this.langService.registerMultipleContent({\n * 'Component1': { [LANGUAGES.ES]: { key1: 'valor1' } },\n * 'Component2': { [LANGUAGES.EN]: { key2: 'value2' } }\n * });\n * ```\n */\n registerMultipleContent(\n contentMap: Record<string, LanguagesContent>,\n merge: boolean = true\n ): void {\n if (!contentMap || typeof contentMap !== 'object') {\n console.error('LangService: Invalid contentMap provided for registerMultipleContent');\n return;\n }\n\n console.log('LangService: Registering multiple content entries', {\n classes: Object.keys(contentMap),\n merge,\n });\n\n Object.entries(contentMap).forEach(([className, content]) => {\n this.registerContent(className, content, merge);\n });\n\n console.log('LangService: Multiple content registration completed');\n }\n\n /**\n * Remove content for a specific component.\n *\n * @param className - The component class name to remove\n */\n removeContent(className: string): void {\n if (!className) {\n console.error('LangService: className is required for removeContent');\n return;\n }\n\n if (this.content[className]) {\n delete this.content[className];\n this.detectAvailableLanguages();\n console.log(`LangService: Content removed for \"${className}\"`);\n } else {\n console.warn(`LangService: No content found for \"${className}\" to remove`);\n }\n }\n\n /**\n * Get a list of all registered component classes.\n *\n * @returns Array of registered class names\n */\n getRegisteredClasses(): string[] {\n return Object.keys(this.content);\n }\n\n /**\n * Get the complete content configuration (for debugging purposes).\n * Returns a deep copy to prevent accidental mutations.\n *\n * @returns Complete content configuration\n */\n getContentConfiguration(): Provider {\n return JSON.parse(JSON.stringify(this.content));\n }\n\n /**\n * Clear all content and reset to initial state.\n * Useful for testing or complete reinitialization.\n */\n clearAllContent(): void {\n console.log('LangService: Clearing all content');\n this.content = {};\n this.availableLanguages = [LANGUAGES.ES]; // Reset to default\n this.warnedMissingLanguages.clear();\n console.log('LangService: All content cleared');\n }\n\n /**\n * Get content with interpolation support.\n * Retrieves content and replaces placeholders with provided values.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Text with interpolated values\n */\n getTextWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): string {\n const content = this.getText(className, key, fallback);\n return this.interpolateString(content, interpolationData);\n }\n\n /**\n * Get reactive content with interpolation support.\n * Returns an Observable that emits interpolated content when language changes.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n */\n getContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContent(className, key, fallback).pipe(\n map(content => this.interpolateString(content, interpolationData))\n );\n }\n\n /**\n * Interpolate a string with provided values.\n * Replaces placeholders like {{key}} or {key} with actual values.\n *\n * @param content - Content string with placeholders\n * @param values - Values to interpolate\n * @returns Interpolated string\n *\n * @example\n * ```typescript\n * interpolateString('Hello {{name}}!', { name: 'World' })\n * // Returns: 'Hello World!'\n * ```\n */\n private interpolateString(content: string, values?: Record<string, string | number>): string {\n if (!values || !content) {\n return content;\n }\n\n return content.replace(/\\{\\{?(\\w+)\\}?\\}/g, (match, key) => {\n const value = values[key];\n return value !== undefined ? String(value) : match;\n });\n }\n\n /**\n * Legacy function equivalent to the old fromContentWithInterpolation.\n * Provides reactive content with interpolation support for backward compatibility.\n *\n * @param className - The component class name\n * @param key - The text key\n * @param interpolationData - Object with values to interpolate\n * @param fallback - Optional fallback text if key is not found\n * @returns Observable that emits interpolated text\n *\n * @deprecated Use getContentWithInterpolation instead\n */\n fromContentWithInterpolation(\n className: string,\n key: string,\n interpolationData?: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return this.getContentWithInterpolation(className, key, interpolationData, fallback);\n }\n\n // Legacy getters/setters for backward compatibility\n get Lang(): LangOption {\n return this.currentLang;\n }\n\n set Lang(lang: LangOption) {\n this.setLang(lang);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { Observable, Subscription, of } from 'rxjs';\nimport { DownloadService } from '../../../services/download.service';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { interpolateStaticContent } from '../../../shared/utils/simple-content';\nimport { ActionType, ButtonContentConfig, ButtonMetadata, ComponentStates } from '../../types';\n\n@Component({\n selector: 'val-button',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSpinner, IonText],\n template: `\n <ion-button\n [type]=\"props.type\"\n [color]=\"props.color\"\n [expand]=\"props.expand\"\n [fill]=\"props.fill\"\n [size]=\"props.size\"\n [href]=\"props.href\"\n [target]=\"props.target\"\n [shape]=\"props.shape\"\n (click)=\"clickHandler()\"\n [disabled]=\"props.state === states.DISABLED\"\n [ngClass]=\"[props.size]\"\n >\n <ion-icon *ngIf=\"props.icon\" [slot]=\"props.icon.slot\" [name]=\"props.icon.name\"></ion-icon>\n <ion-spinner *ngIf=\"props.state === states.WORKING\" name=\"circular\"></ion-spinner>\n <ion-text *ngIf=\"props.state !== states.WORKING\">{{ displayText$ | async }}</ion-text>\n </ion-button>\n `,\n styleUrls: ['./button.component.scss'],\n})\n/**\n * val-button\n *\n * A customizable button supporting icons, loading state, navigation, and reactive content.\n * Supports both static text and reactive content from the content service.\n * Follows the same content pattern as val-text for consistency.\n *\n * @example Static text:\n * <val-button [props]=\"{\n * text: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content:\n * <val-button [props]=\"{\n * contentKey: 'save',\n * contentClass: 'MyComponent',\n * contentFallback: 'Save',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED',\n * icon: { name: 'save', slot: 'start' }\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @example Reactive content with interpolation:\n * <val-button [props]=\"{\n * contentKey: 'saveCount',\n * contentClass: 'MyComponent',\n * contentInterpolation: { count: 5 },\n * contentFallback: 'Save Items',\n * color: 'primary',\n * type: 'button',\n * state: 'ENABLED'\n * }\" (onClick)=\"handler()\"></val-button>\n *\n * @input props: ButtonMetadata - Configuration for the button (text/content, color, icon, state, etc.)\n * @output onClick - Emits when the button is clicked\n */\nexport class ButtonComponent implements OnInit, OnDestroy {\n states = ComponentStates;\n\n /**\n * Observable that provides the text content to display.\n * This will be either static text or reactive content from the language service.\n */\n displayText$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n @Input()\n props!: ButtonMetadata;\n\n /**\n * Event emitted when the button is clicked.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(\n private download: DownloadService,\n icon: IconService,\n private navigation: NavigationService,\n private langService: LangService\n ) {}\n\n ngOnInit() {\n this.setupDisplayText();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n /**\n * Set up the text content observable based on the props configuration.\n * Priority: static text > reactive content with interpolation > reactive content\n * This follows the same pattern as val-text component.\n */\n private setupDisplayText(): void {\n if (this.props.text) {\n // Static text takes precedence\n if (this.props.contentInterpolation) {\n // Static text with interpolation\n const interpolatedText = interpolateStaticContent(this.props.text, this.props.contentInterpolation);\n this.displayText$ = of(interpolatedText);\n } else {\n // Simple static text\n this.displayText$ = of(this.props.text);\n }\n } else if (this.props.contentKey && this.props.contentClass) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayText$ = this.langService.getContentWithInterpolation(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayText$ = this.langService.getContent(\n this.props.contentClass,\n this.props.contentKey,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-button: No valid content configuration provided. Use either \"text\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayText$ = of(this.props.contentFallback || '');\n }\n }\n\n clickHandler() {\n if (this.props.state === this.states.DISABLED) {\n return;\n }\n\n if (this.props.actionType === ActionType.APP_NAVIGATION) {\n this.navigation.navigateByUrl(this.props.link);\n }\n\n if (this.props.download) {\n this.download.downloadLinkFromBrowser(this.props.download);\n }\n\n if (this.props.handler) {\n this.props.handler(this.props.ref);\n }\n\n this.onClick.emit(this.props.token);\n }\n}\n\n/**\n * Helper function to create reactive button props from content configuration.\n * This provides a convenient way to create val-button props with reactive content.\n * Follows the same pattern as createTextProps for consistency.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style and behavior configuration\n * @returns ButtonMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * saveButtonProps: ButtonMetadata = createButtonProps({\n * contentKey: 'save',\n * contentClass: 'MyComponent'\n * }, {\n * color: 'primary',\n * icon: { name: 'save', slot: 'start' }\n * });\n * ```\n */\nexport function createButtonProps(\n contentConfig: ButtonContentConfig,\n styleConfig: Partial<\n Pick<ButtonMetadata, 'color' | 'type' | 'state' | 'size' | 'fill' | 'icon' | 'expand' | 'shape' | 'handler'>\n > = {}\n): ButtonMetadata {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'primary',\n type: styleConfig.type || 'button',\n state: styleConfig.state || ComponentStates.ENABLED,\n size: styleConfig.size,\n fill: styleConfig.fill,\n icon: styleConfig.icon,\n expand: styleConfig.expand,\n shape: styleConfig.shape,\n handler: styleConfig.handler,\n };\n}\n","import { ButtonMetadata, IconMetada } from '../../types';\n\nexport const Icon = (name: string, slot: 'start' | 'end'): IconMetada => {\n return {\n name,\n slot,\n };\n};\n\n/* name convention: COLOR FILL SIZE [optionals: SHAPE EXPAND ICON HREF/DOWNLOAD] TYPE */\n\nexport const BaseDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return {\n color: 'primary',\n state: 'ENABLED',\n text,\n size: 'default',\n type,\n };\n};\n\nexport const ClearDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'clear' };\n};\n\nexport const ClearDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), shape: 'round' };\n};\n\nexport const SolidDefault = (text: string, type: 'button' | 'submit' | 'reset'): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'solid' };\n};\n\nexport const SolidDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), shape: 'round' };\n};\n\nexport const OutlineDefault = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...BaseDefault(text, type), fill: 'outline' };\n};\n\nexport const OutlineDefaultRound = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), shape: 'round' };\n};\n\nexport const ClearDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'full' };\n};\n\nexport const ClearDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefault(text, type), expand: 'block' };\n};\n\nexport const ClearDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...ClearDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'full' };\n};\n\nexport const SolidDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefault(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...SolidDefaultRound(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultRoundFull = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'full' };\n};\n\nexport const OutlineDefaultBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefault(text, type), expand: 'block' };\n};\n\nexport const OutlineDefaultRoundBlock = (\n text: string,\n type: 'button' | 'submit' | 'reset'\n): ButtonMetadata => {\n return { ...OutlineDefaultRound(text, type), expand: 'block' };\n};\n\nexport const SolidDefaultButton = (text: string): ButtonMetadata => {\n return SolidDefault(text, 'button');\n};\n\nexport const SolidSmallButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeButton = (text: string): ButtonMetadata => {\n return { ...SolidDefault(text, 'button'), size: 'large' };\n};\n\nexport const SolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return SolidDefaultRound(text, 'button');\n};\n\nexport const SolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'small' };\n};\n\nexport const SolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRound(text, 'button'), size: 'large' };\n};\n\nexport const SolidFullButton = (text: string): ButtonMetadata => {\n return SolidDefaultFull(text, 'button');\n};\n\nexport const SolidBlockButton = (text: string): ButtonMetadata => {\n return SolidDefaultBlock(text, 'button');\n};\n\n/** PRIMARY */\n\nexport const PrimarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), icon };\n};\n\nexport const PrimarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const PrimarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), icon };\n};\n\nexport const PrimarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundButton(text), href, target };\n};\n\nexport const PrimarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), icon };\n};\n\nexport const PrimarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundButton(text), href, target };\n};\n\nexport const PrimarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), icon };\n};\n\nexport const PrimarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockButton(text), href, target };\n};\n\nexport const PrimarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidBlockIconButton(text, icon), href, target };\n};\n\nexport const PrimarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'primary' };\n};\n\nexport const PrimarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), icon };\n};\n\nexport const PrimarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullButton(text), href, target };\n};\n\nexport const PrimarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...PrimarySolidFullIconButton(text, icon), href, target };\n};\n\n/** SECONDARY */\n\nexport const SecondarySolidDefaultRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidDefaultRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidDefaultRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), icon };\n};\n\nexport const SecondarySolidDefaultRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundButton(text), href, target };\n};\n\nexport const SecondarySolidDefaultRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidDefaultRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidSmallRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidSmallRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidSmallRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), icon };\n};\n\nexport const SecondarySolidSmallRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundButton(text), href, target };\n};\n\nexport const SecondarySolidSmallRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidSmallRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidLargeRoundButton = (text: string): ButtonMetadata => {\n return { ...SolidLargeRoundButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidLargeRoundIconButton = (\n text: string,\n icon: IconMetada\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), icon };\n};\n\nexport const SecondarySolidLargeRoundHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundButton(text), href, target };\n};\n\nexport const SecondarySolidLargeRoundIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidLargeRoundIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidFullButton = (text: string): ButtonMetadata => {\n return { ...SolidFullButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidFullIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), icon };\n};\n\nexport const SecondarySolidFullHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullButton(text), href, target };\n};\n\nexport const SecondarySolidFullIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidFullIconButton(text, icon), href, target };\n};\n\nexport const SecondarySolidBlockButton = (text: string): ButtonMetadata => {\n return { ...SolidBlockButton(text), color: 'secondary' };\n};\n\nexport const SecondarySolidBlockIconButton = (text: string, icon: IconMetada): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), icon };\n};\n\nexport const SecondarySolidBlockHrefButton = (\n text: string,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockButton(text), href, target };\n};\n\nexport const SecondarySolidBlockIconHrefButton = (\n text: string,\n icon: IconMetada,\n href: string,\n target: '_blank' | '_self' | '_parent' | '_top'\n): ButtonMetadata => {\n return { ...SecondarySolidBlockIconButton(text, icon), href, target };\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { DisplayContentConfig, DisplayMetadata } from './types';\n\n@Component({\n selector: 'val-display',\n standalone: true,\n imports: [CommonModule, IonText],\n template: `\n <ion-text [color]=\"props.color\">\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </ion-text>\n `,\n styleUrls: ['./display.component.scss'],\n})\n/**\n * val-display\n *\n * Displays prominent text or titles with custom color and size.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Static content\n * <val-display [props]=\"{ content: 'Title', color: 'dark', size: 'large' }\"></val-display>\n *\n * // Reactive content\n * <val-display [props]=\"{ contentConfig: { key: 'welcome.title' }, color: 'primary', size: 'xlarge' }\"></val-display>\n *\n * @input props: DisplayMetadata - Configuration for the display (content/contentConfig, color, size)\n */\nexport class DisplayComponent implements OnInit, OnChanges, OnDestroy {\n displayContent$: Observable<string>;\n private subscriptions = new Subscription();\n\n /**\n * Display configuration object.\n * @type {DisplayMetadata}\n * @property content - Static text to display (takes precedence over contentConfig).\n * @property contentConfig - Reactive content configuration.\n * @property color - The text color (Ionic color string).\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: DisplayMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n constructor() {}\n\n ngOnInit() {\n this.initializeDisplayContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.initializeDisplayContent();\n this.cdr.detectChanges();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeDisplayContent() {\n // Static content takes precedence\n if (this.props.content !== undefined) {\n this.displayContent$ = of(this.props.content);\n return;\n }\n\n // Use reactive content if configured\n if (this.props.contentConfig) {\n this.displayContent$ = this.langService.getContent(\n this.props.contentConfig.className || '_global',\n this.props.contentConfig.key,\n this.props.contentConfig.fallback || this.props.contentConfig.key\n // interpolation: this.props.contentConfig.interpolation,\n );\n return;\n }\n\n // No content configured - use empty string\n this.displayContent$ = of('');\n }\n}\n\n/**\n * Helper function to create reactive display props from content configuration.\n * This provides a convenient way to create val-display props with reactive content.\n *\n * @param contentConfig - Content configuration for reactive content\n * @param styleConfig - Optional style configuration (color and size)\n * @returns DisplayMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: DisplayMetadata = createDisplayProps({\n * key: 'title',\n * className: 'HeaderComponent',\n * fallback: 'Default Title'\n * }, {\n * color: 'primary',\n * size: 'large'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // With interpolation\n * greetingProps: DisplayMetadata = createDisplayProps({\n * key: 'greeting',\n * className: 'UserComponent',\n * fallback: 'Hello!',\n * interpolation: { name: 'John', count: 5 }\n * }, {\n * color: 'secondary',\n * size: 'medium'\n * });\n * ```\n *\n * @example\n * ```typescript\n * // Using default style values\n * simpleProps: DisplayMetadata = createDisplayProps({\n * key: 'welcomeMessage',\n * className: 'HomeComponent'\n * }); // Will use default color: 'dark' and size: 'medium'\n * ```\n */\nexport function createDisplayProps(\n contentConfig: DisplayContentConfig,\n styleConfig: Partial<Pick<DisplayMetadata, 'color' | 'size'>> = {}\n): DisplayMetadata {\n return {\n contentConfig: {\n key: contentConfig.key,\n className: contentConfig.className,\n fallback: contentConfig.fallback,\n interpolation: contentConfig.interpolation,\n },\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { DividerMetadata } from './types';\n\n/**\n * val-divider\n *\n * A horizontal divider for separating content sections.\n *\n * @example\n * <val-divider [props]=\"{ size: 'medium', color: 'light', fill: 'solid' }\"></val-divider>\n *\n * @input props: DividerMetadata - Configuration for the divider (size, color, fill)\n */\n@Component({\n selector: 'val-divider',\n standalone: true,\n imports: [CommonModule],\n template: ` <div [ngClass]=\"['divider', props.size, props.color, props.fill]\"></div> `,\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent implements OnInit {\n /**\n * Divider configuration object.\n * @type {DividerMetadata}\n * @property size - The divider size ('small' | 'medium' | 'large').\n * @property color - The divider color.\n * @property fill - The divider fill style ('solid' | 'gradient').\n */\n @Input()\n props: DividerMetadata;\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { DownloadService } from '../../../services/download.service';\nimport { HrefMetadata } from './types';\n\n@Component({\n selector: 'val-href',\n standalone: true,\n imports: [CommonModule],\n template: `\n <a\n [ngClass]=\"[props.color]\"\n [class.hoverable]=\"props.hoverable\"\n [href]=\"props.url\"\n target=\"_blank\"\n (click)=\"onClickHandler($event)\"\n >{{ props.text }}</a\n >\n `,\n styleUrls: ['./href.component.scss'],\n})\n/**\n * val-href\n *\n * A styled anchor/link element, supporting download and click events.\n *\n * @example\n * <val-href [props]=\"{ url: 'https://...', text: 'Open', color: 'primary', download: true }\" (onClick)=\"handler()\"></val-href>\n *\n * @input props: HrefMetadata - Configuration for the link (url, text, color, download, etc.)\n * @output onClick - Emits when the link is clicked\n */\nexport class HrefComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {HrefMetadata}\n * @property url - The URL to open.\n * @property text - The link text.\n * @property color - The link color (Ionic color string).\n * @property download - Whether to trigger a download (optional).\n * @property hoverable - Whether the link is hoverable (optional).\n * @property token - Optional token for event identification.\n */\n @Input() props: HrefMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private downloadService: DownloadService) {}\n\n ngOnInit() {}\n\n getFileName() {\n return this.downloadService.getFileNameFromUrl(this.props.url);\n }\n\n onClickHandler(event: MouseEvent) {\n if (this.props.download && this.props.url) {\n event.preventDefault();\n this.downloadService.downloadLinkFromBrowser(this.props.url);\n }\n this.onClick.emit(this.props.token);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { IconMetadata } from './types';\n\n@Component({\n selector: 'val-icon',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: ` <ion-icon aria-hidden=\"true\" [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\" /> `,\n styleUrls: ['./icon.component.scss'],\n})\n/**\n * val-icon\n *\n * Displays an icon from the Ionicons set, with configurable size and color.\n *\n * @example\n * <val-icon [props]=\"{ name: 'star', size: 'large', color: 'warning' }\"></val-icon>\n *\n * @input props: IconMetadata - Configuration for the icon (name, color, size)\n */\nexport class IconComponent implements OnInit {\n /**\n * Icon configuration object.\n * @type {IconMetadata}\n * @property name - The icon name (Ionicons).\n * @property color - The icon color (Ionic color string).\n * @property size - The icon size ('small' | 'medium' | 'large' | 'xlarge').\n */\n @Input()\n props: IconMetadata;\n\n constructor(service: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject, Input, OnInit } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonModal,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { ImageMetadata } from './types';\n\n@Component({\n selector: 'val-image',\n standalone: true,\n imports: [CommonModule, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonIcon, IonButtons],\n template: `\n <figure\n class=\"val-image-container\"\n [class]=\"props.containerClass\"\n [ngClass]=\"{\n 'val-image-container--left': props.alignment === 'left',\n 'val-image-container--center': props.alignment === 'center' || !props.alignment,\n 'val-image-container--right': props.alignment === 'right',\n }\"\n [ngStyle]=\"{\n display: props.flex ? 'flex' : 'inline-block',\n }\"\n >\n <div class=\"val-image-wrapper\">\n @if (props.src.includes('--')) {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [ngStyle]=\"{\n content: 'var(' + props.src + ')',\n }\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n } @else {\n <img\n class=\"val-image\"\n [ngClass]=\"[\n props.mode,\n !props.width ? props.size : '',\n props.previewMode ? 'val-image--preview-enabled' : '',\n ]\"\n [class.bordered]=\"props.bordered\"\n [class.shaded]=\"props.shaded\"\n [class.dark]=\"props.dark\"\n [class.limited]=\"props.limited\"\n [class.center]=\"props.alignment === 'center'\"\n [src]=\"props.src\"\n [alt]=\"props.alt\"\n [style.width.rem]=\"props.width\"\n [style.max-width.rem]=\"props.width\"\n [style.height.px]=\"props.height\"\n (click)=\"props.previewMode ? openPreview() : null\"\n />\n }\n </div>\n\n @if (props.caption) {\n <figcaption\n class=\"val-image-caption\"\n [ngClass]=\"{\n 'val-image-caption--small': props.captionSize === 'small',\n 'val-image-caption--medium': props.captionSize === 'medium' || !props.captionSize,\n 'val-image-caption--large': props.captionSize === 'large',\n }\"\n >\n {{ props.caption }}\n </figcaption>\n }\n </figure>\n\n <!-- Modal de previsualización con ion-modal -->\n <ion-modal [isOpen]=\"isPreviewOpen\" (didDismiss)=\"closePreview()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <!-- <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title> -->\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"closePreview()\" fill=\"clear\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content>\n <!-- Controles de zoom -->\n <div class=\"val-image-preview-controls\">\n <ion-button\n (click)=\"zoomOut(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel <= minZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"remove-outline\"></ion-icon>\n </ion-button>\n\n <span class=\"val-image-preview-zoom-level\">{{ Math.round(zoomLevel * 100) }}%</span>\n\n <ion-button\n (click)=\"zoomIn(); $event.stopPropagation()\"\n [disabled]=\"zoomLevel >= maxZoom\"\n fill=\"clear\"\n size=\"small\"\n >\n <ion-icon name=\"add-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <!-- Imagen ampliada -->\n <div\n class=\"val-image-preview-viewport\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n (wheel)=\"onWheel($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event)\"\n >\n <img\n #previewImage\n class=\"val-image-preview-img\"\n [src]=\"props.src.includes('--') ? null : props.src\"\n [ngStyle]=\"{\n content: props.src.includes('--') ? 'var(' + props.src + ')' : null,\n transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',\n cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',\n }\"\n [alt]=\"props.alt\"\n draggable=\"false\"\n />\n </div>\n </ion-content>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./image.component.scss'],\n})\n/**\n * val-image\n *\n * Displays an image with various display options (bordered, shaded, dark, etc).\n * Now includes a container wrapper for better flexbox support and alignment options.\n *\n * NEW: Optional preview mode with full-screen zoom capabilities:\n * - Click to open full-screen preview (when previewMode is enabled)\n * - Pinch-to-zoom on mobile devices\n * - Mouse wheel zoom on desktop\n * - Pan/drag to navigate zoomed images\n * - Zoom controls with buttons\n * - Keyboard shortcuts (Esc to close, +/- to zoom, 0 to reset)\n * - Touch-friendly interface with gesture support\n *\n * @example Basic usage:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * width: 100,\n * height: 100,\n * bordered: true,\n * alignment: 'center',\n * caption: 'Image description'\n * }\"></val-image>\n *\n * @example With preview mode:\n * <val-image [props]=\"{\n * src: 'url',\n * alt: 'desc',\n * previewMode: true,\n * bordered: true,\n * alignment: 'center'\n * }\"></val-image>\n *\n * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, previewMode, etc.)\n */\nexport class ImageComponent implements OnInit {\n @Input()\n props!: ImageMetadata;\n\n available: boolean = true;\n\n // Preview mode properties\n isPreviewOpen: boolean = false;\n zoomLevel: number = 1;\n minZoom: number = 0.5;\n maxZoom: number = 5;\n panX: number = 0;\n panY: number = 0;\n\n // Touch and mouse interaction properties\n isDragging: boolean = false;\n lastPanX: number = 0;\n lastPanY: number = 0;\n startX: number = 0;\n startY: number = 0;\n\n // Touch gesture properties\n initialDistance: number = 0;\n initialZoom: number = 1;\n touches: Touch[] = [];\n\n // Lang service\n langService = inject(LangService);\n\n // Math for template\n Math = Math;\n\n constructor() {}\n\n ngOnInit() {\n // Set default values\n if (!this.props.alignment) {\n this.props.alignment = 'center';\n }\n if (!this.props.captionSize) {\n this.props.captionSize = 'medium';\n }\n if (!this.props.mode) {\n this.props.mode = 'box';\n }\n }\n\n changeToVisible() {\n setInterval(() => {\n this.available = true;\n }, 100);\n }\n\n // Preview mode methods\n openPreview() {\n if (!this.props.previewMode) return;\n this.isPreviewOpen = true;\n this.resetZoom();\n }\n\n closePreview() {\n this.isPreviewOpen = false;\n }\n\n // Zoom methods\n zoomIn() {\n if (this.zoomLevel < this.maxZoom) {\n this.zoomLevel = Math.min(this.zoomLevel * 1.2, this.maxZoom);\n }\n }\n\n zoomOut() {\n if (this.zoomLevel > this.minZoom) {\n this.zoomLevel = Math.max(this.zoomLevel / 1.2, this.minZoom);\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n resetZoom() {\n this.zoomLevel = 1;\n this.panX = 0;\n this.panY = 0;\n }\n\n // Mouse events\n onMouseDown(event: MouseEvent) {\n if (this.zoomLevel <= 1) return;\n\n this.isDragging = true;\n this.startX = event.clientX - this.panX;\n this.startY = event.clientY - this.panY;\n event.preventDefault();\n }\n\n onMouseMove(event: MouseEvent) {\n if (!this.isDragging || this.zoomLevel <= 1) return;\n\n this.panX = event.clientX - this.startX;\n this.panY = event.clientY - this.startY;\n event.preventDefault();\n }\n\n onMouseUp(event: MouseEvent) {\n this.isDragging = false;\n }\n\n // Touch events for mobile\n onTouchStart(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1) {\n // Single touch - start dragging\n if (this.zoomLevel > 1) {\n this.isDragging = true;\n this.startX = this.touches[0].clientX - this.panX;\n this.startY = this.touches[0].clientY - this.panY;\n }\n } else if (this.touches.length === 2) {\n // Two touches - start pinch zoom\n this.isDragging = false;\n this.initialDistance = this.getDistance(this.touches[0], this.touches[1]);\n this.initialZoom = this.zoomLevel;\n }\n }\n\n onTouchMove(event: TouchEvent) {\n event.preventDefault();\n this.touches = Array.from(event.touches);\n\n if (this.touches.length === 1 && this.isDragging && this.zoomLevel > 1) {\n // Single touch - drag\n this.panX = this.touches[0].clientX - this.startX;\n this.panY = this.touches[0].clientY - this.startY;\n } else if (this.touches.length === 2) {\n // Two touches - pinch zoom\n const currentDistance = this.getDistance(this.touches[0], this.touches[1]);\n const scale = currentDistance / this.initialDistance;\n this.zoomLevel = Math.min(Math.max(this.initialZoom * scale, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n }\n\n onTouchEnd(event: TouchEvent) {\n this.isDragging = false;\n this.touches = Array.from(event.touches);\n }\n\n // Mouse wheel zoom\n onWheel(event: WheelEvent) {\n event.preventDefault();\n\n const delta = event.deltaY > 0 ? -1 : 1;\n const zoomFactor = 1 + delta * 0.1;\n\n this.zoomLevel = Math.min(Math.max(this.zoomLevel * zoomFactor, this.minZoom), this.maxZoom);\n\n // Reset pan if zoomed out to 1x or less\n if (this.zoomLevel <= 1) {\n this.panX = 0;\n this.panY = 0;\n }\n }\n\n // Helper methods\n private getDistance(touch1: Touch, touch2: Touch): number {\n const dx = touch1.clientX - touch2.clientX;\n const dy = touch1.clientY - touch2.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n // Keyboard shortcuts\n @HostListener('document:keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.isPreviewOpen) return;\n\n switch (event.key) {\n case 'Escape':\n this.closePreview();\n break;\n case '+':\n case '=':\n event.preventDefault();\n this.zoomIn();\n break;\n case '-':\n event.preventDefault();\n this.zoomOut();\n break;\n case '0':\n event.preventDefault();\n this.resetZoom();\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonProgressBar } from '@ionic/angular/standalone';\nimport { ProgressBarMetadata } from './types';\n\n@Component({\n selector: 'val-progress-bar',\n standalone: true,\n imports: [CommonModule, IonProgressBar],\n template: `\n <ion-progress-bar\n [ngClass]=\"[props.size]\"\n [class.rounded]=\"props.rounded\"\n [value]=\"props.progress\"\n [color]=\"props.color\"\n [buffer]=\"props.buffer\"\n [type]=\"props.type\"\n ></ion-progress-bar>\n `,\n styleUrls: ['./progress-bar.component.scss'],\n})\n/**\n * val-progress-bar\n *\n * A progress bar for indicating completion or loading state.\n *\n * @example\n * <val-progress-bar [props]=\"{ progress: 0.5, color: 'success', size: 'small' }\"></val-progress-bar>\n *\n * @input props: ProgressBarMetadata - Configuration for the progress bar (progress, color, size, etc.)\n */\nexport class ProgressBarComponent implements OnInit {\n /**\n * Progress bar configuration object.\n * @type {ProgressBarMetadata}\n * @property progress - The progress value (0 to 1).\n * @property size - The progress bar size ('small' | 'medium' | 'large' | 'xlarge').\n * @property color - The progress bar color (Ionic color string).\n * @property buffer - The buffer value for the bar.\n * @property type - The type of progress bar ('determinate' | 'indeterminate').\n * @property rounded - Whether the bar has rounded corners.\n */\n @Input()\n props: ProgressBarMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface LinkProcessorConfig {\n /** Whether to open external links in new tab (default: true) */\n openExternalInNewTab?: boolean;\n /** Whether to open internal links in new tab (default: false) */\n openInternalInNewTab?: boolean;\n /** Custom CSS classes for links */\n linkClass?: string;\n /** Custom CSS classes for external links */\n externalLinkClass?: string;\n /** Custom CSS classes for internal links */\n internalLinkClass?: string;\n /** Whether to process Markdown-style links [text](url) (default: true) */\n processMarkdownLinks?: boolean;\n}\n\n/**\n * LinkProcessorService - Service for processing text content to convert URLs and internal routes into clickable links.\n *\n * This service automatically detects external URLs (http/https), internal routes (starting with /),\n * and Markdown-style links [text](url) and converts them into HTML anchor elements with appropriate attributes.\n *\n * @example Basic usage:\n * ```typescript\n * constructor(private linkProcessor: LinkProcessorService) {}\n *\n * processText() {\n * const text = 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)';\n * const processed = this.linkProcessor.processLinks(text);\n * // Returns SafeHtml with clickable links\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class LinkProcessorService {\n // Regex para detectar URLs completas (http/https) - captura toda la URL y luego limpiamos puntuación\n private readonly urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n\n // Regex para detectar rutas internas - captura toda la ruta y luego limpiamos puntuación\n private readonly internalRouteRegex = /(\\s|^)(\\/[^\\s]*)/g;\n\n // Regex para detectar enlaces estilo Markdown [texto](url)\n private readonly markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n\n constructor(private sanitizer: DomSanitizer) {}\n\n /**\n * Limpia la puntuación del final de una URL.\n * Mantiene caracteres válidos de URL pero remueve signos de puntuación comunes al final.\n * Preserva parámetros de consulta, fragmentos y caracteres válidos en URLs.\n */\n private cleanUrlPunctuation(url: string): string {\n // Caracteres que consideramos puntuación al final de oración, pero NO parte de URLs\n // No incluimos & o = que son parte de query params, ni # que es parte de fragmentos\n const trailingPunctuation = /[.,;!?)]+$/;\n\n // Casos especiales: si la URL termina con paréntesis pero no tiene paréntesis de apertura\n // probablemente el paréntesis no es parte de la URL\n const hasOpeningParen = url.includes('(');\n const endsWithClosingParen = url.endsWith(')');\n\n if (endsWithClosingParen && !hasOpeningParen) {\n // Remover el paréntesis de cierre si no hay uno de apertura\n url = url.replace(/\\)$/, '');\n }\n\n return url.replace(trailingPunctuation, '');\n }\n\n /**\n * Procesa texto para convertir enlaces en elementos <a> clickeables.\n * Detecta automáticamente URLs externas, rutas internas y enlaces estilo Markdown.\n *\n * @param text - Texto a procesar\n * @param config - Configuración del procesamiento\n * @returns SafeHtml con enlaces procesados o string original\n *\n * @example\n * ```typescript\n * const result = this.linkProcessor.processLinks(\n * 'Visit https://example.com, go to /profile, or [check docs](https://docs.example.com)',\n * {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * processMarkdownLinks: true,\n * linkClass: 'custom-link'\n * }\n * );\n * ```\n */\n processLinks(text: string, config: LinkProcessorConfig = {}): SafeHtml | string {\n if (!text) return '';\n\n const {\n openExternalInNewTab = true,\n openInternalInNewTab = false,\n linkClass = 'processed-link',\n externalLinkClass = 'external-link',\n internalLinkClass = 'internal-link',\n processMarkdownLinks = true,\n } = config;\n\n let hasLinks = false;\n let processedText = text;\n\n // 1. Procesar enlaces estilo Markdown [texto](url) primero\n if (processMarkdownLinks) {\n const markdownMatches = Array.from(processedText.matchAll(this.markdownLinkRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = markdownMatches.length - 1; i >= 0; i--) {\n const match = markdownMatches[i];\n const [fullMatch, linkText, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n hasLinks = true;\n const isExternal = /^https?:\\/\\//.test(url);\n const target = (isExternal ? openExternalInNewTab : openInternalInNewTab)\n ? isExternal\n ? ' target=\"_blank\" rel=\"noopener noreferrer\"'\n : ' target=\"_blank\"'\n : '';\n const typeClass = isExternal ? externalLinkClass : internalLinkClass;\n const classes = `${linkClass} ${typeClass}`.trim();\n const linkHtml = `<a href=\"${url}\"${target} class=\"${classes}\">${linkText}</a>`;\n\n processedText =\n processedText.substring(0, startIndex) + linkHtml + processedText.substring(endIndex);\n }\n }\n\n // 2. Procesar URLs externas directas\n const urlMatches = Array.from(processedText.matchAll(this.urlRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = urlMatches.length - 1; i >= 0; i--) {\n const match = urlMatches[i];\n const [fullMatch, url] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n // Limpiar puntuación del final de la URL\n const cleanUrl = this.cleanUrlPunctuation(url);\n const punctuationRemoved = url !== cleanUrl;\n const punctuation = punctuationRemoved ? url.substring(cleanUrl.length) : '';\n\n hasLinks = true;\n const target = openExternalInNewTab ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : '';\n const classes = `${linkClass} ${externalLinkClass}`.trim();\n const linkHtml = `<a href=\"${cleanUrl}\"${target} class=\"${classes}\">${cleanUrl}</a>`;\n\n // Reemplazar el URL original con el enlace + puntuación si existía\n const replacement = punctuationRemoved ? linkHtml + punctuation : linkHtml;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // 3. Procesar rutas internas\n const internalMatches = Array.from(processedText.matchAll(this.internalRouteRegex));\n\n // Procesar de atrás hacia adelante para mantener las posiciones\n for (let i = internalMatches.length - 1; i >= 0; i--) {\n const match = internalMatches[i];\n const [fullMatch, prefix, route] = match;\n const startIndex = match.index!;\n const endIndex = startIndex + fullMatch.length;\n\n // Verificar que no esté ya dentro de un enlace HTML existente\n const textBefore = processedText.substring(0, startIndex);\n const lastOpenTag = textBefore.lastIndexOf('<a ');\n const lastCloseTag = textBefore.lastIndexOf('</a>');\n\n // Si hay un tag <a abierto sin cerrar, no procesamos\n if (lastOpenTag > lastCloseTag) {\n continue;\n }\n\n hasLinks = true;\n const target = openInternalInNewTab ? ' target=\"_blank\"' : '';\n const classes = `${linkClass} ${internalLinkClass}`.trim();\n const linkHtml = `<a href=\"${route}\"${target} class=\"${classes}\">${route}</a>`;\n\n const replacement = `${prefix}${linkHtml}`;\n processedText =\n processedText.substring(0, startIndex) + replacement + processedText.substring(endIndex);\n }\n\n // Si hay enlaces, sanitizar el HTML\n if (hasLinks) {\n return this.sanitizer.bypassSecurityTrustHtml(processedText);\n }\n\n return text;\n }\n\n /**\n * Detecta si un texto contiene enlaces (URLs, rutas internas o enlaces Markdown).\n *\n * @param text - Texto a analizar\n * @returns true si contiene enlaces\n *\n * @example\n * ```typescript\n * const hasLinks = this.linkProcessor.hasLinks('Visit https://example.com or [docs](https://docs.com)');\n * // Returns: true\n * ```\n */\n hasLinks(text: string): boolean {\n if (!text) return false;\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n return (\n this.urlRegex.test(text) ||\n this.internalRouteRegex.test(text) ||\n this.markdownLinkRegex.test(text)\n );\n }\n\n /**\n * Extrae todos los enlaces de un texto.\n *\n * @param text - Texto a analizar\n * @returns Array de enlaces encontrados con su tipo y texto (si es Markdown)\n *\n * @example\n * ```typescript\n * const links = this.linkProcessor.extractLinks('Visit https://example.com, /profile, or [docs](https://docs.com)');\n * // Returns: [\n * // { url: 'https://example.com', type: 'external', text: 'https://example.com' },\n * // { url: '/profile', type: 'internal', text: '/profile' },\n * // { url: 'https://docs.com', type: 'external', text: 'docs' }\n * // ]\n * ```\n */\n extractLinks(text: string): Array<{ url: string; type: 'external' | 'internal'; text: string }> {\n if (!text) return [];\n\n const links: Array<{ url: string; type: 'external' | 'internal'; text: string }> = [];\n\n // Reset regex indices\n this.urlRegex.lastIndex = 0;\n this.internalRouteRegex.lastIndex = 0;\n this.markdownLinkRegex.lastIndex = 0;\n\n // Extraer enlaces Markdown primero\n let match;\n while ((match = this.markdownLinkRegex.exec(text)) !== null) {\n const url = match[2];\n const linkText = match[1];\n const type = /^https?:\\/\\//.test(url) ? 'external' : 'internal';\n links.push({ url, type, text: linkText });\n }\n\n // Extraer URLs externas directas\n while ((match = this.urlRegex.exec(text)) !== null) {\n const url = match[1];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'external', text: url });\n }\n }\n\n // Extraer rutas internas directas\n while ((match = this.internalRouteRegex.exec(text)) !== null) {\n const url = match[2];\n // Verificar que no esté ya capturado como Markdown link\n if (!links.some(link => link.url === url)) {\n links.push({ url, type: 'internal', text: url });\n }\n }\n\n return links;\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LinkProcessorConfig, LinkProcessorService } from '../../services/link-processor.service';\n\n/**\n * ProcessLinksPipe - Pipe para procesar texto y convertir URLs en enlaces clickeables.\n *\n * Este pipe standalone detecta automáticamente URLs externas (http/https) y rutas internas\n * (que empiezan con /) y las convierte en elementos HTML anchor con los atributos apropiados.\n *\n * @example Uso básico:\n * ```html\n * <div [innerHTML]=\"'Visit https://example.com or go to /profile' | processLinks\"></div>\n * ```\n *\n * @example Con configuración personalizada:\n * ```html\n * <div [innerHTML]=\"text | processLinks:linkConfig\"></div>\n * ```\n *\n * @example En TypeScript:\n * ```typescript\n * export class MyComponent {\n * linkConfig: LinkProcessorConfig = {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'my-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * };\n * }\n * ```\n */\n@Pipe({\n name: 'processLinks',\n standalone: true,\n})\nexport class ProcessLinksPipe implements PipeTransform {\n private linkProcessor = inject(LinkProcessorService);\n\n /**\n * Transforma texto procesando URLs y rutas internas para convertirlas en enlaces.\n *\n * @param value - El texto a procesar\n * @param config - Configuración opcional para el procesamiento de enlaces\n * @returns SafeHtml con enlaces procesados o string original si no hay enlaces\n *\n * @example\n * ```html\n * <!-- Uso básico -->\n * <p [innerHTML]=\"'Check out https://angular.io' | processLinks\"></p>\n *\n * <!-- Con configuración -->\n * <p [innerHTML]=\"message | processLinks:{ openExternalInNewTab: false }\"></p>\n * ```\n */\n transform(value: string, config?: LinkProcessorConfig): SafeHtml | string {\n if (!value) {\n return '';\n }\n\n return this.linkProcessor.processLinks(value, config);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of, Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LinkProcessorService } from '../../../services/link-processor.service';\nimport { ProcessLinksPipe } from '../../../shared/pipes/process-links.pipe';\nimport { interpolateStaticContent, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TextContentConfig, TextMetadata } from './types';\n\n@Component({\n selector: 'val-text',\n standalone: true,\n imports: [IonText, AsyncPipe, ProcessLinksPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (props.processLinks) {\n <p\n [class]=\"props.size\"\n [class.bold]=\"props.bold\"\n [innerHTML]=\"displayContent$ | async | processLinks: props.linkConfig\"\n ></p>\n } @else if (\n (props.allowPartialBold && (displayContent$ | async)?.includes('<b>')) ||\n (displayContent$ | async)?.includes('<strong>')\n ) {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\" [innerHTML]=\"processPartialBold(displayContent$ | async)\"></p>\n } @else {\n <p [class]=\"props.size\" [class.bold]=\"props.bold\">{{ displayContent$ | async }}</p>\n }\n </ion-text>\n `,\n styleUrls: ['./text.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-text\n *\n * Enhanced text component that supports both static content and reactive content from the language service.\n * The component automatically updates when the language changes if using reactive content.\n *\n * @example Static content:\n * ```html\n * <val-text [props]=\"{\n * content: 'Static text',\n * color: 'primary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeMessage',\n * contentClass: 'HomeComponent',\n * contentFallback: 'Welcome!',\n * color: 'primary',\n * size: 'large',\n * bold: true\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: 'John', count: 5 },\n * color: 'secondary',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example With automatic link processing:\n * ```html\n * <val-text [props]=\"{\n * content: 'Visit https://example.com or go to /profile for more info',\n * processLinks: true,\n * linkConfig: {\n * openExternalInNewTab: true,\n * openInternalInNewTab: false,\n * linkClass: 'custom-link',\n * externalLinkClass: 'external',\n * internalLinkClass: 'internal'\n * },\n * color: 'primary',\n * size: 'medium'\n * }\"></val-text>\n * ```\n *\n * @example With partial bold support:\n * ```html\n * <val-text [props]=\"{\n * content: 'Hola <b>Victor</b>, cómo estás? También puedes usar <strong>strong</strong>',\n * allowPartialBold: true,\n * color: 'dark',\n * size: 'medium',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Reactive content with partial bold:\n * ```html\n * <val-text [props]=\"{\n * contentKey: 'welcomeWithName',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' },\n * allowPartialBold: true,\n * color: 'primary',\n * size: 'large',\n * bold: false\n * }\"></val-text>\n * ```\n *\n * @example Using ContentService helper:\n * ```typescript\n * // In component\n * content = inject(ContentService);\n * componentContent = this.content.forComponent('MyComponent');\n *\n * textProps = {\n * content: this.componentContent.getText('title'), // sync\n * color: 'primary',\n * size: 'large',\n * bold: true\n * };\n * // Or with reactive binding:\n * title$ = this.componentContent.get('title');\n * ```\n *\n * @input props: TextMetadata - Configuration for the text (content, styling, and reactive content options)\n */\nexport class TextComponent implements OnInit, OnDestroy {\n /**\n * Text configuration object.\n * @type {TextMetadata}\n *\n * For static content:\n * @property content - The text to display (takes precedence over reactive content)\n *\n * For reactive content:\n * @property contentKey - The content key to retrieve from language service\n * @property contentClass - The component class name for content lookup\n * @property contentFallback - Optional fallback text if content is not found\n * @property contentInterpolation - Optional values to interpolate into content\n *\n * For styling:\n * @property color - The text color (Ionic color string)\n * @property size - The text size ('small' | 'medium' | 'large' | 'xlarge')\n * @property bold - Whether the text is bold\n * @property processLinks - Whether to automatically process and convert links in text (default: false)\n * @property linkConfig - Configuration for link processing (colors, target behavior, etc.)\n * @property allowPartialBold - Whether to allow partial bold using <b> or <strong> tags (default: false)\n */\n @Input()\n props: TextMetadata;\n\n /**\n * Observable that provides the content to display.\n * This will be either static content or reactive content from the language service.\n */\n displayContent$: Observable<string>;\n\n private subscription = new Subscription();\n\n constructor(\n private langService: LangService,\n private linkProcessor: LinkProcessorService\n ) {}\n\n ngOnInit() {\n this.setupDisplayContent();\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Set up the content observable based on the props configuration.\n * Priority: static content > reactive content with interpolation > reactive content\n */\n private setupDisplayContent(): void {\n if (this.props.content) {\n // Static content takes precedence\n if (this.props.contentInterpolation) {\n // Static content with interpolation\n const interpolatedContent = interpolateStaticContent(this.props.content, this.props.contentInterpolation);\n this.displayContent$ = of(interpolatedContent);\n } else {\n // Simple static content\n this.displayContent$ = of(this.props.content);\n }\n } else if (shouldUseReactiveContent(this.props)) {\n // Reactive content from language service\n if (this.props.contentInterpolation) {\n // With interpolation\n this.displayContent$ = this.langService.getContentWithInterpolation(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentInterpolation,\n this.props.contentFallback\n );\n } else {\n // Simple reactive content\n this.displayContent$ = this.langService.getContent(\n this.props.contentClass!,\n this.props.contentKey!,\n this.props.contentFallback\n );\n }\n } else {\n // Fallback to empty string if no valid content configuration\n console.warn(\n 'val-text: No valid content configuration provided. Use either \"content\" for static text or \"contentKey\" + \"contentClass\" for reactive content.'\n );\n this.displayContent$ = of(this.props.contentFallback || '');\n }\n }\n\n /**\n * Process partial bold tags in the content.\n * Converts <b> and <strong> tags to properly styled bold spans.\n *\n * @param content - The content string to process\n * @returns Processed content with bold styling\n */\n processPartialBold(content: string | null): string {\n if (!content) return '';\n\n // Process <b> tags\n let processedContent = content.replace(/<b>(.*?)<\\/b>/gi, '<span class=\"partial-bold\">$1</span>');\n\n // Process <strong> tags\n processedContent = processedContent.replace(/<strong>(.*?)<\\/strong>/gi, '<span class=\"partial-bold\">$1</span>');\n\n return processedContent;\n }\n}\n\n/**\n * Helper function to create reactive text props from content configuration.\n * This provides a convenient way to create val-text props with reactive content.\n *\n * @param contentConfig - Content configuration\n * @param styleConfig - Optional style configuration\n * @returns Partial TextMetadata with content properties set\n *\n * @example\n * ```typescript\n * // In component\n * titleProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'title',\n * contentClass: 'HeaderComponent'\n * }, {\n * color: 'primary',\n * size: 'large',\n * bold: true\n * })\n * };\n * ```\n *\n * @example With partial bold support:\n * ```typescript\n * // In component\n * greetingProps: TextMetadata = {\n * ...createTextProps({\n * contentKey: 'greeting',\n * contentClass: 'UserComponent',\n * contentInterpolation: { name: '<b>Juan</b>' }\n * }, {\n * color: 'primary',\n * size: 'medium',\n * bold: false,\n * allowPartialBold: true\n * })\n * };\n * ```\n */\nexport function createTextProps(\n contentConfig: TextContentConfig,\n styleConfig: Partial<Pick<TextMetadata, 'color' | 'size' | 'bold' | 'allowPartialBold'>> = {}\n): Partial<TextMetadata> {\n return {\n contentKey: contentConfig.contentKey,\n contentClass: contentConfig.contentClass,\n contentFallback: contentConfig.contentFallback,\n contentInterpolation: contentConfig.contentInterpolation,\n color: styleConfig.color || 'dark',\n size: styleConfig.size || 'medium',\n bold: styleConfig.bold || false,\n allowPartialBold: styleConfig.allowPartialBold || false,\n };\n}\n","import { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { Observable, of } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { extractContentConfig, shouldUseReactiveContent } from '../../../shared/utils/simple-content';\nimport { TitleMetadata } from './types';\n\n@Component({\n selector: 'val-title',\n standalone: true,\n imports: [CommonModule, IonText, AsyncPipe],\n template: `\n <ion-text [color]=\"props.color\">\n @if (!props.bold) {\n <p [ngClass]=\"[props.size]\" [class.thin]=\"props.thin\">\n {{ displayContent$ | async }}\n </p>\n } @else {\n <b>\n <p [class]=\"props.size\">\n {{ displayContent$ | async }}\n </p>\n </b>\n }\n </ion-text>\n `,\n styleUrls: ['./title.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * val-title\n *\n * A styled title or heading, with options for size, color, and boldness.\n * Supports both static content and reactive content from the language service.\n *\n * @example Static content:\n * ```html\n * <val-title [props]=\"{ content: 'My Title', size: 'large', color: 'primary', bold: true }\"></val-title>\n * ```\n *\n * @example Reactive content:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: { key: 'pageTitle', fallback: 'Default Title' },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @example Reactive content with interpolation:\n * ```html\n * <val-title [props]=\"{\n * contentConfig: {\n * key: 'welcomeTitle',\n * interpolation: { name: 'John' },\n * fallback: 'Welcome!'\n * },\n * size: 'large',\n * color: 'primary',\n * bold: true\n * }\"></val-title>\n * ```\n *\n * @input props: TitleMetadata - Configuration for the title (content, color, size, bold, thin)\n */\nexport class TitleComponent implements OnInit, OnChanges {\n /**\n * Title configuration object.\n * @type {TitleMetadata}\n * @property content - Static title text (takes precedence over reactive content).\n * @property contentConfig - Reactive content configuration.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\n @Input()\n props: TitleMetadata;\n\n private langService = inject(LangService);\n private cdr = inject(ChangeDetectorRef);\n\n displayContent$: Observable<string>;\n\n constructor() {}\n\n ngOnInit() {\n this.updateContent();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateContent();\n this.cdr.detectChanges();\n }\n }\n\n private updateContent() {\n // Always convert to Observable for consistent template handling\n if (shouldUseReactiveContent(this.props)) {\n // Use reactive content with LangService\n const config = extractContentConfig(this.props);\n this.displayContent$ = this.langService.getContent(config.className, config.key, config.fallback);\n } else {\n // Convert static content to Observable\n const staticContent = this.props.content || '';\n this.displayContent$ = of(staticContent);\n }\n }\n}\n","import { Color } from '@ionic/core';\nimport { ReactiveTextMetadata } from '../../../shared/utils/simple-content';\n\n/**\n * Props for val-title component.\n * Supports both static content and reactive content from the language service.\n *\n * @property content - Static title text to display (takes precedence over reactive content).\n * @property contentKey - Content key for reactive content lookup.\n * @property contentClass - Component class name for content lookup.\n * @property contentFallback - Fallback text if content is not found.\n * @property color - The title color (Ionic color string).\n * @property size - The title size ('small' | 'medium' | 'large' | 'xlarge').\n * @property bold - Whether the title is bold.\n * @property thin - Whether the title is thin (optional).\n */\nexport interface TitleMetadata extends ReactiveTextMetadata {\n size: 'small' | 'medium' | 'large' | 'xlarge';\n color: Color;\n bold: boolean;\n thin?: boolean;\n}\n\n/**\n * Factory function to create title props with reactive content support.\n *\n * @param styleConfig - Title styling configuration\n * @param contentConfig - Content configuration (static or reactive)\n * @returns Complete TitleMetadata object\n *\n * @example Static content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * { content: 'Static Title' }\n * );\n * ```\n *\n * @example Reactive content:\n * ```typescript\n * const props = createTitleProps(\n * { size: 'large', color: 'primary', bold: true },\n * {\n * contentKey: 'pageTitle',\n * contentClass: 'MyComponent',\n * contentFallback: 'Default Title'\n * }\n * );\n * ```\n */\nexport function createTitleProps(\n styleConfig: Pick<TitleMetadata, 'size' | 'color' | 'bold' | 'thin'>,\n contentConfig: Pick<TitleMetadata, 'content' | 'contentKey' | 'contentClass' | 'contentFallback'>\n): TitleMetadata {\n return {\n ...styleConfig,\n ...contentConfig,\n };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { ActionHeaderMetadata } from './types';\n\n@Component({\n selector: 'val-action-header',\n standalone: true,\n imports: [CommonModule, DisplayComponent, ButtonComponent],\n template: `\n <section class=\"header-content-container\">\n <val-display [props]=\"props.title\" />\n <val-button [props]=\"props.action\" />\n </section>\n `,\n styles: `\n .header-content-container {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n `,\n})\nexport class ActionHeaderComponent {\n @Input() props: ActionHeaderMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { IconComponent } from '../../atoms/icon/icon.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { AlertBoxMetadata, ReactiveAlertBoxMetadata } from './types';\n\n@Component({\n selector: 'val-alert-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, IconComponent, TextComponent],\n template: `\n <val-box [props]=\"props.box\">\n <div class=\"content-container\" body>\n <val-icon [props]=\"props.icon\"></val-icon>\n <!-- Support both legacy and reactive patterns -->\n @if (isLegacyProps) {\n <val-text class=\"text\" [props]=\"getLegacyTextProps()\" />\n } @else {\n <val-text class=\"text\" [props]=\"computedTextProps\" />\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./alert-box.component.scss'],\n})\n/**\n * val-alert-box\n *\n * Displays an alert box with an icon and text, using a styled box container.\n * Supports both static and reactive content patterns.\n *\n * @example\n * // Legacy pattern with TextMetadata\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, text: {...} }\"></val-alert-box>\n *\n * // Reactive pattern with simplified configuration\n * <val-alert-box [props]=\"{ box: {...}, icon: {...}, textConfig: { key: 'alert.warning' } }\"></val-alert-box>\n *\n * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box\n */\nexport class AlertBoxComponent implements OnInit, OnDestroy {\n private subscriptions = new Subscription();\n\n /**\n * Alert box configuration object.\n * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.\n */\n @Input()\n props: AlertBoxMetadata | ReactiveAlertBoxMetadata;\n\n /** Computed text properties for reactive pattern */\n computedTextProps: any;\n\n /** Whether this is using the legacy props pattern */\n get isLegacyProps(): boolean {\n return 'text' in this.props && typeof (this.props as any).text === 'object';\n }\n\n /** Get text props for legacy pattern */\n getLegacyTextProps(): any {\n return (this.props as AlertBoxMetadata).text;\n }\n\n constructor(private langService: LangService) {}\n\n ngOnInit() {\n if (!this.isLegacyProps) {\n this.initializeReactiveTextProps();\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeReactiveTextProps() {\n const reactiveProps = this.props as ReactiveAlertBoxMetadata;\n\n // Base text properties with styling\n this.computedTextProps = {\n size: reactiveProps.textStyle?.size || 'medium',\n color: reactiveProps.textStyle?.color,\n bold: reactiveProps.textStyle?.bold || false,\n };\n\n // Add content configuration\n if (reactiveProps.text !== undefined) {\n // Static text\n this.computedTextProps.content = reactiveProps.text;\n } else if (reactiveProps.textConfig) {\n // Reactive content\n this.computedTextProps.contentConfig = reactiveProps.textConfig;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ButtonGroupMetadata } from './types';\n\n@Component({\n selector: 'val-button-group',\n standalone: true,\n imports: [CommonModule, ButtonComponent],\n template: `\n <div [ngClass]=\"['group-container', Position]\" [class.column]=\"props.columned\" style=\"width: 100%;\">\n <val-button\n *ngFor=\"let b of props.buttons\"\n [props]=\"b\"\n (onClick)=\"clickHandler(b?.token)\"\n [ngStyle]=\"{ width: props.buttons.length === 1 ? '100%' : 'auto' }\"\n ></val-button>\n </div>\n `,\n styleUrls: ['./button-group.component.scss'],\n})\n/**\n * val-button-group\n *\n * Displays a group of buttons with configurable layout and position.\n *\n * @example\n * <val-button-group [props]=\"{ buttons: [...], position: 'center', columned: false }\" (onClick)=\"handler($event)\"></val-button-group>\n *\n * @input props: ButtonGroupMetadata - Configuration for the button group (buttons, position, columned)\n * @output onClick - Emits the token of the clicked button\n */\nexport class ButtonGroupComponent implements OnInit {\n /**\n * Button group configuration object.\n * @type {ButtonGroupMetadata}\n * @property buttons - Array of button configurations.\n * @property position - Position of the button group ('center' | 'left' | 'right' | 'spaced').\n * @property columned - Whether the buttons are displayed in a column.\n */\n @Input()\n props: ButtonGroupMetadata;\n\n /**\n * Event emitted with the token of the clicked button.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n get Position(): string {\n if (this.props.buttons.length === 1 && this.props.position === 'spaced') {\n return 'right';\n }\n\n return this.props.position;\n }\n}\n","import { ButtonMetadata, ToolbarAction } from '../../types';\n\nexport enum CardType {\n native = 'native',\n checker = 'checker',\n tappable = 'tappable',\n complex = 'complex',\n}\n\nexport interface CardClickEvent {\n section: CardSection;\n token?: string;\n}\n\nexport enum CardSection {\n headerLeft,\n headerRight,\n content,\n footer,\n footerExtra,\n}\n\nexport interface CardMetadata {\n token?: string;\n type: CardType;\n title?: string;\n overtitle?: string;\n content?: string;\n image?: string;\n footerActions: ButtonMetadata[];\n footerComplexActions: ToolbarAction[];\n leftActions: ToolbarAction[];\n rightActions: ToolbarAction[];\n selected: boolean;\n headerText?: string;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardSubtitle,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n} from '@ionic/angular/standalone';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ToolbarActionType } from '../../types';\nimport { CardClickEvent, CardMetadata, CardSection, CardType } from './types';\n\n@Component({\n selector: 'val-card',\n standalone: true,\n imports: [\n CommonModule,\n ButtonComponent,\n AvatarComponent,\n ImageComponent,\n TextComponent,\n IonCard,\n IonCardContent,\n IonCardHeader,\n IonCardTitle,\n IonCardSubtitle,\n IonCheckbox,\n IonButtons,\n IonButton,\n IonIcon,\n ],\n template: `\n <ion-card *ngIf=\"props.type === types.native\">\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.tappable\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-header *ngIf=\"props.title || props.overtitle\">\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card\n *ngIf=\"props.type === types.checker\"\n (click)=\"clickHandler(sections.content, props.token)\"\n class=\"tapable\"\n >\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"checker\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n <div>\n <ion-checkbox [checked]=\"props.selected\"></ion-checkbox>\n </div>\n </ion-card-header>\n\n <ion-card-content *ngIf=\"props.content\">{{ props.content }}</ion-card-content>\n </ion-card>\n\n <ion-card *ngIf=\"props.type === types.complex\" class=\"complex\">\n <ion-card-header class=\"complex-header\">\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.leftActions.length > 0\">\n <ng-container *ngFor=\"let action of props.leftActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerLeft, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n <div *ngIf=\"props.headerText\">\n <val-text [props]=\"{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }\" />\n </div>\n </ng-container>\n </ion-buttons>\n <ion-buttons style=\"display: flex; align-items: center\" *ngIf=\"props.rightActions.length > 0\">\n <ng-container *ngFor=\"let action of props.rightActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.headerRight, action.token)\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card-header>\n\n <div class=\"tapable\" (click)=\"clickHandler(sections.content, props.token)\">\n <ion-card-header *ngIf=\"props.title || props.overtitle\" class=\"complex-header\">\n <div>\n <ion-card-subtitle *ngIf=\"props.overtitle\">{{ props.overtitle }}</ion-card-subtitle>\n <ion-card-title *ngIf=\"props.title\">{{ props.title }}</ion-card-title>\n </div>\n </ion-card-header>\n\n <img alt=\"image\" [src]=\"props.image\" />\n <ion-card-content *ngIf=\"props.content\" class=\"complex-content\">{{ props.content }}</ion-card-content>\n </div>\n <val-button\n *ngFor=\"let b of props.footerActions\"\n [props]=\"b\"\n (onClick)=\"clickHandler(sections.footer, b.token)\"\n ></val-button>\n <ion-buttons\n style=\"display: flex; align-items: center; justify-content: flex-end; margin: 8px\"\n *ngIf=\"props.footerComplexActions.length > 0\"\n >\n <ng-container *ngFor=\"let action of props.footerComplexActions\">\n <ion-button\n *ngIf=\"action.type === actionTypes.ICON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n >\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" color=\"dark\"></ion-icon>\n </ion-button>\n <val-avatar\n style=\"margin-right: 4px; cursor: pointer\"\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n ></val-image>\n <ion-button\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(sections.footerExtra, action.token)\"\n color=\"dark\"\n >\n {{ action.description }}\n </ion-button>\n </ng-container>\n </ion-buttons>\n </ion-card>\n `,\n styleUrls: ['./card.component.scss'],\n})\n/**\n * val-card\n *\n * A flexible card component supporting images, titles, content, actions, and custom sections.\n *\n * @example\n * <val-card [props]=\"{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }\" (onClick)=\"handler($event)\"></val-card>\n *\n * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)\n * @output onClick - Emits a CardClickEvent when the card or an action is clicked\n */\nexport class CardComponent implements OnInit {\n /**\n * Card configuration object.\n * @type {CardMetadata}\n * @property type - The card type (see CardType).\n * @property title - The card title.\n * @property image - The card image URL.\n * @property content - The card content.\n * @property actions - Array of action buttons (optional).\n * @property sections - Custom card sections (optional).\n * @property overtitle - Subtitle or overtitle (optional).\n */\n @Input()\n props: CardMetadata;\n\n /**\n * Event emitted when the card or an action is clicked.\n */\n @Output()\n onClick = new EventEmitter<CardClickEvent>();\n\n types = CardType;\n actionTypes = ToolbarActionType;\n sections = CardSection;\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(section: CardSection, token?: string) {\n this.onClick.emit({ section, token });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnInit } from '@angular/core';\nimport { IonCheckbox } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-check-input',\n standalone: true,\n imports: [CommonModule, IonCheckbox],\n template: ` <ion-checkbox>I agree to the terms and conditions</ion-checkbox> `,\n styleUrls: ['./check-input.component.scss'],\n})\n/**\n * val-check-input\n *\n * A simple checkbox input for boolean values or agreements.\n *\n * @example\n * <val-check-input></val-check-input>\n */\nexport class CheckInputComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport * as Prism from 'prismjs';\n\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CodeDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-code-display',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-viewer-container\">\n <div class=\"tab-bar\">\n <div\n class=\"tab\"\n *ngFor=\"let tab of props.tabs; let i = index\"\n [class.active]=\"i === selectedTab\"\n (click)=\"selectTab(i)\"\n >\n <span class=\"tab-label\">{{ tab.label }}</span>\n </div>\n </div>\n <div class=\"code-content\">\n <!-- <span class=\"language-badge\">{{ props.tabs[selectedTab]?.language || props.language }}</span> -->\n <ion-button fill=\"clear\" class=\"copy-button\" (click)=\"copyToClipboard()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.tabs[selectedTab]?.language || props.language)\" #codeElement></code></pre>\n </div>\n </div>\n `,\n\n styleUrl: './code-display.component.scss',\n})\nexport class CodeDisplayComponent implements AfterViewInit, OnChanges {\n @ViewChild('codeElement') codeElement!: ElementRef<HTMLElement>;\n\n @Input() props: CodeDisplayMetadata;\n\n toast = inject(ToastController);\n langService = inject(LangService);\n selectedTab: number = 0;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] || changes['language'] || changes['tabs']) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n selectTab(i: number) {\n this.selectedTab = i;\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeElement) {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n this.codeElement.nativeElement.textContent = code || '';\n Prism.highlightElement(this.codeElement.nativeElement);\n }\n }\n\n async copyToClipboard() {\n try {\n const code = this.props.tabs.length > 0 ? this.props.tabs[this.selectedTab]?.code : this.props.code;\n await Clipboard.write({ string: code || '' });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n } catch (error) {\n console.error('Error al copiar al portapapeles:', error);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { CommandDisplayMetadata } from './types';\n\n@Component({\n selector: 'val-command-display',\n standalone: true,\n imports: [CommonModule, IonIcon],\n template: `\n <div class=\"command-container\">\n <div class=\"command-text\">$ {{ props.text }}</div>\n <ion-icon name=\"copy-outline\" class=\"copy-icon\" (click)=\"copyCommand()\"></ion-icon>\n </div>\n `,\n styleUrls: ['./command-display.component.scss'],\n})\nexport class CommandDisplayComponent {\n toast = inject(ToastController);\n langService = inject(LangService);\n\n @Input() props: CommandDisplayMetadata;\n\n constructor() {}\n\n async copyCommand() {\n if (this.props.text) {\n await Clipboard.write({\n string: this.props.text,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonCheckbox, IonTextarea } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-comment-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonCheckbox, IonTextarea],\n template: `\n <ion-textarea [formControl]=\"props.control\" [counter]=\"true\" [maxlength]=\"props.range.max\"></ion-textarea>\n `,\n styleUrls: ['./comment-input.component.scss'],\n})\n/**\n * val-comment-input\n *\n * A textarea input for multi-line comments, integrated with Angular forms.\n *\n * @example\n * <val-comment-input [props]=\"{ control: myControl, range: { max: 200 } }\"></val-comment-input>\n *\n * @input props: InputMetadata - Configuration for the textarea (form control, range, etc.)\n */\nexport class CommentInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the textarea.\n * @property range - The range object with max length.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { IonSpinner, IonText } from '@ionic/angular/standalone';\nimport { ContentLoaderMetadata } from './types';\n\n@Component({\n selector: 'val-content-loader',\n standalone: true,\n imports: [CommonModule, IonSpinner, IonText],\n template: `\n <div [ngClass]=\"['spinner-wrapper', props.size]\">\n <ion-spinner [ngClass]=\"[props.size]\" [name]=\"props.name\" [color]=\"props.color\"></ion-spinner>\n <ion-text [color]=\"props.color\">\n <p>{{ props.text }}</p>\n </ion-text>\n </div>\n `,\n styleUrls: ['./content-loader.component.scss'],\n})\n/**\n * val-content-loader\n *\n * A loading spinner with optional text, for indicating loading states.\n *\n * @example\n * <val-content-loader [props]=\"{ size: 'large', color: 'primary', text: 'Loading...' }\"></val-content-loader>\n *\n * @input props: ContentLoaderMetadata - Configuration for the loader (size, color, text, etc.)\n */\nexport class ContentLoaderComponent implements OnInit {\n /**\n * Loader configuration object.\n * @type {ContentLoaderMetadata}\n * @property size - The spinner size.\n * @property color - The spinner color.\n * @property text - The loading text (optional).\n * @property name - The spinner name (optional).\n */\n @Input()\n props: ContentLoaderMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Utilities for handling default values in form inputs based on InputMetadata configuration.\n */\n\nimport { InputMetadata, InputType } from '../../components/types';\n\n/**\n * Resolves the initial value for a form input based on its configuration.\n *\n * @param input - The input metadata configuration\n * @returns The resolved initial value\n *\n * @example\n * // Custom default value\n * const customValue = resolveInputDefaultValue({ withDefault: '2025-06-24', type: InputType.DATE });\n *\n * // Auto default value\n * const autoValue = resolveInputDefaultValue({ withDefault: true, type: InputType.NUMBER });\n *\n * // Explicit value (takes precedence)\n * const explicitValue = resolveInputDefaultValue({ value: 'explicit', withDefault: true, type: InputType.TEXT });\n */\nexport function resolveInputDefaultValue(input: InputMetadata): any {\n // Explicit value takes precedence\n if (input.value !== undefined && input.value !== null && input.value !== '') {\n return parseValueByType(input.value, input.type);\n }\n\n // No default configuration\n if (!input.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof input.withDefault === 'string') {\n return parseValueByType(input.withDefault, input.type);\n }\n\n // Auto default value (withDefault === true)\n return getAutoDefaultValue(input.type);\n}\n\n/**\n * Parses a string value to the appropriate type based on the input type.\n *\n * @param value - The string value to parse\n * @param type - The input type\n * @returns The parsed value\n */\nfunction parseValueByType(value: string, type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date(value).toISOString();\n case InputType.NUMBER:\n return parseFloat(value) || 0;\n case InputType.CHECK:\n return value === 'true' || value === '1';\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return value;\n }\n}\n\n/**\n * Gets the automatic default value for a given input type.\n *\n * @param type - The input type\n * @returns The auto default value\n */\nfunction getAutoDefaultValue(type: InputType): any {\n switch (type) {\n case InputType.DATE:\n return new Date().toISOString();\n case InputType.NUMBER:\n return 0;\n case InputType.CHECK:\n return false;\n case InputType.TEXT:\n case InputType.EMAIL:\n case InputType.PASSWORD:\n case InputType.COMMENT:\n case InputType.PIN_CODE:\n case InputType.HOUR:\n case InputType.RADIO:\n case InputType.SELECT:\n case InputType.SEARCH_SELECT:\n case InputType.FILE:\n default:\n return '';\n }\n}\n\n/**\n * Applies the resolved default value to a FormControl.\n *\n * @param input - The input metadata configuration\n * @example\n * const input = { control: myFormControl, type: InputType.DATE, withDefault: true };\n * applyDefaultValueToControl(input);\n */\nexport function applyDefaultValueToControl(input: InputMetadata): void {\n if (!input.control) return;\n\n const defaultValue = resolveInputDefaultValue(input);\n if (defaultValue !== null) {\n input.control.setValue(defaultValue);\n input.control.markAsPristine();\n input.control.updateValueAndValidity();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime, IonDatetimeButton, IonModal } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-date-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonDatetime, IonDatetimeButton, IonModal],\n template: `\n <div class=\"button-container\">\n <ion-datetime-button class=\"action\" [datetime]=\"props.token\"></ion-datetime-button>\n </div>\n <ion-modal [keepContentsMounted]=\"true\">\n <ng-template>\n <ion-datetime\n [formControl]=\"props.control\"\n [id]=\"props.token\"\n presentation=\"date\"\n locale=\"es-ES\"\n [firstDayOfWeek]=\"1\"\n [showDefaultButtons]=\"true\"\n doneText=\"Aceptar\"\n cancelText=\"Cancelar\"\n formatOptions=\"{\n date: { dateStyle: 'medium' },\n time: { timeStyle: 'short' }\n }\"\n >\n <span slot=\"title\">{{ props.hint }}</span>\n </ion-datetime>\n </ng-template>\n </ion-modal>\n `,\n styleUrls: ['./date-input.component.scss'],\n})\n/**\n * val-date-input\n *\n * A date picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-date-input [props]=\"{ control: myControl, hint: 'Select a date' }\"></val-date-input>\n *\n * @input props: InputMetadata - Configuration for the date input (form control, hint, etc.)\n */\nexport class DateInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the date input.\n * @property hint - The hint text for the input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-email-input',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"email\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./email-input.component.scss'],\n})\n/**\n * val-email-input\n *\n * An email input field integrated with Angular forms.\n *\n * @example\n * <val-email-input [props]=\"{ control: myControl, placeholder: 'Enter your email' }\"></val-email-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class EmailInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Resolves a color string to a valid CSS value for use in styles.\n * Supports Ionic color names, CSS variables, and custom colors.\n *\n * @param color The color name, CSS variable, or custom color string\n * @returns A valid CSS color value\n *\n * @example\n * resolveColor('primary'); // returns 'var(--ion-color-primary)'\n * resolveColor('--my-custom-color'); // returns 'var(--my-custom-color)'\n * resolveColor('#ff0000'); // returns '#ff0000'\n */\nexport function resolveColor(color: string): string {\n // Si el color empieza con \"--\", se asume que es una variable CSS válida\n if (color.startsWith('--')) {\n return `var(${color})`;\n }\n\n // Lista de colores predefinidos de Ionic\n const ionicColors = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'warning',\n 'danger',\n 'light',\n 'medium',\n 'dark',\n ];\n\n // Verificar si el color es un color de Ionic\n if (ionicColors.includes(color)) {\n return `var(--ion-color-${color})`;\n }\n\n // Si no es una variable CSS ni un color de Ionic, devolver el color tal cual\n return color;\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { IonText } from '@ionic/angular/standalone';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ExpandableTextInput } from './types';\n\n@Component({\n selector: 'val-expandable-text',\n standalone: true,\n imports: [IonText],\n template: `\n <div class=\"description-container\" [class.expanded]=\"expanded\" [class.has-gradient]=\"!expanded && isTruncated\">\n <ion-text>\n <p class=\"description\">\n <span class=\"content\">{{ expanded ? props.content : truncatedText }}</span>\n @if (!expanded && isTruncated) {\n <span class=\"see-more\" [style.color]=\"this.color()\" (click)=\"toggleExpand()\">\n {{ getExpandText() }}\n </span>\n }\n </p>\n </ion-text>\n </div>\n `,\n styles: [\n `\n .description-container {\n position: relative;\n overflow: hidden;\n max-height: 10rem; /* Altura para texto truncado */\n transition: max-height 0.3s ease-in-out;\n }\n\n .description-container.expanded {\n max-height: none; /* Sin límite de altura al expandir */\n }\n\n .description {\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .description-container:not(.expanded) .description::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 3.5rem; /* Altura del gradiente */\n background: linear-gradient(to top, var(--ion-background-color), rgba(255, 255, 255, 0));\n pointer-events: none; /* Ignorar interacciones en el gradiente */\n }\n\n .description-container:not(.has-gradient) .description::after {\n background: transparent; /* Fondo transparente si no hay gradiente */\n }\n\n .see-more {\n position: relative;\n font-weight: bold;\n cursor: pointer;\n z-index: 1;\n margin-left: 0.3rem;\n }\n `,\n ],\n})\n/**\n * val-expandable-text\n *\n * A text component that can be expanded/collapsed to show more or less content.\n *\n * @example\n * <val-expandable-text [props]=\"{ content: '...', limit: 180, color: 'primary', expandText: 'más' }\"></val-expandable-text>\n *\n * @input props: ExpandableTextInput - Configuration for the expandable text (content, limit, color, expandText)\n */\nexport class ExpandableTextComponent {\n /**\n * Expandable text configuration object.\n * @type {ExpandableTextInput}\n * @property content - The text content to display.\n * @property limit - The character limit before truncation.\n * @property color - The color for the \"see more\" link.\n * @property expandText - The text for the expand link (optional).\n */\n @Input() props: ExpandableTextInput;\n expanded = false;\n defaultColor = 'primary';\n\n private langService = inject(LangService);\n\n get truncatedText(): string {\n const maxLength = this.props.limit || 100; // Longitud por defecto\n return this.props.content?.length > maxLength ? this.props.content.slice(0, maxLength) + '...' : this.props.content;\n }\n\n get isTruncated(): boolean {\n return this.props.content?.length > (this.props.limit || 100);\n }\n\n getExpandText(): string {\n return this.props.expandText || this.langService.getText('_global', 'seeMore', 'ver más');\n }\n\n toggleExpand() {\n this.expanded = !this.expanded;\n }\n\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { IonIcon } from '@ionic/angular/standalone';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { PrimarySolidDefaultRoundButton } from '../../atoms/button/factory';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonMetadata, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-file-input',\n standalone: true,\n imports: [IonIcon, TextComponent, ButtonComponent],\n template: `\n <div class=\"file-container\">\n <input style=\"display: none\" type=\"file\" (change)=\"onFileSelected($event)\" #fileInput />\n <div class=\"name-container\">\n <ion-icon [name]=\"selectedFile ? 'checkmark-circle-outline' : 'alert-circle-outline'\"></ion-icon>\n <val-text\n style=\"margin-left: 4px;\"\n [props]=\"{\n content: selectedFile ? selectedFile.name : 'No has seleccionado archivo',\n color: 'dark',\n bold: false,\n size: 'medium',\n }\"\n ></val-text>\n </div>\n <val-button [props]=\"contrastButton\" (onClick)=\"fileInput.click()\"></val-button>\n </div>\n `,\n styleUrls: ['./file-input.component.scss'],\n})\n/**\n * val-file-input\n *\n * A file input component for uploading files, integrated with Angular forms.\n *\n * @example\n * <val-file-input [props]=\"{ control: myControl }\"></val-file-input>\n *\n * @input props: InputMetadata - Configuration for the file input (form control, etc.)\n */\nexport class FileInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the file input.\n */\n @Input() props: InputMetadata;\n\n @ViewChild('fileInput') fileInput;\n\n contrastButton: ButtonMetadata = {\n ...PrimarySolidDefaultRoundButton('Subir archivo'),\n color: 'light',\n };\n selectedFile: File;\n\n constructor() {}\n\n ngOnInit() {}\n\n onFileSelected(event): void {\n this.selectedFile = event.target.files[0];\n this.props.control.setValue(this.selectedFile);\n }\n\n reset(): void {\n this.selectedFile = null;\n this.fileInput.nativeElement.value = '';\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hint',\n standalone: true,\n imports: [CommonModule, TextComponent],\n template: `\n <div class=\"hint-container\" *ngIf=\"shouldShowErrors\">\n <val-text\n *ngFor=\"let e of Errors\"\n [props]=\"{\n content: e,\n color: 'danger',\n bold: false,\n size: 'small',\n }\"\n ></val-text>\n </div>\n `,\n styleUrls: ['./hint.component.scss'],\n})\n/**\n * val-hint\n *\n * Displays validation error messages for a form input, using Angular forms.\n *\n * @example\n * <val-hint [props]=\"{ control: myControl, errors: { required: 'Required field' } }\"></val-hint>\n *\n * @input props: InputMetadata - Configuration for the input (form control, errors, etc.)\n */\nexport class HintComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property errors - The error messages mapping.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n\n get shouldShowErrors(): boolean {\n if (this.props.control) {\n // Normal field with single control\n return this.props.control.invalid && (this.props.control.touched || this.props.control.dirty);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field with separate controls\n const fromInvalid = this.props.fromControl.invalid && (this.props.fromControl.touched || this.props.fromControl.dirty);\n const toInvalid = this.props.toControl.invalid && (this.props.toControl.touched || this.props.toControl.dirty);\n return fromInvalid || toInvalid;\n }\n return false;\n }\n\n get Errors(): string[] {\n const keys = Object.keys(this.props.errors || {});\n const errors = [];\n \n keys.map((e: string) => {\n if (this.props.control && this.props.control.hasError(e)) {\n // Normal field\n errors.push(this.props.errors[e]);\n } else if (this.props.fromControl && this.props.toControl) {\n // NUMBER_FROM_TO field - check both controls\n const fromLabel = this.props.fromLabel || 'Inicial';\n const toLabel = this.props.toLabel || 'Final';\n \n if (this.props.fromControl.hasError(e)) {\n errors.push(`${fromLabel}: ${this.props.errors[e]}`);\n }\n if (this.props.toControl.hasError(e)) {\n errors.push(`${toLabel}: ${this.props.errors[e]}`);\n }\n }\n });\n \n return errors;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonDatetime } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-hour-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonDatetime],\n template: ` <ion-datetime [formControl]=\"props.control\" presentation=\"time\"></ion-datetime>`,\n styleUrls: ['./hour-input.component.scss'],\n})\n/**\n * val-hour-input\n *\n * A time picker input integrated with Angular forms, using Ionic's datetime component.\n *\n * @example\n * <val-hour-input [props]=\"{ control: myControl }\"></val-hour-input>\n *\n * @input props: InputMetadata - Configuration for the time input (form control, etc.)\n */\nexport class HourInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the time input.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonText } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronForwardOutline } from 'ionicons/icons';\nimport { NavigationService } from '../../../services/navigation.service';\nimport { LinkMetadata } from './types';\n\n@Component({\n selector: 'val-link',\n standalone: true,\n imports: [IonButton, IonIcon, IonText],\n template: `\n <div>\n <ion-button type=\"button\" [color]=\"props.color\" fill=\"clear\" [size]=\"props.size\" (click)=\"onClickHandler()\">\n <ion-icon slot=\"end\" name=\"chevron-forward-outline\"></ion-icon>\n <ion-text>{{ props.text }}</ion-text>\n </ion-button>\n </div>\n `,\n styleUrls: ['./link.component.scss'],\n})\n/**\n * val-link\n *\n * A stylized link button with navigation support for internal, in-app, or new tab links.\n *\n * @example\n * <val-link [props]=\"{ text: 'Go', color: 'primary', link: '/home', type: 'internal' }\" (onClick)=\"handler($event)\"></val-link>\n *\n * @input props: LinkMetadata - Configuration for the link (text, color, link, type, etc.)\n * @output onClick - Emits the token of the clicked link\n */\nexport class LinkComponent implements OnInit {\n /**\n * Link configuration object.\n * @type {LinkMetadata}\n * @property text - The link text.\n * @property color - The button color (Ionic color string).\n * @property link - The URL or route to navigate to.\n * @property type - The navigation type ('internal', 'browse', 'tab').\n * @property token - Optional token for event identification.\n * @property size - The button size (optional).\n */\n @Input()\n props: LinkMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n service = inject(NavigationService);\n\n constructor() {\n addIcons({ chevronForwardOutline });\n }\n\n ngOnInit() {}\n\n onClickHandler() {\n this.onClick.emit(this.props.token);\n\n switch (this.props.type) {\n case 'internal':\n this.service.navigateByUrl(this.props.link);\n break;\n case 'browse':\n this.service.navigateInApp(this.props.link);\n break;\n case 'tab':\n this.service.openInNewTab(this.props.link);\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { TitleBlockMetada } from './types';\n\n@Component({\n selector: 'val-title-block',\n standalone: true,\n imports: [CommonModule, TitleComponent, DisplayComponent],\n template: `\n <div [ngClass]=\"['titles-container', props.position]\">\n <val-title\n *ngIf=\"props.aboveTitle\"\n [props]=\"{\n content: props.aboveTitle.content | uppercase,\n color: props.aboveTitle.color,\n bold: false,\n size: props.aboveTitle.size,\n }\"\n ></val-title>\n <val-display\n *ngIf=\"props.title\"\n [props]=\"{\n content: props.title.content,\n color: props.title.color,\n size: props.title.size,\n }\"\n ></val-display>\n <val-title\n style=\"margin-top: 16px;\"\n *ngIf=\"props.bellowTitle\"\n [props]=\"{\n content: props.bellowTitle.content,\n color: props.bellowTitle.color,\n bold: false,\n size: props.bellowTitle.size,\n thin: props.bellowTitle.thin,\n }\"\n ></val-title>\n </div>\n `,\n styleUrls: ['./title-block.component.scss'],\n})\n/**\n * val-title-block\n *\n * Displays a block of titles (above, main, below) with configurable styles and positions.\n *\n * @example\n * <val-title-block [props]=\"{ title: {...}, aboveTitle: {...}, bellowTitle: {...}, position: 'center' }\"></val-title-block>\n *\n * @input props: TitleBlockMetada - Configuration for the title block (title, aboveTitle, bellowTitle, position)\n */\nexport class TitleBlockComponent implements OnInit, OnChanges {\n @Input()\n props: TitleBlockMetada;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n}\n","// src/app/layout/layout.component.ts (solo la parte de styles)\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { LinkComponent } from '../link/link.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { IconService } from '../../../services/icons.service';\nimport { InfoMetadata } from './types';\n\n@Component({\n selector: 'val-info',\n standalone: true,\n imports: [CommonModule, LinkComponent, TitleBlockComponent, ImageComponent, ButtonGroupComponent],\n template: `\n @if (props.image) {\n <val-image style=\"display: contents;\" [props]=\"props.image\" />\n }\n <val-title-block style=\"display: block;margin-top: 16px;\" [props]=\"props.title\" />\n\n @if (props.link) {\n <val-link [props]=\"props.link\" />\n }\n\n @if (props.actions) {\n <val-button-group [props]=\"props.actions\" />\n }\n `,\n styles: ``,\n})\nexport class InfoComponent {\n icon = inject(IconService);\n\n @Input() props: InfoMetadata;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonButton, IonIcon, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronDown } from 'ionicons/icons';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PopoverSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-popover-selector',\n standalone: true,\n imports: [CommonModule, IonButton, IonIcon, IonSelect, IonSelectOption, IonLabel],\n template: `\n <div class=\"popover-selector-container\">\n <ion-label *ngIf=\"props.label\" class=\"selector-label\">{{ props.label }}</ion-label>\n <ion-select\n [value]=\"props.selectedValue\"\n [placeholder]=\"getPlaceholderText()\"\n [interface]=\"props.interface || 'popover'\"\n [multiple]=\"props.multiple || false\"\n [disabled]=\"props.disabled || false\"\n [cancelText]=\"getCancelText()\"\n [okText]=\"getOkText()\"\n (ionChange)=\"onSelectionChange($event)\"\n class=\"popover-selector-select\"\n >\n <ion-button\n slot=\"trigger\"\n [fill]=\"props.fill || 'clear'\"\n [size]=\"props.size || 'default'\"\n [shape]=\"'round'\"\n [color]=\"props.color || 'medium'\"\n [disabled]=\"props.disabled || false\"\n class=\"selector-trigger\"\n >\n <ion-icon *ngIf=\"props.icon\" [name]=\"props.icon\" slot=\"start\"> </ion-icon>\n\n <span class=\"trigger-text\">{{ getDisplayText() }}</span>\n\n <ion-icon name=\"chevron-down-outline\" slot=\"end\" class=\"chevron-icon\"> </ion-icon>\n </ion-button>\n\n <ion-select-option *ngFor=\"let option of props.options\" [value]=\"option.value\" [disabled]=\"option.disabled\">\n <div class=\"option-content\">\n <ion-icon *ngIf=\"option.icon\" [name]=\"option.icon\" class=\"option-icon\"> </ion-icon>\n <span>{{ option.label }}</span>\n </div>\n </ion-select-option>\n </ion-select>\n </div>\n `,\n styleUrls: ['./popover-selector.component.scss'],\n})\n/**\n * val-popover-selector\n *\n * A generic reusable popover selector component that can be used for any type of selection.\n * Provides a button trigger that opens a popover with selectable options.\n *\n * @example\n * // Basic usage\n * <val-popover-selector\n * [props]=\"selectorProps\"\n * (selectionChange)=\"onSelectionChange($event)\">\n * </val-popover-selector>\n *\n * @example\n * // With icon and custom styling\n * const selectorProps: PopoverSelectorMetadata = {\n * options: [\n * { value: 'option1', label: 'Option 1', icon: 'star' },\n * { value: 'option2', label: 'Option 2', icon: 'heart' }\n * ],\n * selectedValue: 'option1',\n * label: 'Choose option',\n * icon: 'settings',\n * color: 'primary',\n * size: 'large',\n * fill: 'solid'\n * };\n *\n * @input props: PopoverSelectorMetadata - Configuration for the selector\n * @output selectionChange: EventEmitter<string | string[]> - Emitted when selection changes\n */\nexport class PopoverSelectorComponent {\n /**\n * Popover selector configuration object.\n * @type {PopoverSelectorMetadata}\n */\n @Input()\n props: PopoverSelectorMetadata;\n\n /**\n * Event emitted when the selection changes.\n * Emits the selected value(s).\n */\n @Output()\n selectionChange = new EventEmitter<string | string[]>();\n\n private langService = inject(LangService);\n\n constructor() {\n // Register required icons\n addIcons({ chevronDown });\n }\n\n /**\n * Get reactive placeholder text.\n */\n getPlaceholderText(): string {\n return this.props.placeholder || this.langService.getText('_global', 'select', 'Seleccionar...');\n }\n\n /**\n * Get reactive cancel text.\n */\n getCancelText(): string {\n return this.props.cancelText || this.langService.getText('_global', 'cancel', 'Cancelar');\n }\n\n /**\n * Get reactive ok text.\n */\n getOkText(): string {\n return this.props.okText || this.langService.getText('_global', 'ok', 'Aceptar');\n }\n\n /**\n * Handle selection change from the ion-select.\n * @param event - The ion-select change event\n */\n onSelectionChange(event: any) {\n const selectedValue = event.detail.value;\n this.selectionChange.emit(selectedValue);\n }\n\n /**\n * Get the display text for the trigger button.\n * Shows the selected option's label or placeholder.\n * @returns The display text\n */\n getDisplayText(): string {\n if (!this.props.selectedValue) {\n return this.getPlaceholderText();\n }\n\n if (Array.isArray(this.props.selectedValue)) {\n // Multiple selection\n if (this.props.selectedValue.length === 0) {\n return this.getPlaceholderText();\n }\n if (this.props.selectedValue.length === 1) {\n const option = this.props.options.find(opt => opt.value === this.props.selectedValue[0]);\n return option?.label || this.props.selectedValue[0];\n }\n const selectedText = this.langService.getText('_global', 'selected', 'seleccionados');\n return `${this.props.selectedValue.length} ${selectedText}`;\n }\n\n // Single selection\n const selectedOption = this.props.options.find(opt => opt.value === this.props.selectedValue);\n return selectedOption?.label || this.props.selectedValue;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { addIcons } from 'ionicons';\nimport { globe, language } from 'ionicons/icons';\nimport { Observable, Subscription, combineLatest, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { LangOption } from '../../../services/lang-provider/types';\nimport { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';\nimport { PopoverOption, PopoverSelectorMetadata } from '../popover-selector/types';\nimport { LanguageSelectorMetadata } from './types';\n\n@Component({\n selector: 'val-language-selector',\n standalone: true,\n imports: [CommonModule, PopoverSelectorComponent],\n template: `\n <val-popover-selector [props]=\"popoverProps\" (selectionChange)=\"onLanguageChange($event)\"> </val-popover-selector>\n `,\n styleUrls: ['./language-selector.component.scss'],\n})\n/**\n * val-language-selector\n *\n * A specialized language selector component that integrates with the LangService.\n * Uses the popover-selector component internally and provides language-specific functionality.\n *\n * @example\n * // Basic usage (auto-detects languages from LangService)\n * <val-language-selector\n * [props]=\"{ showLabel: true, showFlags: true }\">\n * </val-language-selector>\n *\n * @example\n * // Custom configuration\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * label: 'Choose Language',\n * showFlags: true,\n * color: 'primary',\n * size: 'large',\n * fill: 'outline',\n * customLanguageNames: {\n * 'es': 'Español',\n * 'en': 'English',\n * 'fr': 'Français'\n * }\n * };\n *\n * @example\n * // With reactive content\n * const languageProps: LanguageSelectorMetadata = {\n * showLabel: true,\n * labelConfig: {\n * className: 'myComponent',\n * key: 'languageLabel',\n * fallback: 'Language'\n * },\n * color: 'tertiary'\n * };\n *\n * @input props: LanguageSelectorMetadata - Configuration for the language selector\n * @output languageChange: EventEmitter<string> - Emitted when language changes\n */\nexport class LanguageSelectorComponent implements OnInit, OnDestroy {\n /**\n * Language selector configuration object.\n * @type {LanguageSelectorMetadata}\n */\n @Input()\n props: LanguageSelectorMetadata = {};\n\n /**\n * Event emitted when the language selection changes.\n * Emits the selected language code.\n */\n @Output()\n languageChange = new EventEmitter<string>();\n\n /** Popover selector configuration */\n popoverProps: PopoverSelectorMetadata;\n\n /** Current language observable */\n currentLanguage$: Observable<LangOption>;\n\n /** Available languages observable */\n availableLanguages$: Observable<LangOption[]>;\n\n /** Label observable for reactive content */\n label$: Observable<string>;\n\n private subscriptions = new Subscription();\n\n /** Default language display names */\n private readonly defaultLanguageNames: Record<string, string> = {\n es: 'Español',\n en: 'English',\n fr: 'Français',\n de: 'Deutsch',\n pt: 'Português',\n it: 'Italiano',\n zh: '中文',\n ja: '日本語',\n ko: '한국어',\n ru: 'Русский',\n ar: 'العربية',\n };\n\n /** Default flag icons for languages */\n private readonly defaultLanguageFlags: Record<string, string> = {\n es: '🇪🇸',\n en: '🇺🇸',\n fr: '🇫🇷',\n de: '🇩🇪',\n pt: '🇵🇹',\n it: '🇮🇹',\n zh: '🇨🇳',\n ja: '🇯🇵',\n ko: '🇰🇷',\n ru: '🇷🇺',\n ar: '🇸🇦',\n };\n\n constructor(private langService: LangService) {\n // Register required icons\n addIcons({ language, globe });\n }\n\n ngOnInit() {\n this.initializeLanguageState();\n this.initializeLabel();\n this.initializePopoverProps();\n }\n\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n\n private initializeLanguageState() {\n // Get current language and available languages from LangService\n this.currentLanguage$ = this.langService.currentLang$;\n this.availableLanguages$ = this.currentLanguage$.pipe(\n map(() => this.props.availableLanguages || this.langService.availableLangs)\n );\n }\n\n private initializeLabel() {\n // Initialize label observable based on configuration\n if (this.props.label !== undefined) {\n // Static label\n this.label$ = of(this.props.label);\n } else if (this.props.labelConfig) {\n // Reactive label\n this.label$ = this.langService.getContent(\n this.props.labelConfig.className || '_global',\n this.props.labelConfig.key,\n this.props.labelConfig.fallback || 'Language'\n );\n } else {\n // Default label from global content\n this.label$ = this.langService.getContent('_global', 'language', 'Idioma');\n }\n }\n\n private initializePopoverProps() {\n // Subscribe to language state changes and content changes to update popover props\n const languageSubscription = combineLatest([\n this.availableLanguages$,\n this.currentLanguage$,\n this.langService.currentLang$, // This will trigger updates when language changes\n ]).subscribe(([availableLanguages, currentLanguage]) => {\n this.updatePopoverProps(availableLanguages, currentLanguage);\n });\n this.subscriptions.add(languageSubscription);\n\n // Subscribe to label changes\n const labelSubscription = this.label$.subscribe(label => {\n if (this.popoverProps) {\n this.popoverProps = {\n ...this.popoverProps,\n label: this.props.showLabel !== false ? label : undefined,\n };\n }\n });\n this.subscriptions.add(labelSubscription);\n }\n\n private updatePopoverProps(availableLanguages: LangOption[], currentLanguage: LangOption) {\n // Convert language codes to popover options\n const options: PopoverOption[] = availableLanguages.map(lang => ({\n value: lang,\n label: this.getLanguageDisplayName(lang),\n icon: this.props.showFlags ? undefined : undefined, // We'll use text flags instead\n }));\n\n // Create popover configuration\n this.popoverProps = {\n options,\n selectedValue: currentLanguage,\n label: this.props.showLabel !== false ? '' : undefined, // Will be set by label subscription\n icon: 'language',\n placeholder: this.langService.getText('_global', 'selectLanguage', 'Seleccionar idioma...'),\n color: this.props.color || 'medium',\n size: this.props.size || 'default',\n fill: this.props.fill || 'outline',\n shape: this.props.shape,\n expand: this.props.expand,\n disabled: this.props.disabled || false,\n interface: 'popover',\n showCheckmark: true,\n multiple: false,\n cancelText: 'Cancelar',\n okText: 'Aceptar',\n };\n }\n\n private getLanguageDisplayName(languageCode: string): string {\n // Use custom names if provided\n if (this.props.customLanguageNames?.[languageCode]) {\n const customName = this.props.customLanguageNames[languageCode];\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n return flag ? `${flag} ${customName}` : customName;\n }\n\n // Use reactive content for translated language names\n // Note: This will use the current language since getLanguageDisplayName is called during subscription updates\n const translatedName = this.langService.getText('_global', `languageName_${languageCode}`);\n const flag = this.props.showFlags ? this.defaultLanguageFlags[languageCode] : '';\n\n if (translatedName && translatedName !== `languageName_${languageCode}`) {\n return flag ? `${flag} ${translatedName}` : translatedName;\n }\n\n // Fallback to default names, then to code\n const defaultName = this.defaultLanguageNames[languageCode] || languageCode.toUpperCase();\n return flag ? `${flag} ${defaultName}` : defaultName;\n }\n\n /**\n * Handle language selection change.\n * @param selectedLanguage - The selected language code(s)\n */\n onLanguageChange(selectedLanguage: string | string[]) {\n if (typeof selectedLanguage === 'string') {\n // Update the language service\n this.langService.setLang(selectedLanguage);\n\n // Emit the change event\n this.languageChange.emit(selectedLanguage);\n }\n }\n}\n","/**\n * Service for managing application themes (light, dark, auto).\n * Handles user preferences, system theme detection, and theme toggling.\n * Uses localStorage to persist the selected theme.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { THEME } from '../shared/constants/storage';\nimport { LocalStorageService } from './local-storage.service';\n\nexport enum ThemeOption {\n LIGHT = 'light',\n DARK = 'dark',\n AUTO = 'auto',\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThemeService {\n /**\n * Indicates if the light theme is active.\n */\n lightToggle = false;\n /**\n * Indicates if the dark theme is active.\n */\n darkToggle = false;\n /**\n * Indicates if the auto theme is active.\n */\n autoToggle = false;\n /**\n * The current selected theme option.\n */\n currentOption = ThemeOption.AUTO;\n /**\n * Enum with all available theme options.\n */\n themeOptions = ThemeOption;\n /**\n * Whether the system prefers dark mode.\n */\n prefersDark = false;\n /**\n * The default theme option.\n */\n default = ThemeOption.AUTO;\n /**\n * Observable for the current theme.\n */\n theme: BehaviorSubject<ThemeOption>;\n\n constructor() {\n const current = LocalStorageService.get<ThemeOption>(THEME);\n console.log('💡 ThemeConfig current::: ', current);\n this.theme = new BehaviorSubject<ThemeOption>(current || this.default);\n this.currentOption = this.Theme;\n console.log('💡 ThemeConfig this.currentOption::: ', this.currentOption);\n this.toggleUserPreference(this.currentOption);\n\n const prefersDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n this.prefersDark = prefersDarkQuery.matches;\n this.handleAutoConfiguration();\n\n prefersDarkQuery.addEventListener('change', mediaQuery => {\n console.log('💡 ThemeConfig addEventListener change::: ', mediaQuery);\n this.prefersDark = mediaQuery.matches;\n this.handleAutoConfiguration();\n });\n }\n\n private handleAutoConfiguration() {\n if (this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n if (!this.prefersDark && this.currentOption === ThemeOption.AUTO) {\n console.log('💡 ThemeConfig prefersDark::: ', this.prefersDark);\n this.toggleUserPreference(ThemeOption.AUTO);\n }\n }\n\n private handleDarkPreference() {\n this.toggleTheme(ThemeOption.DARK, true);\n this.toggleTheme(ThemeOption.LIGHT, false);\n }\n\n private handleLightPreference() {\n this.toggleTheme(ThemeOption.LIGHT, true);\n this.toggleTheme(ThemeOption.DARK, false);\n }\n\n /**\n * Returns true if the system prefers dark mode.\n */\n get IsDark(): boolean {\n return this.prefersDark;\n }\n\n /**\n * Gets the current theme option.\n */\n get Theme(): ThemeOption {\n return this.theme.value;\n }\n\n /**\n * Sets the current theme option and persists it.\n */\n set Theme(theme: ThemeOption) {\n this.theme.next(theme);\n LocalStorageService.set<ThemeOption>(THEME, theme);\n }\n\n /**\n * Toggles a theme class on the document body.\n * @param name The theme name\n * @param shouldAdd Whether to add or remove the class\n */\n toggleTheme(name: string, shouldAdd: boolean) {\n console.log('toggleTheme::: ', name, shouldAdd);\n document.body.classList.toggle(name, shouldAdd);\n }\n\n /**\n * Sets the user theme preference and updates toggles and theme classes.\n * @param option The selected theme option\n */\n toggleUserPreference(option: ThemeOption) {\n this.currentOption = option;\n this.Theme = option;\n this.lightToggle = option === ThemeOption.LIGHT;\n this.darkToggle = option === ThemeOption.DARK;\n this.autoToggle = option === ThemeOption.AUTO;\n\n switch (option) {\n case ThemeOption.LIGHT:\n this.handleLightPreference();\n break;\n case ThemeOption.DARK:\n this.handleDarkPreference();\n break;\n case ThemeOption.AUTO:\n if (this.prefersDark) {\n this.handleDarkPreference();\n } else {\n this.handleLightPreference();\n }\n break;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { LayeredCardMetadata } from './types';\n\n@Component({\n selector: 'layered-card',\n standalone: true,\n imports: [CommonModule, ButtonGroupComponent, TitleBlockComponent],\n template: `\n <div\n class=\"fun-card\"\n [class.big-space]=\"props.bigSpace\"\n [class.hoverable]=\"props.hoverable\"\n [class.layered]=\"props.mode === 'layered'\"\n [class.poster]=\"props.mode === 'poster'\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : color(props.background),\n minHeight: props.withMin ? '340px' : 'auto',\n }\"\n >\n @if (props.mode === 'poster') {\n <img\n class=\"poster-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n @if (props.mode === 'layered') {\n <img\n class=\"layer-image\"\n [class.dark]=\"props.dark\"\n [class.with-opacity]=\"props.withOpacity\"\n alt=\"image\"\n [src]=\"props.image\"\n />\n }\n\n <section>\n <val-title-block [props]=\"props.content\" />\n @if (props.actions) {\n <val-button-group style=\"display:block; margin-top: 16px;\" [props]=\"props.actions\" />\n }\n </section>\n </div>\n `,\n styleUrl: './layered-card.component.scss',\n})\nexport class LayeredCardComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: LayeredCardMetadata;\n\n color(background) {\n if (!background) {\n return '';\n }\n return resolveColor(background);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { LinkCakeMetadata } from './types';\n\n@Component({\n selector: 'val-links-cake',\n standalone: true,\n imports: [CommonModule, TitleComponent, HrefComponent],\n template: `\n <div>\n @if (props.title) {\n <div class=\"title\">\n <val-title [props]=\"{ content: props.title, color: 'dark', bold: false, size: props.size }\"></val-title>\n </div>\n }\n <div class=\"link\" *ngFor=\"let l of props.links\">\n <val-href [props]=\"l\"></val-href>\n </div>\n </div>\n `,\n styleUrls: ['./links-cake.component.scss'],\n})\n/**\n * val-links-cake\n *\n * Displays a list of links with an optional title, styled as a \"cake\" of links.\n *\n * @example\n * <val-links-cake [props]=\"{ title: 'Links', links: [...], size: 'medium' }\"></val-links-cake>\n *\n * @input props: LinkCakeMetadata - Configuration for the links cake (title, links, size)\n */\nexport class LinksCakeComponent implements OnInit {\n /**\n * Links cake configuration object.\n * @type {LinkCakeMetadata}\n * @property title - The title for the links section (optional).\n * @property links - Array of link configurations.\n * @property size - The size of the title and links.\n */\n @Input()\n props: LinkCakeMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","/**\n * Removes diacritical marks (accents) from a string using Unicode normalization.\n * Useful for text search and comparison.\n *\n * @param text The input string\n * @returns The normalized string without diacritical marks\n *\n * @example\n * replaceSpecialChars('canción') // returns 'cancion'\n */\nexport const replaceSpecialChars = (text: string) =>\n text.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IonSearchbar } from '@ionic/angular/standalone';\n\n@Component({\n selector: 'val-searchbar',\n standalone: true,\n imports: [IonSearchbar],\n template: `\n <ion-searchbar\n mode=\"ios\"\n debounce=\"500\"\n placeholder=\"Búsqueda\"\n [disabled]=\"disabled\"\n showCancelButton=\"focus\"\n cancelButtonText=\"Cancelar\"\n (ionInput)=\"onSearch($event)\"\n (ionBlur)=\"onBlur()\"\n (ionFocus)=\"onFocus()\"\n >\n </ion-searchbar>\n `,\n styleUrls: ['./searchbar.component.scss'],\n})\n/**\n * val-searchbar\n *\n * A search bar component with debounce and event emitters for filtering, focus, and blur.\n *\n * @example\n * <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\"></val-searchbar>\n *\n * @input disabled - Whether the searchbar is disabled.\n * @output filterEvent - Emits the search term on input.\n * @output focusEvent - Emits when the searchbar gains focus.\n * @output blurEvent - Emits when the searchbar loses focus.\n */\nexport class SearchbarComponent {\n /**\n * Whether the searchbar is disabled.\n */\n @Input() disabled: boolean;\n\n /**\n * Emits the search term on input.\n */\n @Output() filterEvent = new EventEmitter<string>();\n\n /**\n * Emits when the searchbar gains focus.\n */\n @Output() focusEvent = new EventEmitter<void>();\n\n /**\n * Emits when the searchbar loses focus.\n */\n @Output() blurEvent = new EventEmitter<void>();\n\n constructor() {}\n\n onSearch($event: any) {\n const searchTerm = $event.detail.value;\n this.filterEvent.emit(searchTerm);\n }\n\n onFocus() {\n this.focusEvent.emit();\n }\n\n onBlur() {\n this.blurEvent.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule, IonModal } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { IconService } from '../../../services/icons.service';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\nimport { SearchbarComponent } from '../searchbar/searchbar.component';\n\n@Component({\n selector: 'val-multi-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, SearchbarComponent, ReactiveFormsModule],\n template: `\n <ion-input\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n (mousedown)=\"preventDefaultBehavior($event)\"\n />\n\n <ion-input style=\"position: absolute;\" [formControl]=\"props.control\" type=\"hidden\"></ion-input>\n\n <ion-modal\n #modal\n [initialBreakpoint]=\"1\"\n [breakpoints]=\"[0, 0.5, 0.75, 1]\"\n (didDismiss)=\"cancelModal()\"\n >\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-title>{{ label }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancelModal()\">Cerrar</ion-button>\n </ion-buttons>\n </ion-toolbar>\n <ion-toolbar>\n <val-searchbar (filterEvent)=\"onFilter($event)\" (focusEvent)=\"onFocus()\" (blurEvent)=\"onBlur()\" />\n </ion-toolbar>\n </ion-header>\n <ion-content>\n <ion-item *ngIf=\"tempSelectedItems.length > 0\" lines=\"none\" color=\"light\">\n <ion-icon name=\"checkmark-circle-outline\" slot=\"start\" color=\"success\"></ion-icon>\n <ion-label>\n <h3>{{ tempSelectedItems.length }} item{{ tempSelectedItems.length === 1 ? '' : 's' }} seleccionado{{ tempSelectedItems.length === 1 ? '' : 's' }}</h3>\n </ion-label>\n </ion-item>\n <ion-list>\n <ion-item *ngFor=\"let item of filteredItems\" button (click)=\"selectItem(item)\" detail=\"false\">\n <ion-checkbox \n [checked]=\"isItemSelected(item)\" \n slot=\"start\"\n [disabled]=\"true\"\n ></ion-checkbox>\n <ion-label>{{ item[labelProperty] }}</ion-label>\n </ion-item>\n <ion-item *ngIf=\"filteredItems.length === 0\" lines=\"none\">\n <ion-label color=\"dark\">No se encontraron resultados</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>\n <ion-footer *ngIf=\"tempSelectedItems.length > 0\">\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"clearSelection()\">Limpiar</ion-button>\n <ion-button fill=\"solid\" (click)=\"applySelection()\">Aplicar ({{ tempSelectedItems.length }})</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ng-template>\n </ion-modal>\n `,\n styles: [\n `\n ion-header {\n padding: 8px 8px 0px 8px;\n }\n `,\n ],\n})\nexport class MultiSelectSearchComponent implements OnChanges, OnDestroy {\n @ViewChild('modal') modal!: IonModal;\n\n @Input() label: string;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string;\n @Input() props: InputMetadata;\n\n private langService = inject(LangService);\n icon = inject(IconService);\n private changeDetector = inject(ChangeDetectorRef);\n\n searchTerm: string = '';\n filteredItems: InputOption[] = [];\n selectedItems: InputOption[] = [];\n tempSelectedItems: InputOption[] = [];\n displayValue: string = '';\n\n private previousOptions: any[] = [];\n private isProcessingChanges = false;\n private valueChangesSubscription?: Subscription;\n\n constructor() {\n this.label = this.langService.getText('_global', 'selectMultiple', 'Seleccionar múltiples');\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n }\n\n ngOnDestroy() {\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n if (changes['props']) {\n try {\n this.isProcessingChanges = true;\n\n if (this.valueChangesSubscription) {\n this.valueChangesSubscription.unsubscribe();\n }\n\n if (this.props?.options) {\n const optionsChanged = !this.areOptionsEqual(this.previousOptions, this.props.options);\n\n if (optionsChanged) {\n this.previousOptions = [...this.props.options];\n this.initializeItems();\n }\n }\n\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n }\n\n ionViewWillEnter(): void {\n if (this.isProcessingChanges) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n this.initializeItems();\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n this.subscribeToValueChanges();\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n private subscribeToValueChanges() {\n if (!this.props?.control) return;\n\n this.valueChangesSubscription = this.props.control.valueChanges.subscribe(() => {\n if (this.isProcessingChanges) return;\n\n try {\n this.isProcessingChanges = true;\n this.syncControlValueWithSelectedItems();\n this.updateDisplayValue();\n } finally {\n this.isProcessingChanges = false;\n }\n });\n }\n\n private areOptionsEqual(prevOptions: any[], newOptions: any[]): boolean {\n if (prevOptions === newOptions) return true;\n if (!prevOptions || !newOptions) return prevOptions === newOptions;\n if (prevOptions.length !== newOptions.length) return false;\n \n for (let i = 0; i < prevOptions.length; i++) {\n if (prevOptions[i][this.valueProperty] !== newOptions[i][this.valueProperty]) {\n return false;\n }\n }\n return true;\n }\n\n private initializeItems(): void {\n this.filteredItems = this.props?.options || [];\n }\n\n private syncControlValueWithSelectedItems(): void {\n if (!this.props?.control) {\n this.selectedItems = [];\n return;\n }\n\n const controlValue = this.props.control.value;\n if (!controlValue || controlValue === '') {\n this.selectedItems = [];\n return;\n }\n\n // Handle both array and string formats\n let valueArray: string[] = [];\n if (Array.isArray(controlValue)) {\n valueArray = controlValue;\n } else if (typeof controlValue === 'string') {\n valueArray = controlValue.split(',').filter(v => v.trim() !== '');\n }\n\n if (this.props.options && this.props.options.length > 0) {\n const map = new Map(this.props.options.map(opt => [opt[this.valueProperty], opt]));\n this.selectedItems = valueArray\n .map(value => map.get(value.toString().trim()))\n .filter(item => item !== undefined);\n } else {\n this.selectedItems = [];\n }\n }\n\n private applyDefaultValue(): void {\n applyDefaultValueToControl(this.props);\n }\n\n onFilter(event: any) {\n if (!event || event.trim() === '') {\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n return;\n }\n\n if (!this.props?.options || this.props.options.length === 0) {\n this.filteredItems = [];\n this.changeDetector.detectChanges();\n return;\n }\n\n const search = replaceSpecialChars(event.toLowerCase());\n this.filteredItems = this.props.options.filter(element => {\n const label = element[this.labelProperty]\n ? replaceSpecialChars(String(element[this.labelProperty]).toLowerCase())\n : '';\n const value = element[this.valueProperty]\n ? replaceSpecialChars(String(element[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n this.changeDetector.detectChanges();\n }\n\n onFocus() {\n console.log('onFocus');\n }\n\n onBlur() {\n console.log('onBlur');\n }\n\n openModal() {\n this.syncControlValueWithSelectedItems();\n this.tempSelectedItems = [...this.selectedItems];\n this.updateDisplayValue();\n if (this.modal) {\n this.modal.present();\n }\n }\n\n preventDefaultBehavior(event: MouseEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.openModal();\n }\n\n cancelModal() {\n // Reset filter and show all options when closing modal\n this.searchTerm = '';\n this.filteredItems = this.props?.options ? [...this.props.options] : [];\n this.changeDetector.detectChanges();\n if (this.modal) {\n this.modal.dismiss();\n }\n }\n\n selectItem(item: any) {\n const index = this.tempSelectedItems.findIndex(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n\n if (index === -1) {\n this.tempSelectedItems.push(item);\n } else {\n this.tempSelectedItems.splice(index, 1);\n }\n }\n\n isItemSelected(item: any): boolean {\n return this.tempSelectedItems.some(\n selectedItem => selectedItem[this.valueProperty] === item[this.valueProperty]\n );\n }\n\n clearSelection() {\n this.tempSelectedItems = [];\n }\n\n applySelection() {\n this.selectedItems = [...this.tempSelectedItems];\n this.updateDisplayValue();\n this.applyChanges();\n this.cancelModal();\n }\n\n updateDisplayValue() {\n if (this.selectedItems.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedItems.length === 1) {\n this.displayValue = this.selectedItems[0][this.labelProperty];\n } else {\n this.displayValue = `${this.selectedItems.length} elementos seleccionados`;\n }\n }\n\n applyChanges() {\n if (!this.props?.control) {\n return;\n }\n\n try {\n this.isProcessingChanges = true;\n\n const values = this.selectedItems.map(item => item[this.valueProperty]);\n const stringValue = values.join(',');\n this.props.control.setValue(stringValue);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n this.props.control.updateValueAndValidity();\n \n // Debug validators if still having issues\n if (this.props.control.invalid) {\n console.warn('Control is invalid after setValue:', {\n value: this.props.control.value,\n errors: this.props.control.errors,\n validators: this.props.control.validator\n });\n }\n } finally {\n this.isProcessingChanges = false;\n }\n }\n\n reset() {\n this.selectedItems = [];\n this.displayValue = '';\n if (this.props?.control) {\n this.props.control.setValue('');\n }\n this.changeDetector.detectChanges();\n }\n}","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n inject,\n Input,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\n\n@Component({\n selector: 'val-multi-select-simple',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectSimpleComponent),\n multi: true\n }\n ],\n template: `\n <div class=\"multi-select-container\" (click)=\"toggleDropdown($event)\">\n <!-- Main input display -->\n <ion-input\n #mainInput\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n class=\"main-input\"\n [class.is-open]=\"isOpen\"\n />\n \n <!-- Dropdown icon -->\n <ion-icon \n name=\"chevron-down-outline\" \n class=\"dropdown-icon\" \n [class.rotated]=\"isOpen\"\n ></ion-icon>\n \n <!-- Hidden input for form control -->\n <ion-input \n style=\"position: absolute; opacity: 0; pointer-events: none;\" \n [formControl]=\"props?.control\" \n type=\"hidden\"\n />\n </div>\n\n <!-- Dropdown overlay -->\n <div \n class=\"dropdown-overlay\" \n [class.visible]=\"isOpen\"\n #dropdown\n >\n <!-- Search bar -->\n <div class=\"search-container\">\n <ion-searchbar\n #searchbar\n [placeholder]=\"searchPlaceholder\"\n (ionInput)=\"onSearch($event)\"\n [value]=\"searchTerm\"\n show-clear-button=\"focus\"\n ></ion-searchbar>\n </div>\n \n <!-- Action buttons -->\n <div class=\"actions-container\">\n <ion-button \n fill=\"clear\" \n size=\"small\" \n (click)=\"selectAll()\"\n [disabled]=\"filteredOptions.length === 0\"\n >\n Seleccionar todos\n </ion-button>\n <ion-button \n fill=\"clear\" \n size=\"small\" \n color=\"medium\" \n (click)=\"clearAll()\"\n [disabled]=\"selectedValues.length === 0\"\n >\n Limpiar\n </ion-button>\n </div>\n \n <!-- Options list -->\n <div class=\"options-container\">\n <ion-list class=\"options-list\">\n <ion-item \n *ngFor=\"let option of filteredOptions; trackBy: trackByFn\" \n button \n (click)=\"toggleOption(option)\"\n class=\"option-item\"\n >\n <ion-checkbox\n slot=\"start\"\n [checked]=\"isSelected(option)\"\n ></ion-checkbox>\n <ion-label>{{ option[labelProperty] }}</ion-label>\n </ion-item>\n \n <!-- No results message -->\n <ion-item *ngIf=\"filteredOptions.length === 0\" class=\"no-results\">\n <ion-label color=\"medium\">\n {{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </div>\n `,\n styleUrls: ['./multi-select-simple.component.scss']\n})\nexport class MultiSelectSimpleComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n @ViewChild('dropdown') dropdownRef!: ElementRef;\n @ViewChild('mainInput') mainInputRef!: ElementRef;\n\n @Input() props!: InputMetadata;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string = '';\n\n private langService = inject(LangService);\n private changeDetector = inject(ChangeDetectorRef);\n \n // Classic Angular properties\n isOpen = false;\n searchTerm = '';\n selectedValues: string[] = [];\n displayValue = '';\n filteredOptions: InputOption[] = [];\n searchPlaceholder: string = '';\n\n // ControlValueAccessor\n private onChange = (_value: any) => {};\n private onTouched = () => {};\n\n constructor() {\n this.placeholder = this.langService.getText('_global', 'selectOptions', 'Seleccione opciones');\n this.searchPlaceholder = this.langService.getText('_global', 'search', 'Buscar');\n \n // Close dropdown when clicking outside\n document.addEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeOptions();\n this.syncSelectedValues();\n this.updateDisplayValue();\n }\n\n ngOnDestroy() {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props'] && this.props) {\n this.initializeOptions();\n this.syncSelectedValues();\n this.updateDisplayValue();\n this.changeDetector.detectChanges();\n }\n }\n\n // ControlValueAccessor implementation\n writeValue(value: any): void {\n const valueArray = this.parseValue(value);\n this.selectedValues = valueArray;\n this.updateDisplayValue();\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(_isDisabled: boolean): void {\n // Handle disabled state if needed\n }\n\n // Component methods\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n \n if (this.isOpen) {\n this.onTouched();\n // Focus search bar when opening\n setTimeout(() => {\n const searchbar = this.dropdownRef?.nativeElement?.querySelector('ion-searchbar');\n if (searchbar) {\n searchbar.setFocus();\n }\n }, 100);\n }\n }\n\n onSearch(event: any): void {\n this.searchTerm = event.detail.value || '';\n this.filterOptions();\n }\n\n toggleOption(option: InputOption): void {\n const value = String(option[this.valueProperty]);\n \n if (this.isSelected(option)) {\n // Remove from selection\n this.selectedValues = this.selectedValues.filter(v => v !== value);\n } else {\n // Add to selection\n this.selectedValues = [...this.selectedValues, value];\n }\n \n this.updateDisplayValue();\n this.emitValue();\n }\n\n selectAll(): void {\n const allValues = this.filteredOptions.map(option => String(option[this.valueProperty]));\n \n // Add only new values to avoid duplicates\n const newValues = allValues.filter(value => !this.selectedValues.includes(value));\n this.selectedValues = [...this.selectedValues, ...newValues];\n \n this.updateDisplayValue();\n this.emitValue();\n }\n\n clearAll(): void {\n this.selectedValues = [];\n this.updateDisplayValue();\n this.emitValue();\n }\n\n isSelected(option: InputOption): boolean {\n return this.selectedValues.includes(String(option[this.valueProperty]));\n }\n\n trackByFn(_index: number, option: InputOption): any {\n return option[this.valueProperty];\n }\n\n private handleClickOutside(event: Event): void {\n if (this.isOpen && \n !this.mainInputRef?.nativeElement?.contains(event.target) &&\n !this.dropdownRef?.nativeElement?.contains(event.target)) {\n this.isOpen = false;\n this.searchTerm = '';\n this.initializeOptions();\n }\n }\n\n private parseValue(value: any): string[] {\n if (!value) return [];\n if (Array.isArray(value)) return value.map(v => String(v));\n if (typeof value === 'string') {\n return value.split(',').map(v => v.trim()).filter(v => v !== '');\n }\n return [String(value)];\n }\n\n private emitValue(): void {\n const value = this.selectedValues.join(',');\n this.onChange(value);\n \n if (this.props?.control) {\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n }\n }\n\n private getOptionByValue(value: string): InputOption | undefined {\n return this.filteredOptions.find(option => \n String(option[this.valueProperty]) === String(value)\n );\n }\n\n private applyDefaultValue(): void {\n if (this.props) {\n applyDefaultValueToControl(this.props);\n }\n }\n\n private initializeOptions(): void {\n this.filteredOptions = this.props?.options || [];\n }\n \n private filterOptions(): void {\n if (!this.searchTerm) {\n this.initializeOptions();\n return;\n }\n \n const search = replaceSpecialChars(this.searchTerm.toLowerCase());\n this.filteredOptions = (this.props?.options || []).filter(option => {\n const label = option[this.labelProperty]\n ? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())\n : '';\n const value = option[this.valueProperty]\n ? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n }\n \n private updateDisplayValue(): void {\n if (this.selectedValues.length === 0) {\n this.displayValue = '';\n return;\n }\n\n if (this.selectedValues.length === 1) {\n const option = this.getOptionByValue(this.selectedValues[0]);\n this.displayValue = option ? option[this.labelProperty] : '';\n } else {\n this.displayValue = `${this.selectedValues.length} elementos seleccionados`;\n }\n }\n\n private syncSelectedValues(): void {\n if (this.props?.control?.value) {\n const valueArray = this.parseValue(this.props.control.value);\n this.selectedValues = valueArray;\n }\n }\n}","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { NotesBoxMetadata } from './types';\n\n@Component({\n selector: 'val-notes-box',\n standalone: true,\n imports: [CommonModule, BoxComponent, TextComponent],\n template: `\n <val-box\n [props]=\"{\n icon: '',\n bordered: false,\n color: props.color,\n leftBorder: true,\n rounded: props.rounded,\n padding: props.padding,\n }\"\n >\n <div [ngClass]=\"['content-container', props.size]\" body>\n @if (props.prefix) {\n <val-text\n [props]=\"{ content: props.prefix, color: props.textColor, bold: true, size: props.size }\"\n ></val-text>\n }\n <val-text [props]=\"{ content: props.text, color: props.textColor, bold: false, size: props.size }\"></val-text>\n </div>\n </val-box>\n `,\n styleUrls: ['./notes-box.component.scss'],\n})\n/**\n * val-notes-box\n *\n * Displays a styled notes/info box with optional prefix and configurable color, size, and padding.\n *\n * @example\n * <val-notes-box [props]=\"{ text: 'Note', prefix: 'Info', color: 'primary', textColor: 'dark', size: 'medium', rounded: true, padding: '8px' }\"></val-notes-box>\n *\n * @input props: NotesBoxMetadata - Configuration for the notes box (text, prefix, color, textColor, size, rounded, padding)\n */\nexport class NotesBoxComponent implements OnInit {\n /**\n * Notes box configuration object.\n * @type {NotesBoxMetadata}\n * @property text - The main text content.\n * @property prefix - Optional prefix text (bold).\n * @property color - The background color of the box.\n * @property textColor - The color of the text.\n * @property size - The size of the text and box.\n * @property rounded - Whether the box has rounded corners.\n * @property padding - Custom padding for the box.\n */\n @Input()\n props: NotesBoxMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { IonInput, IonLabel } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-from-to',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonLabel],\n template: `\n <div class=\"number-from-to-container\">\n <ion-label position=\"stacked\">{{ props.fromLabel || 'Inicial' }}</ion-label>\n <ion-input\n [formControl]=\"fromControl\"\n type=\"number\"\n [placeholder]=\"props.fromPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n\n <ion-label position=\"stacked\">{{ props.toLabel || 'Final' }}</ion-label>\n <ion-input\n [formControl]=\"toControl\"\n type=\"number\"\n [placeholder]=\"props.toPlaceholder || props.placeholder\"\n [min]=\"props.range?.min\"\n [max]=\"props.range?.max\"\n >\n </ion-input>\n </div>\n `,\n styleUrls: ['./number-from-to.component.scss'],\n})\nexport class NumberFromToComponent implements OnInit {\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values if configured\n if (this.props?.withDefault || this.props?.value) {\n this.applyDefaultValues();\n }\n }\n\n private applyDefaultValues() {\n const defaultValue = this.resolveDefaultValue();\n if (defaultValue !== null) {\n if (typeof defaultValue === 'object' && defaultValue.from !== undefined) {\n this.fromControl?.setValue(defaultValue.from);\n this.toControl?.setValue(defaultValue.to);\n } else {\n // Si es un valor simple, aplicarlo a ambos controles\n this.fromControl?.setValue(defaultValue);\n this.toControl?.setValue(defaultValue);\n }\n this.fromControl?.markAsPristine();\n this.toControl?.markAsPristine();\n this.fromControl?.updateValueAndValidity();\n this.toControl?.updateValueAndValidity();\n }\n }\n\n private resolveDefaultValue(): any {\n // Explicit value takes precedence\n if (this.props.value !== undefined && this.props.value !== null && this.props.value !== '') {\n return this.parseValue(this.props.value);\n }\n\n // No default configuration\n if (!this.props.withDefault) {\n return null;\n }\n\n // Custom default value\n if (typeof this.props.withDefault === 'string') {\n return this.parseValue(this.props.withDefault);\n }\n\n // Auto default value (withDefault === true)\n return { from: 0, to: 0 };\n }\n\n private parseValue(value: string): any {\n try {\n // Try to parse as JSON first (for object values)\n return JSON.parse(value);\n } catch {\n // If not JSON, treat as number\n const numValue = parseFloat(value) || 0;\n return { from: numValue, to: numValue };\n }\n }\n\n get fromControl(): FormControl {\n return this.props.fromControl;\n }\n\n get toControl(): FormControl {\n return this.props.toControl;\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-number-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"number\" [placeholder]=\"props.placeholder\"></ion-input> `,\n styleUrls: ['./number-input.component.scss'],\n})\n/**\n * val-number-input\n *\n * A number input field integrated with Angular forms.\n *\n * @example\n * <val-number-input [props]=\"{ control: myControl, placeholder: 'Enter a number' }\"></val-number-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class NumberInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonButton, IonIcon, IonInput } from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-password-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput, IonButton, IonIcon],\n template: `\n <div class=\"input-container\">\n <ion-input\n class=\"sign-in__input-password\"\n [formControl]=\"props.control\"\n [type]=\"hidePassword ? 'password' : 'text'\"\n [placeholder]=\"props.placeholder\"\n ></ion-input>\n <ion-button color=\"dark\" fill=\"clear\" (click)=\"hidePassword = !hidePassword\" size=\"small\">\n <ion-icon slot=\"icon-only\" [name]=\"hidePassword ? 'eye-off-outline' : 'eye-outline'\"></ion-icon>\n </ion-button>\n </div>\n `,\n styleUrls: ['./password-input.component.scss'],\n})\n/**\n * val-password-input\n *\n * A password input field with show/hide toggle, integrated with Angular forms.\n *\n * @example\n * <val-password-input [props]=\"{ control: myControl, placeholder: 'Enter password' }\"></val-password-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)\n */\nexport class PasswordInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n hidePassword = true;\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { ThemeService } from '../../../services/theme.service';\nimport { ActionHeaderComponent } from '../action-header/action-header.component';\nimport { PillMetadata } from './types';\n\n@Component({\n selector: 'val-pill',\n standalone: true,\n imports: [CommonModule, ActionHeaderComponent],\n template: `\n <div\n [id]=\"props.token\"\n class=\"fun-card\"\n [class.bordered]=\"props.bordered\"\n [class.hoverable]=\"props.hoverable\"\n [ngStyle]=\"{\n background: theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n >\n <val-action-header style=\"width: 100%;\" [props]=\"props.content\" />\n </div>\n `,\n styleUrls: ['./pill.component.scss'],\n})\nexport class PillComponent {\n theme = inject(ThemeService);\n\n @Input()\n props: PillMetadata;\n}\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { NgOtpInputComponent, NgOtpInputConfig, NgOtpInputModule } from 'ng-otp-input';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-pin-input',\n standalone: true,\n imports: [NgOtpInputModule],\n template: `\n <div class=\"otp\">\n <ng-otp-input [formCtrl]=\"props.control\" [config]=\"otpInputConfig\"></ng-otp-input>\n </div>\n `,\n styleUrls: ['./pin-input.component.scss'],\n})\n/**\n * val-pin-input\n *\n * A PIN code input using ng-otp-input, integrated with Angular forms.\n *\n * @example\n * <val-pin-input [props]=\"{ control: myControl }\"></val-pin-input>\n *\n * @input props: InputMetadata - Configuration for the PIN input (form control, etc.)\n */\nexport class PinInputComponent implements OnInit {\n @ViewChild(NgOtpInputComponent, { static: false }) pinCode: NgOtpInputComponent | undefined;\n\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the PIN input.\n */\n @Input() props: InputMetadata;\n\n codeLength = 5;\n otpInputConfig: NgOtpInputConfig = {\n inputStyles: {\n 'font-size': '32px',\n width: '58px',\n height: '60px',\n },\n inputClass: 'otp-input-box',\n length: this.codeLength,\n allowNumbersOnly: true,\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n reset() {\n if (this.pinCode) {\n this.pinCode.setValue('');\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { Clipboard } from '@capacitor/clipboard';\nimport { ToastController } from '@ionic/angular';\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\n\nimport * as Prism from 'prismjs';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-javascript';\nimport 'prismjs/components/prism-markup';\nimport 'prismjs/components/prism-typescript';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { PlainCodeBoxMetadata } from './types';\n\n@Component({\n selector: 'val-plain-code-box',\n standalone: true,\n imports: [CommonModule, IonIcon, IonButton],\n template: `\n <div class=\"code-box-container\">\n <ion-button *ngIf=\"props.showCopyButton !== false\" fill=\"clear\" class=\"copy-button\" (click)=\"copyCode()\">\n <ion-icon name=\"copy-outline\"></ion-icon>\n </ion-button>\n <pre><code [class]=\"'language-' + (props.language || 'bash')\" #codeBlock><ng-container *ngFor=\"let line of props.lines; let i = index\"><span [class]=\"line.type ? 'line-' + line.type : 'line-normal'\">{{ line.text }}</span><br *ngIf=\"i < props.lines.length - 1\">\n</ng-container></code></pre>\n </div>\n `,\n styleUrls: ['./plain-code-box.component.scss'],\n})\nexport class PlainCodeBoxComponent implements AfterViewInit, OnChanges {\n toast = inject(ToastController);\n cdr = inject(ChangeDetectorRef);\n langService = inject(LangService);\n\n @Input() props: PlainCodeBoxMetadata = { lines: [] };\n\n @ViewChild('codeBlock') codeBlock!: ElementRef<HTMLElement>;\n\n constructor() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props'] && !changes['props'].firstChange) {\n this.cdr.detectChanges();\n setTimeout(() => this.highlightCode());\n }\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.highlightCode());\n }\n\n private highlightCode() {\n if (this.codeBlock && this.props.lines && this.props.lines.length > 0) {\n Prism.highlightElement(this.codeBlock.nativeElement);\n }\n }\n\n async copyCode() {\n const fullCode = this.props.lines.map(line => line.text).join('\\n');\n if (fullCode) {\n await Clipboard.write({\n string: fullCode,\n });\n const copiedMessage = this.langService.getText('_global', 'copied', '¡Copiado al portapapeles!');\n this.presentToast(copiedMessage);\n }\n }\n\n async presentToast(message: string) {\n const toast = await this.toast.create({\n message: message,\n duration: 2000,\n position: 'bottom',\n color: 'dark',\n });\n toast.present();\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ProgressBarComponent } from '../../atoms/progress-bar/progress-bar.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleBlockComponent } from '../title-block/title-block.component';\nimport { ProgressStatusMetadata } from './types';\n\n//TODO: support automatic or manual interval for messages. Include the interval number as a parameter.\n@Component({\n selector: 'val-progress-status',\n standalone: true,\n imports: [TitleBlockComponent, ProgressBarComponent, TextComponent],\n template: `\n <div class=\"status-container\">\n <div class=\"title-container\">\n <val-title-block\n [props]=\"{\n position: 'center',\n aboveTitle: props.titles.aboveTitle,\n title: props.titles.title,\n bellowTitle: props.titles.bellowTitle,\n }\"\n ></val-title-block>\n </div>\n <div class=\"progress-bar-container\">\n <val-progress-bar\n [props]=\"{\n progress: props.progress,\n size: 'xlarge',\n color: props.color,\n rounded: true,\n type: 'determinate',\n buffer: 1,\n }\"\n ></val-progress-bar>\n </div>\n <div class=\"subtitle-container\">\n <div class=\"subtitle\" [class.blink]=\"blinking\">\n <val-text [props]=\"{ content: Content, color: 'medium', bold: false, size: props.size }\"></val-text>\n </div>\n </div>\n </div>\n `,\n styleUrls: ['./progress-status.component.scss'],\n})\n/**\n * val-progress-status\n *\n * Displays a progress bar with status messages and titles, useful for multi-step or loading processes.\n *\n * @example\n * <val-progress-status [props]=\"{ progress: 0.5, color: 'primary', size: 'medium', titles: {...}, messages: [...] }\"></val-progress-status>\n *\n * @input props: ProgressStatusMetadata - Configuration for the progress status (progress, color, size, titles, messages)\n */\nexport class ProgressStatusComponent implements OnInit {\n /**\n * Progress status configuration object.\n * @type {ProgressStatusMetadata}\n * @property progress - The progress value (0 to 1).\n * @property color - The color of the progress bar.\n * @property size - The size of the text and bar.\n * @property titles - Title block configuration.\n * @property messages - Array of status messages.\n */\n @Input()\n props: ProgressStatusMetadata;\n\n currentIndex = 0;\n blinking = false;\n\n constructor() {}\n\n ngOnInit() {\n setInterval(() => {\n this.blinking = !this.blinking;\n }, 1000);\n\n setInterval(() => {\n this.getNextMessage();\n }, 9000);\n }\n\n get Content(): string {\n return this.props.messages[this.currentIndex];\n }\n\n getNextMessage(): void {\n this.currentIndex = (this.currentIndex + 1) % this.props.messages.length;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { HrefComponent } from '../../atoms/href/href.component';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { ButtonGroupComponent } from '../button-group/button-group.component';\nimport { PrompterMetadata } from './types';\n\n@Component({\n selector: 'val-prompter',\n standalone: true,\n imports: [CommonModule, BoxComponent, ButtonGroupComponent, TextComponent, HrefComponent],\n template: `\n <val-box\n class=\"teleprompter-container\"\n [props]=\"{ icon: '', bordered: props.bordered, color: props.color, leftBorder: false, padding: props.padding }\"\n (onClick)=\"clickHandler()\"\n >\n <div class=\"container\" [class.teleprompter-content]=\"props.teleprompter\" body>\n <div>\n <val-text\n [props]=\"{\n content: props.content,\n color: '',\n bold: true,\n size: props.size,\n }\"\n ></val-text>\n </div>\n @if (props.buttons || props.hrefs) {\n <div class=\"actions-container\">\n <val-button-group\n class=\"buttons-container\"\n [props]=\"{ buttons: props.buttons, position: 'right', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n <val-href\n class=\"link\"\n *ngFor=\"let l of props.hrefs\"\n [props]=\"l\"\n (onClick)=\"clickHandler($event)\"\n ></val-href>\n </div>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./prompter.component.scss'],\n})\n/**\n * val-prompter\n *\n * Displays a prompt/info box with text, actions (buttons/links), and custom styles.\n *\n * @example\n * <val-prompter [props]=\"{ content: 'Message', buttons: [...], hrefs: [...], color: 'primary', size: 'medium' }\"></val-prompter>\n *\n * @input props: PrompterMetadata - Configuration for the prompter (content, buttons, hrefs, color, size, etc.)\n * @output onClick - Emits when an action is clicked\n */\nexport class PrompterComponent implements OnInit {\n /**\n * Prompter configuration object.\n * @type {PrompterMetadata}\n * @property content - The main text content.\n * @property buttons - Array of button configurations (optional).\n * @property hrefs - Array of link configurations (optional).\n * @property color - The background color of the box.\n * @property size - The size of the text and box.\n * @property bordered - Whether the box has a border.\n * @property padding - Custom padding for the box.\n * @property teleprompter - Whether to use teleprompter style (optional).\n */\n @Input()\n props: PrompterMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgFor } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-radio-input',\n standalone: true,\n imports: [NgFor, ReactiveFormsModule, IonRadioGroup, IonRadio],\n template: `\n <ion-radio-group [allowEmptySelection]=\"true\" [formControl]=\"props.control\">\n <ng-container *ngFor=\"let o of props.options\">\n <ion-radio [value]=\"o.id\">{{ o.name }}</ion-radio>\n <br />\n </ng-container>\n </ion-radio-group>\n `,\n styleUrls: ['./radio-input.component.scss'],\n})\n/**\n * val-radio-input\n *\n * A radio group input for selecting one option, integrated with Angular forms.\n *\n * @example\n * <val-radio-input [props]=\"{ control: myControl, options: [{ id: '1', name: 'Option 1' }] }\"></val-radio-input>\n *\n * @input props: InputMetadata - Configuration for the radio input (form control, options, etc.)\n */\nexport class RadioInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the radio input.\n * @property options - The available options for the radio group.\n */\n @Input() props: InputMetadata;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { IonSelect, IonSelectOption } from '@ionic/angular/standalone';\nimport { InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-select-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonSelect, IonSelectOption],\n template: `\n <ion-select\n [formControl]=\"props.control\"\n [label]=\"props.label\"\n [interfaceOptions]=\"customModalOptions\"\n interface=\"modal\"\n [placeholder]=\"[props.placeholder]\"\n cancelText=\"Cancelar\"\n okText=\"Ok\"\n >\n @for (o of props.options; track o.id) {\n <ion-select-option [value]=\"o.id\">{{ o.name }}</ion-select-option>\n }\n </ion-select>\n `,\n styleUrls: ['./select-input.component.scss'],\n})\n/**\n * val-select-input\n *\n * A select/dropdown input integrated with Angular forms, using Ionic's select component.\n *\n * @example\n * <val-select-input [props]=\"{ control: myControl, label: 'Choose', options: [{ id: '1', name: 'Option 1' }] }\"></val-select-input>\n *\n * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)\n */\nexport class SearchSelectorComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the select input.\n * @property label - The label for the select.\n * @property options - The available options for the select.\n * @property placeholder - The placeholder text.\n */\n @Input() props: InputMetadata;\n\n customModalOptions = {\n header: 'Seleccione',\n breakpoints: [0, 0.6],\n initialBreakpoint: 0.6,\n };\n\n constructor() {}\n\n ngOnInit() {\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n this.customModalOptions.header = this.props.label;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n inject,\n Input,\n OnInit,\n OnDestroy,\n OnChanges,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { replaceSpecialChars } from '../../../shared/utils/text';\nimport { InputMetadata, InputOption } from '../../types';\n\n@Component({\n selector: 'val-select-search',\n standalone: true,\n imports: [CommonModule, IonicModule, FormsModule, ReactiveFormsModule],\n template: `\n <div class=\"select-container\" (click)=\"toggleDropdown($event)\">\n <!-- Main input display -->\n <ion-input\n #mainInput\n type=\"text\"\n [value]=\"displayValue\"\n [placeholder]=\"props?.placeholder || placeholder\"\n readonly\n class=\"main-input\"\n [class.is-open]=\"isOpen\"\n />\n \n <!-- Dropdown icon -->\n <ion-icon \n name=\"chevron-down-outline\" \n class=\"dropdown-icon\" \n [class.rotated]=\"isOpen\"\n ></ion-icon>\n \n <!-- Hidden input for form control -->\n <ion-input \n style=\"position: absolute; opacity: 0; pointer-events: none;\" \n [formControl]=\"props?.control\" \n type=\"hidden\"\n />\n </div>\n\n <!-- Dropdown overlay -->\n <div \n class=\"dropdown-overlay\" \n [class.visible]=\"isOpen\"\n #dropdown\n >\n <!-- Debug button -->\n <div class=\"search-container\" style=\"background: red; color: white; padding: 4px;\">\n <button (click)=\"debugOptions()\">DEBUG: {{ filteredOptions.length }} opciones</button>\n </div>\n \n <!-- Search bar -->\n <div class=\"search-container\" *ngIf=\"props?.options && props.options.length > 5\">\n <ion-searchbar\n #searchbar\n [placeholder]=\"'Buscar'\"\n (ionInput)=\"onSearch($event)\"\n [value]=\"searchTerm\"\n show-clear-button=\"focus\"\n [debounce]=\"200\"\n ></ion-searchbar>\n </div>\n \n <!-- Options list -->\n <div class=\"options-container\">\n <ion-list class=\"options-list\">\n <ion-item \n *ngFor=\"let option of filteredOptions; trackBy: trackByFn\" \n button \n (click)=\"selectOption(option)\"\n class=\"option-item\"\n >\n <ion-label>{{ option[labelProperty] }}</ion-label>\n <ion-icon \n *ngIf=\"isSelected(option)\" \n name=\"checkmark-outline\" \n slot=\"end\" \n color=\"primary\"\n ></ion-icon>\n </ion-item>\n \n <!-- No results message -->\n <ion-item *ngIf=\"filteredOptions.length === 0\" class=\"no-results\">\n <ion-label color=\"medium\">\n {{ searchTerm ? 'No se encontraron resultados' : 'No hay opciones disponibles' }}\n <!-- Debug info -->\n <br><small>Debug: {{ filteredOptions.length }} opciones | Props: {{ !!props }} | Search: \"{{ searchTerm }}\"</small>\n </ion-label>\n </ion-item>\n </ion-list>\n </div>\n </div>\n `,\n styleUrls: ['./select-search.component.scss']\n})\nexport class SelectSearchComponent implements OnInit, OnDestroy, OnChanges {\n @ViewChild('dropdown') dropdownRef!: ElementRef;\n @ViewChild('mainInput') mainInputRef!: ElementRef;\n\n @Input() props!: InputMetadata;\n @Input() labelProperty: string = 'name';\n @Input() valueProperty: string = 'id';\n @Input() placeholder: string = '';\n\n private langService = inject(LangService);\n \n private changeDetector = inject(ChangeDetectorRef);\n \n // Classic Angular properties\n isOpen = false;\n searchTerm = '';\n selectedValue: string | null = null;\n displayValue = '';\n filteredOptions: InputOption[] = [];\n\n constructor() {\n this.placeholder = this.langService.getText('_global', 'selectOption', 'Seleccione una opción');\n \n // Close dropdown when clicking outside\n document.addEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnInit() {\n this.applyDefaultValue();\n this.initializeOptions();\n this.syncSelectedValue();\n this.updateDisplayValue();\n }\n\n ngOnDestroy() {\n document.removeEventListener('click', this.handleClickOutside.bind(this));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['props'] && this.props) {\n this.initializeOptions();\n this.syncSelectedValue();\n this.updateDisplayValue();\n this.changeDetector.detectChanges();\n }\n }\n\n // Component methods\n toggleDropdown(event: Event): void {\n event.stopPropagation();\n this.isOpen = !this.isOpen;\n \n if (this.isOpen) {\n // Focus search bar when opening if available\n setTimeout(() => {\n const searchbar = this.dropdownRef?.nativeElement?.querySelector('ion-searchbar');\n if (searchbar) {\n searchbar.setFocus();\n }\n }, 100);\n }\n }\n\n onSearch(event: any): void {\n this.searchTerm = event.detail.value || '';\n this.filterOptions();\n }\n\n selectOption(option: InputOption): void {\n const value = String(option[this.valueProperty]);\n this.selectedValue = value;\n this.isOpen = false;\n this.searchTerm = '';\n this.updateDisplayValue();\n this.initializeOptions(); // Reset filter\n \n // Update form control\n if (this.props?.control) {\n this.props.control.setValue(value);\n this.props.control.markAsDirty();\n this.props.control.markAsTouched();\n }\n }\n\n isSelected(option: InputOption): boolean {\n return String(this.selectedValue) === String(option[this.valueProperty]);\n }\n\n trackByFn(_index: number, option: InputOption): any {\n return option[this.valueProperty];\n }\n\n private handleClickOutside(event: Event): void {\n if (this.isOpen && \n !this.mainInputRef?.nativeElement?.contains(event.target) &&\n !this.dropdownRef?.nativeElement?.contains(event.target)) {\n this.isOpen = false;\n this.searchTerm = '';\n this.initializeOptions();\n }\n }\n\n private getOptionByValue(value: string): InputOption | undefined {\n return this.filteredOptions.find(option => \n String(option[this.valueProperty]) === String(value)\n );\n }\n \n private initializeOptions(): void {\n this.filteredOptions = this.props?.options || [];\n }\n \n private filterOptions(): void {\n if (!this.searchTerm) {\n this.initializeOptions();\n return;\n }\n \n const search = replaceSpecialChars(this.searchTerm.toLowerCase());\n this.filteredOptions = (this.props?.options || []).filter(option => {\n const label = option[this.labelProperty]\n ? replaceSpecialChars(String(option[this.labelProperty]).toLowerCase())\n : '';\n const value = option[this.valueProperty]\n ? replaceSpecialChars(String(option[this.valueProperty]).toLowerCase())\n : '';\n return label.includes(search) || value.includes(search);\n });\n }\n \n private updateDisplayValue(): void {\n if (!this.selectedValue) {\n this.displayValue = '';\n return;\n }\n \n const option = this.getOptionByValue(this.selectedValue);\n this.displayValue = option ? option[this.labelProperty] : '';\n }\n\n private applyDefaultValue(): void {\n if (this.props) {\n applyDefaultValueToControl(this.props);\n }\n }\n\n debugOptions(): void {\n console.log('[SelectSearch] DEBUG CLICK:', {\n props: this.props,\n filteredOptions: this.filteredOptions,\n searchTerm: this.searchTerm,\n propsOptions: this.props?.options,\n displayValue: this.displayValue,\n selectedValue: this.selectedValue,\n isOpen: this.isOpen\n });\n }\n\n private syncSelectedValue(): void {\n if (this.props?.control?.value) {\n this.selectedValue = String(this.props.control.value);\n }\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IonInput } from '@ionic/angular/standalone';\nimport { applyDefaultValueToControl } from '../../../shared/utils/form-defaults';\nimport { ComponentStates, InputMetadata } from '../../types';\n\n@Component({\n selector: 'val-text-input',\n standalone: true,\n imports: [ReactiveFormsModule, IonInput],\n template: ` <ion-input [formControl]=\"props.control\" type=\"text\" [placeholder]=\"props.placeholder\" /> `,\n styleUrls: ['./text-input.component.scss'],\n})\n/**\n * val-text-input\n *\n * A text input field integrated with Angular forms.\n *\n * @example\n * <val-text-input [props]=\"{ control: myControl, placeholder: 'Enter text', ... }\"></val-text-input>\n *\n * @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)\n */\nexport class TextInputComponent implements OnInit {\n /**\n * Input configuration object.\n * @type {InputMetadata}\n * @property control - The Angular FormControl for the input.\n * @property placeholder - The placeholder text.\n * @property label, name, hint, type, validators, etc. - See InputMetadata for all options.\n */\n @Input() props: InputMetadata;\n\n states = ComponentStates;\n\n constructor() {}\n\n ngOnInit() {\n // Apply default values on initialization\n if (this.props?.withDefault || this.props?.value) {\n applyDefaultValueToControl(this.props);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { ButtonComponent } from '../../atoms/button/button.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ImageMetadata } from '../../atoms/image/types';\nimport { TextComponent } from '../../atoms/text/text.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport {\n ArticleButtonElement,\n ArticleCodeElement,\n ArticleCustomElement,\n ArticleElement,\n ArticleHighlightElement,\n ArticleImageElement,\n ArticleListElement,\n ArticleMetadata,\n ArticleQuoteElement,\n ArticleSeparatorElement,\n ArticleSubtitleElement,\n ArticleTextElement,\n ArticleTitleElement,\n ArticleVideoElement,\n} from './types';\n\n@Component({\n selector: 'val-article',\n standalone: true,\n imports: [CommonModule, TitleComponent, TextComponent, ButtonComponent, ImageComponent],\n template: `\n <article\n class=\"val-article\"\n [class]=\"props.cssClass\"\n [ngClass]=\"{\n 'val-article--centered': props.centered,\n 'val-article--light': props.theme === 'light',\n 'val-article--dark': props.theme === 'dark',\n }\"\n [style.max-width]=\"props.maxWidth\"\n >\n <div\n *ngFor=\"let element of props.elements; trackBy: trackByFn\"\n class=\"val-article__element\"\n [class]=\"element.cssClass\"\n [ngClass]=\"getElementSpacingClass(element)\"\n [style.display]=\"element.visible === false ? 'none' : 'block'\"\n >\n <!-- Título -->\n <ng-container *ngIf=\"element.type === 'title'\">\n <val-title [props]=\"getTitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Subtítulo -->\n <ng-container *ngIf=\"element.type === 'subtitle'\">\n <val-title [props]=\"getSubtitleElement(element).props\"></val-title>\n </ng-container>\n\n <!-- Texto/Párrafo -->\n <ng-container *ngIf=\"element.type === 'text' || element.type === 'paragraph'\">\n <val-text [props]=\"getTextElement(element).props\"></val-text>\n </ng-container>\n\n <!-- Cita -->\n <ng-container *ngIf=\"element.type === 'quote'\">\n <div class=\"val-article__quote\">\n <div class=\"val-article__quote-content\">\n <val-text [props]=\"getQuoteTextProps(element)\"></val-text>\n </div>\n <div *ngIf=\"getQuoteElement(element).props.author\" class=\"val-article__quote-author\">\n — {{ getQuoteElement(element).props.author }}\n <span *ngIf=\"getQuoteElement(element).props.source\" class=\"val-article__quote-source\">\n , {{ getQuoteElement(element).props.source }}\n </span>\n </div>\n </div>\n </ng-container>\n\n <!-- Texto destacado -->\n <ng-container *ngIf=\"element.type === 'highlight'\">\n <div\n class=\"val-article__highlight\"\n [ngClass]=\"{\n 'val-article__highlight--rounded': getHighlightElement(element).props.rounded,\n }\"\n [style.background-color]=\"getHighlightColor(element)\"\n >\n <val-text [props]=\"getHighlightTextProps(element)\"></val-text>\n </div>\n </ng-container>\n\n <!-- Código -->\n <ng-container *ngIf=\"element.type === 'code'\">\n <div class=\"val-article__code\">\n <div *ngIf=\"getCodeElement(element).props.language\" class=\"val-article__code-language\">\n {{ getCodeElement(element).props.language }}\n </div>\n <pre\n class=\"val-article__code-content\"\n [ngClass]=\"{\n 'val-article__code-content--dark': getCodeElement(element).props.theme === 'dark',\n }\"\n ><code>{{ getCodeElement(element).props.code }}</code></pre>\n </div>\n </ng-container>\n\n <!-- Lista -->\n <ng-container *ngIf=\"element.type === 'list'\">\n <ul *ngIf=\"getListElement(element).props.listType !== 'ordered'\" class=\"val-article__list\">\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n <span *ngIf=\"getListElement(element).props.listType === 'checklist'\" class=\"val-article__list-check\"\n >✓</span\n >\n {{ item.text }}\n </li>\n </ul>\n <ol\n *ngIf=\"getListElement(element).props.listType === 'ordered'\"\n class=\"val-article__list val-article__list--ordered\"\n >\n <li *ngFor=\"let item of getListElement(element).props.items\" class=\"val-article__list-item\">\n {{ item.text }}\n </li>\n </ol>\n </ng-container>\n\n <!-- Botón -->\n <ng-container *ngIf=\"element.type === 'button'\">\n <div\n class=\"val-article__button-container\"\n [ngClass]=\"{\n 'val-article__button-container--left': getButtonElement(element).props.alignment === 'left',\n 'val-article__button-container--center': getButtonElement(element).props.alignment === 'center',\n 'val-article__button-container--right': getButtonElement(element).props.alignment === 'right',\n }\"\n >\n <val-button [props]=\"getButtonProps(element)\"></val-button>\n </div>\n </ng-container>\n\n <!-- Separador -->\n <ng-container *ngIf=\"element.type === 'separator'\">\n <div class=\"val-article__separator\">\n <hr\n *ngIf=\"getSeparatorElement(element).props.style === 'line'\"\n class=\"val-article__separator-line\"\n [ngClass]=\"{\n 'val-article__separator-line--thin': getSeparatorElement(element).props.thickness === 'thin',\n 'val-article__separator-line--thick': getSeparatorElement(element).props.thickness === 'thick',\n }\"\n />\n <div *ngIf=\"getSeparatorElement(element).props.style === 'dots'\" class=\"val-article__separator-dots\">\n • • •\n </div>\n <div\n *ngIf=\"getSeparatorElement(element).props.style === 'space'\"\n class=\"val-article__separator-space\"\n ></div>\n </div>\n </ng-container>\n\n <!-- Imagen -->\n <ng-container *ngIf=\"element.type === 'image'\">\n <val-image [props]=\"getImageMetadata(element)\"></val-image>\n </ng-container>\n\n <!-- Video -->\n <ng-container *ngIf=\"element.type === 'video'\">\n <div class=\"val-article__video\">\n <video\n [src]=\"getVideoElement(element).props.src\"\n [poster]=\"getVideoElement(element).props.poster\"\n [controls]=\"getVideoElement(element).props.controls !== false\"\n [autoplay]=\"getVideoElement(element).props.autoplay\"\n [muted]=\"getVideoElement(element).props.muted\"\n [style.max-width]=\"getVideoElement(element).props.maxWidth\"\n class=\"val-article__video-content\"\n >\n Tu navegador no soporta el elemento video.\n </video>\n <div *ngIf=\"getVideoElement(element).props.title\" class=\"val-article__video-title\">\n {{ getVideoElement(element).props.title }}\n </div>\n </div>\n </ng-container>\n\n <!-- Contenido personalizado -->\n <ng-container *ngIf=\"element.type === 'custom'\">\n <div class=\"val-article__custom\" [innerHTML]=\"getCustomElement(element).props.htmlContent\"></div>\n </ng-container>\n </div>\n </article>\n `,\n styleUrls: ['./article.component.scss'],\n // changeDetection: ChangeDetectionStrategy.OnPush, // Comentado temporalmente para debug\n})\n/**\n * val-article\n *\n * Componente para crear artículos, blogs y documentación de forma declarativa.\n * Permite combinar múltiples elementos (títulos, texto, imágenes, código, etc.)\n * con espaciado automático y soporte multi-idioma.\n *\n * @example Uso básico:\n * ```html\n * <val-article [props]=\"articleConfig\"></val-article>\n * ```\n *\n * @example Con ArticleBuilder:\n * ```typescript\n * articleConfig = new ArticleBuilder()\n * .title(titleProps)\n * .paragraph(textProps)\n * .code('console.log(\"Hello World\")', 'javascript')\n * .build();\n * ```\n *\n * @input props: ArticleMetadata - Configuración completa del artículo\n */\nexport class ArticleComponent implements OnInit {\n /**\n * Configuración del artículo\n * @type {ArticleMetadata}\n */\n @Input()\n props!: ArticleMetadata;\n\n constructor() {}\n\n ngOnInit() {\n // Validación básica\n if (!this.props || !this.props.elements) {\n console.warn('val-article: props.elements is required');\n }\n }\n\n /**\n * Función de trackBy para optimizar el rendering de elementos\n */\n trackByFn(index: number, element: ArticleElement): any {\n return element.id || index;\n }\n\n /**\n * Obtiene las clases CSS para el espaciado del elemento\n */\n getElementSpacingClass(element: ArticleElement): string {\n const spacing = element.spacing || this.props.defaultSpacing;\n const classes: string[] = [];\n\n if (spacing?.top) {\n classes.push(`val-article__spacing-top--${spacing.top}`);\n }\n if (spacing?.bottom) {\n classes.push(`val-article__spacing-bottom--${spacing.bottom}`);\n }\n if (spacing?.horizontal) {\n classes.push(`val-article__spacing-horizontal--${spacing.horizontal}`);\n }\n\n return classes.join(' ');\n }\n\n // === FUNCIONES DE TIPO PARA TYPESCRIPT ===\n\n getTitleElement(element: ArticleElement): ArticleTitleElement {\n return element as ArticleTitleElement;\n }\n\n getSubtitleElement(element: ArticleElement): ArticleSubtitleElement {\n return element as ArticleSubtitleElement;\n }\n\n getTextElement(element: ArticleElement): ArticleTextElement {\n return element as ArticleTextElement;\n }\n\n getQuoteElement(element: ArticleElement): ArticleQuoteElement {\n return element as ArticleQuoteElement;\n }\n\n getHighlightElement(element: ArticleElement): ArticleHighlightElement {\n return element as ArticleHighlightElement;\n }\n\n getCodeElement(element: ArticleElement): ArticleCodeElement {\n return element as ArticleCodeElement;\n }\n\n getListElement(element: ArticleElement): ArticleListElement {\n return element as ArticleListElement;\n }\n\n getButtonElement(element: ArticleElement): ArticleButtonElement {\n return element as ArticleButtonElement;\n }\n\n getSeparatorElement(element: ArticleElement): ArticleSeparatorElement {\n return element as ArticleSeparatorElement;\n }\n\n getImageElement(element: ArticleElement): ArticleImageElement {\n return element as ArticleImageElement;\n }\n\n getVideoElement(element: ArticleElement): ArticleVideoElement {\n return element as ArticleVideoElement;\n }\n\n getCustomElement(element: ArticleElement): ArticleCustomElement {\n return element as ArticleCustomElement;\n }\n\n // === FUNCIONES AUXILIARES PARA PROPS ===\n\n getQuoteTextProps(element: ArticleElement) {\n const quoteElement = this.getQuoteElement(element);\n const { author, source, ...textProps } = quoteElement.props;\n return textProps;\n }\n\n getHighlightTextProps(element: ArticleElement) {\n const highlightElement = this.getHighlightElement(element);\n const { backgroundColor, rounded, ...textProps } = highlightElement.props;\n return textProps;\n }\n\n getHighlightColor(element: ArticleElement): string {\n const highlightElement = this.getHighlightElement(element);\n return highlightElement.props.backgroundColor || 'var(--ion-color-light)';\n }\n\n getButtonProps(element: ArticleElement) {\n const buttonElement = this.getButtonElement(element);\n const { alignment, ...buttonProps } = buttonElement.props;\n return buttonProps;\n }\n\n getImageMetadata(element: ArticleElement): ImageMetadata {\n const imageElement = this.getImageElement(element);\n const props = imageElement.props;\n\n return {\n src: props.src,\n alt: props.alt,\n mode: props.rounded ? 'rounded' : 'box',\n size: 'medium',\n shaded: false,\n bordered: false,\n alignment: props.alignment || 'center',\n caption: props.caption,\n captionSize: 'medium' as const,\n width: props.maxWidth ? parseInt(props.maxWidth.replace('px', '')) : undefined,\n };\n }\n}\n","import { Color } from '@ionic/core';\nimport { TextMetadata } from '../../atoms/text/types';\nimport { TitleMetadata } from '../../atoms/title/types';\nimport { ButtonMetadata } from '../../types';\n\n/**\n * Tipos de contenido soportados en el componente val-article\n */\nexport type ArticleContentType =\n | 'title'\n | 'subtitle'\n | 'text'\n | 'paragraph'\n | 'quote'\n | 'highlight'\n | 'code'\n | 'list'\n | 'button'\n | 'separator'\n | 'image'\n | 'video'\n | 'custom';\n\n/**\n * Configuración de espaciado entre elementos\n */\nexport interface ArticleSpacing {\n /** Espaciado superior */\n top?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado inferior */\n bottom?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n /** Espaciado lateral */\n horizontal?: 'none' | 'small' | 'medium' | 'large' | 'xlarge';\n}\n\n/**\n * Configuración base para cualquier elemento del artículo\n */\nexport interface BaseArticleElement {\n /** Tipo de elemento */\n type: ArticleContentType;\n /** ID único del elemento (opcional) */\n id?: string;\n /** Clases CSS adicionales */\n cssClass?: string;\n /** Configuración de espaciado */\n spacing?: ArticleSpacing;\n /** Elemento visible condicionalmente */\n visible?: boolean;\n}\n\n/**\n * Elemento de título\n */\nexport interface ArticleTitleElement extends BaseArticleElement {\n type: 'title';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de subtítulo\n */\nexport interface ArticleSubtitleElement extends BaseArticleElement {\n type: 'subtitle';\n props: TitleMetadata;\n}\n\n/**\n * Elemento de texto/párrafo\n */\nexport interface ArticleTextElement extends BaseArticleElement {\n type: 'text' | 'paragraph';\n props: TextMetadata;\n}\n\n/**\n * Elemento de cita\n */\nexport interface ArticleQuoteElement extends BaseArticleElement {\n type: 'quote';\n props: TextMetadata & {\n /** Autor de la cita */\n author?: string;\n /** Fuente de la cita */\n source?: string;\n };\n}\n\n/**\n * Elemento de texto destacado\n */\nexport interface ArticleHighlightElement extends BaseArticleElement {\n type: 'highlight';\n props: TextMetadata & {\n /** Color de fondo del highlight */\n backgroundColor?: Color;\n /** Esquinas redondeadas */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de código\n */\nexport interface ArticleCodeElement extends BaseArticleElement {\n type: 'code';\n props: {\n /** Código a mostrar */\n code: string;\n /** Lenguaje de programación */\n language?: string;\n /** Mostrar números de línea */\n showLineNumbers?: boolean;\n /** Tema del código */\n theme?: 'light' | 'dark';\n };\n}\n\n/**\n * Elemento de lista\n */\nexport interface ArticleListElement extends BaseArticleElement {\n type: 'list';\n props: {\n /** Elementos de la lista */\n items: Array<{\n /** Texto del elemento */\n text: string;\n /** Configuración de contenido reactivo */\n contentKey?: string;\n contentClass?: string;\n contentFallback?: string;\n contentInterpolation?: Record<string, string | number>;\n }>;\n /** Tipo de lista */\n listType?: 'unordered' | 'ordered' | 'checklist';\n /** Color de los elementos */\n color?: Color;\n };\n}\n\n/**\n * Elemento de botón\n */\nexport interface ArticleButtonElement extends BaseArticleElement {\n type: 'button';\n props: ButtonMetadata & {\n /** Alineación del botón */\n alignment?: 'left' | 'center' | 'right';\n };\n}\n\n/**\n * Elemento separador\n */\nexport interface ArticleSeparatorElement extends BaseArticleElement {\n type: 'separator';\n props: {\n /** Tipo de separador */\n style?: 'line' | 'dots' | 'space';\n /** Color del separador */\n color?: Color;\n /** Grosor del separador */\n thickness?: 'thin' | 'medium' | 'thick';\n };\n}\n\n/**\n * Elemento de imagen\n */\nexport interface ArticleImageElement extends BaseArticleElement {\n type: 'image';\n props: {\n /** URL de la imagen */\n src: string;\n /** Texto alternativo */\n alt: string;\n /** Título de la imagen */\n title?: string;\n /** Leyenda de la imagen */\n caption?: string;\n /** Configuración de contenido reactivo para caption */\n captionContentKey?: string;\n captionContentClass?: string;\n captionContentFallback?: string;\n /** Alineación de la imagen */\n alignment?: 'left' | 'center' | 'right';\n /** Ancho máximo */\n maxWidth?: string;\n /** Imagen con bordes redondeados */\n rounded?: boolean;\n };\n}\n\n/**\n * Elemento de video\n */\nexport interface ArticleVideoElement extends BaseArticleElement {\n type: 'video';\n props: {\n /** URL del video */\n src: string;\n /** Imagen de poster */\n poster?: string;\n /** Título del video */\n title?: string;\n /** Controles visibles */\n controls?: boolean;\n /** Reproducción automática */\n autoplay?: boolean;\n /** Silenciado por defecto */\n muted?: boolean;\n /** Ancho máximo */\n maxWidth?: string;\n };\n}\n\n/**\n * Elemento personalizado\n */\nexport interface ArticleCustomElement extends BaseArticleElement {\n type: 'custom';\n props: {\n /** Contenido HTML personalizado */\n htmlContent?: string;\n /** Clase de componente personalizado */\n componentClass?: any;\n /** Props para el componente personalizado */\n componentProps?: any;\n };\n}\n\n/**\n * Unión de todos los tipos de elementos posibles\n */\nexport type ArticleElement =\n | ArticleTitleElement\n | ArticleSubtitleElement\n | ArticleTextElement\n | ArticleQuoteElement\n | ArticleHighlightElement\n | ArticleCodeElement\n | ArticleListElement\n | ArticleButtonElement\n | ArticleSeparatorElement\n | ArticleImageElement\n | ArticleVideoElement\n | ArticleCustomElement;\n\n/**\n * Configuración del artículo completo\n */\nexport interface ArticleMetadata {\n /** Elementos del artículo */\n elements: ArticleElement[];\n /** Configuración de espaciado global */\n defaultSpacing?: ArticleSpacing;\n /** Ancho máximo del artículo */\n maxWidth?: string;\n /** Centrar el artículo */\n centered?: boolean;\n /** Tema del artículo */\n theme?: 'light' | 'dark' | 'auto';\n /** Clases CSS adicionales */\n cssClass?: string;\n}\n\n/**\n * Configuración de espaciado predefinida\n */\nexport const ARTICLE_SPACING = {\n NONE: { top: 'none', bottom: 'none' } as ArticleSpacing,\n SMALL: { top: 'small', bottom: 'small' } as ArticleSpacing,\n MEDIUM: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LARGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n XLARGE: { top: 'xlarge', bottom: 'xlarge' } as ArticleSpacing,\n\n // Espaciados específicos para elementos\n TITLE: { top: 'large', bottom: 'medium' } as ArticleSpacing,\n SUBTITLE: { top: 'medium', bottom: 'small' } as ArticleSpacing,\n PARAGRAPH: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n QUOTE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n CODE: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n LIST: { top: 'small', bottom: 'medium' } as ArticleSpacing,\n BUTTON: { top: 'medium', bottom: 'medium' } as ArticleSpacing,\n IMAGE: { top: 'large', bottom: 'large' } as ArticleSpacing,\n SEPARATOR: { top: 'large', bottom: 'large' } as ArticleSpacing,\n} as const;\n\n/**\n * Función helper para crear elementos de artículo de forma fácil\n */\nexport class ArticleBuilder {\n private elements: ArticleElement[] = [];\n\n /**\n * Añade un título al artículo\n */\n title(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'title',\n props,\n spacing: ARTICLE_SPACING.TITLE,\n ...options,\n } as ArticleTitleElement);\n return this;\n }\n\n /**\n * Añade un subtítulo al artículo\n */\n subtitle(props: TitleMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'subtitle',\n props,\n spacing: ARTICLE_SPACING.SUBTITLE,\n ...options,\n } as ArticleSubtitleElement);\n return this;\n }\n\n /**\n * Añade un párrafo al artículo\n */\n paragraph(props: TextMetadata, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'paragraph',\n props,\n spacing: ARTICLE_SPACING.PARAGRAPH,\n ...options,\n } as ArticleTextElement);\n return this;\n }\n\n /**\n * Añade una cita al artículo\n */\n quote(\n props: ArticleQuoteElement['props'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'quote',\n props,\n spacing: ARTICLE_SPACING.QUOTE,\n ...options,\n } as ArticleQuoteElement);\n return this;\n }\n\n /**\n * Añade código al artículo\n */\n code(code: string, language?: string, options?: Partial<BaseArticleElement>): ArticleBuilder {\n this.elements.push({\n type: 'code',\n props: { code, language },\n spacing: ARTICLE_SPACING.CODE,\n ...options,\n } as ArticleCodeElement);\n return this;\n }\n\n /**\n * Añade una lista al artículo\n */\n list(\n items: ArticleListElement['props']['items'],\n listType?: ArticleListElement['props']['listType'],\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'list',\n props: { items, listType },\n spacing: ARTICLE_SPACING.LIST,\n ...options,\n } as ArticleListElement);\n return this;\n }\n\n /**\n * Añade un botón al artículo\n */\n button(\n props: ButtonMetadata,\n alignment?: 'left' | 'center' | 'right',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'button',\n props: { ...props, alignment },\n spacing: ARTICLE_SPACING.BUTTON,\n ...options,\n } as ArticleButtonElement);\n return this;\n }\n\n /**\n * Añade un separador al artículo\n */\n separator(\n style?: 'line' | 'dots' | 'space',\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'separator',\n props: { style },\n spacing: ARTICLE_SPACING.SEPARATOR,\n ...options,\n } as ArticleSeparatorElement);\n return this;\n }\n\n /**\n * Añade una imagen al artículo\n */\n image(\n src: string,\n alt: string,\n caption?: string,\n options?: Partial<BaseArticleElement>\n ): ArticleBuilder {\n this.elements.push({\n type: 'image',\n props: { src, alt, caption },\n spacing: ARTICLE_SPACING.IMAGE,\n ...options,\n } as ArticleImageElement);\n return this;\n }\n\n /**\n * Construye el artículo final\n */\n build(config?: Partial<ArticleMetadata>): ArticleMetadata {\n return {\n elements: this.elements,\n defaultSpacing: ARTICLE_SPACING.MEDIUM,\n maxWidth: '800px',\n centered: true,\n theme: 'auto',\n ...config,\n };\n }\n\n /**\n * Resetea el builder para crear un nuevo artículo\n */\n clear(): ArticleBuilder {\n this.elements = [];\n return this;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { BoxComponent } from '../../atoms/box/box.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { TitleBlockComponent } from '../../molecules/title-block/title-block.component';\nimport { BannerMetadata } from './types';\n\n@Component({\n selector: 'val-banner',\n standalone: true,\n imports: [CommonModule, BoxComponent, TitleBlockComponent, ButtonGroupComponent],\n template: `\n <val-box\n [props]=\"{\n icon: props.closable ? 'close-outline' : '',\n bordered: props.bordered,\n color: '',\n padding: props.padding,\n }\"\n (onClick)=\"closeHandler()\"\n >\n <div [ngClass]=\"['content-container', props.mode, props.alignment]\" body>\n <val-title-block\n [props]=\"{\n position: props.content.position,\n aboveTitle: props.content.aboveTitle,\n title: props.content.title,\n bellowTitle: props.content.bellowTitle,\n }\"\n ></val-title-block>\n @if (props.actions) {\n <val-button-group\n [ngClass]=\"['buttons-container', props.mode, props.alignment]\"\n [props]=\"props.actions\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n }\n </div>\n </val-box>\n `,\n styleUrls: ['./banner.component.scss'],\n})\n/**\n * val-banner\n *\n * Displays a banner with title block, actions, and optional close button.\n *\n * @example\n * <val-banner [props]=\"{ content: {...}, actions: {...}, closable: true, bordered: true, mode: 'center', alignment: 'center', padding: '8px' }\" (onClick)=\"handler($event)\" (onClose)=\"closeHandler()\"></val-banner>\n *\n * @input props: BannerMetadata - Configuration for the banner (content, actions, closable, bordered, mode, alignment, padding)\n * @output onClick - Emits when an action is clicked\n * @output onClose - Emits when the banner is closed\n */\nexport class BannerComponent implements OnInit, OnChanges {\n @Input()\n props: BannerMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onClose = new EventEmitter();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n closeHandler() {\n this.onClose.emit();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonMenuButton,\n IonText,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport { chevronBackOutline } from 'ionicons/icons';\nimport { IconService } from '../../../services/icons.service';\nimport { AvatarComponent } from '../../atoms/avatar/avatar.component';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { ToolbarAction, ToolbarActionType } from '../../types';\nimport { ToolbarMetadata } from './types';\n\n/**\n * ToolbarComponent\n *\n * Componente de barra de herramientas reutilizable para encabezados y pies de página.\n * Permite acciones, botón de retroceso, menú y personalización de colores y título.\n *\n * @example\n * <val-toolbar [props]=\"{ title: 'Mi App', withBack: true, actions: [...] }\" (onClick)=\"handleToolbarAction($event)\"></val-toolbar>\n *\n * @input props {ToolbarMetadata} - Metadatos de la barra de herramientas.\n * @output onClick - Emite el token de la acción clicada.\n */\n@Component({\n selector: 'val-toolbar',\n standalone: true,\n imports: [\n CommonModule,\n IonToolbar,\n IonButtons,\n IonButton,\n IonIcon,\n IonText,\n IonTitle,\n AvatarComponent,\n ImageComponent,\n IonMenuButton,\n ],\n template: `\n <ion-toolbar [color]=\"props.color\" [class.background]=\"props.color === 'background'\">\n <ng-container *ngIf=\"props.withBack\">\n <ion-buttons class=\"left-buttons\" slot=\"start\" *ngIf=\"props.withBack\">\n <ion-button fill=\"clear\" (click)=\"goBack()\" [color]=\"props.textColor\" style=\"margin-left: 8px;\">\n <ion-icon name=\"chevron-back-outline\" [slot]=\"props.backText ? 'start' : 'icon-only'\"></ion-icon>\n <ion-text *ngIf=\"props.backText\">{{ props.backText }}</ion-text>\n </ion-button>\n </ion-buttons>\n </ng-container>\n <ng-container *ngIf=\"props.withActions\">\n <ion-buttons slot=\"end\" *ngIf=\"someInRight() || props.withMenu\">\n <ng-container *ngFor=\"let action of rightActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button\n [color]=\"props.textColor\"\n *ngIf=\"action.type === actionTypes.BUTTON\"\n (click)=\"clickHandler(action.token)\"\n >{{ action.description }}</ion-button\n >\n </ng-container>\n @if (props.withMenu) {\n <ion-menu-button color=\"dark\"></ion-menu-button>\n }\n </ion-buttons>\n <ion-buttons slot=\"start\" *ngIf=\"someInLeft()\" style=\"padding-left: 4px;\">\n <ng-container *ngFor=\"let action of leftActions()\">\n <ion-button *ngIf=\"action.type === actionTypes.ICON\" (click)=\"clickHandler(action.token)\">\n <ion-icon slot=\"icon-only\" [name]=\"action.description\" [color]=\"props.textColor\"></ion-icon>\n </ion-button>\n <val-avatar\n *ngIf=\"action.type === actionTypes.AVATAR\"\n [props]=\"{ size: 'small', image: action.description, default: '' }\"\n (onClick)=\"clickHandler(action.token)\"\n ></val-avatar>\n <val-image\n *ngIf=\"action.type === actionTypes.IMAGE\"\n [props]=\"action.image\"\n (click)=\"clickHandler(action.token)\"\n ></val-image>\n <ion-button *ngIf=\"action.type === actionTypes.BUTTON\" (click)=\"clickHandler(action.token)\">{{\n action.description\n }}</ion-button>\n </ng-container>\n </ion-buttons>\n </ng-container>\n <ion-title *ngIf=\"props.title\" [color]=\"props.textColor\">{{ props.title }}</ion-title>\n <!-- experimental -->\n <ng-content select=\"[toolbar-bottom]\"></ng-content>\n </ion-toolbar>\n `,\n styleUrls: ['./toolbar.component.scss'],\n})\nexport class ToolbarComponent implements OnInit {\n /**\n * Metadatos de la barra de herramientas.\n */\n @Input()\n props: ToolbarMetadata;\n\n /**\n * Evento emitido al hacer click en una acción o botón de la barra.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n actionTypes = ToolbarActionType;\n\n constructor(\n private navCtrl: NavController,\n icon: IconService\n ) {\n addIcons({ chevronBackOutline });\n }\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Navega hacia atrás usando NavController.\n */\n goBack() {\n this.navCtrl.back();\n }\n\n /**\n * Determina si hay acciones a la derecha.\n */\n someInRight(): boolean {\n return !!this.props.actions.find(x => x.position === 'right');\n }\n\n /**\n * Determina si hay acciones a la izquierda.\n */\n someInLeft(): boolean {\n return !!this.props.actions.find(x => x.position === 'left');\n }\n\n /**\n * Devuelve las acciones de la derecha.\n */\n rightActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'right');\n }\n\n /**\n * Devuelve las acciones de la izquierda.\n */\n leftActions(): ToolbarAction[] {\n return this.props.actions.filter(x => x.position === 'left');\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { FooterMetadata } from './types';\n\n/**\n * FooterComponent\n *\n * Componente de pie de página reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) y contenido adicional.\n *\n * @example\n * <val-footer [props]=\"footerProps\" (onClick)=\"handleFooterAction($event)\">\n * <div extra>Contenido extra</div>\n * </val-footer>\n *\n * @input props {FooterMetadata} - Metadatos del pie de página y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\n@Component({\n selector: 'val-footer',\n standalone: true,\n imports: [CommonModule, IonFooter, ToolbarComponent],\n template: `\n <ion-footer\n [class.ion-no-border]=\"!props.bordered\"\n [translucent]=\"props.translucent\"\n [class.background]=\"props.toolbar.color === 'background'\"\n >\n <val-toolbar\n *ngIf=\"props.toolbar.title || props.toolbar.withActions || props.toolbar.withBack\"\n [props]=\"props.toolbar\"\n (onClick)=\"clickHandler($event)\"\n ></val-toolbar>\n <ng-content select=\"[extra]\"></ng-content>\n </ion-footer>\n `,\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent implements OnInit {\n /**\n * Metadatos del pie de página y su toolbar.\n */\n @Input()\n props: FooterMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { ValidatorFn, Validators } from '@angular/forms';\nimport { ComponentStates, InputMetadata, InputType } from '../../types';\n\nexport const maxLength = (\n field: string,\n max: number\n): { validator: ValidatorFn; error: string } => {\n return {\n validator: Validators.maxLength(max),\n error: `El campo ${field} no debe superar los ${max} caracteres.`,\n };\n};\n\nexport const createNumberFromToField = (\n name: string,\n label: string,\n fromLabel: string,\n toLabel: string,\n options?: {\n fromPlaceholder?: string;\n toPlaceholder?: string;\n hint?: string;\n range?: { min: number; max: number };\n validators?: ValidatorFn[];\n order?: number;\n }\n): InputMetadata => {\n return {\n control: null as any, // Will be set by form component\n token: `number-from-to-${name}`,\n label,\n name,\n hint: options?.hint || '',\n placeholder: '',\n type: InputType.NUMBER_FROM_TO,\n order: options?.order || 0,\n validators: options?.validators || [],\n range: options?.range,\n errors: {},\n state: ComponentStates.ENABLED,\n fromLabel,\n toLabel,\n fromPlaceholder: options?.fromPlaceholder,\n toPlaceholder: options?.toPlaceholder,\n };\n};\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\n\n@Component({\n selector: 'val-form-footer',\n standalone: true,\n imports: [FooterComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: 'background',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./form-footer.component.scss'],\n})\nexport class FormFooterComponent implements OnInit {\n @Input()\n props: { form: FormGroup; data: FormMetadata };\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n constructor() {}\n\n ngOnInit() {}\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.props.form.value, token });\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.props.form) {\n return [];\n }\n\n if (this.props.form.valid) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.WORKING) {\n this.props.data.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.data.state === ComponentStates.ENABLED) {\n this.props.data.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.data.state === ComponentStates.DISABLED) {\n this.props.data.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.data.actions];\n }\n}\n","import { ElementRef } from '@angular/core';\n\n/**\n * Scrolls smoothly to the top of the element with the given id.\n * @param id The id of the element to scroll to\n */\nexport const goToTop = (id: string): void => {\n const element = document.getElementById(id);\n if (element) {\n element.scrollIntoView({\n block: 'start',\n inline: 'nearest',\n behavior: 'smooth',\n });\n }\n};\n\n/**\n * Checks if the bottom of the given ElementRef is within the viewport.\n * Useful for determining if a form or element is fully visible.\n * @param elementRef The Angular ElementRef to check\n * @returns True if the element's bottom is at or above the window's bottom\n */\nexport const isAtEnd = (elementRef: ElementRef): boolean => {\n const formElement = elementRef.nativeElement;\n const rect = formElement.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n return rect.bottom <= windowHeight;\n};\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { isAtEnd } from '../../../shared/utils/dom';\nimport { DisplayComponent } from '../../atoms/display/display.component';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { TitleComponent } from '../../atoms/title/title.component';\nimport { ButtonGroupComponent } from '../../molecules/button-group/button-group.component';\nimport { CheckInputComponent } from '../../molecules/check-input/check-input.component';\nimport { CommentInputComponent } from '../../molecules/comment-input/comment-input.component';\nimport { DateInputComponent } from '../../molecules/date-input/date-input.component';\nimport { EmailInputComponent } from '../../molecules/email-input/email-input.component';\nimport { FileInputComponent } from '../../molecules/file-input/file-input.component';\nimport { HintComponent } from '../../molecules/hint/hint.component';\nimport { HourInputComponent } from '../../molecules/hour-input/hour-input.component';\nimport { NumberInputComponent } from '../../molecules/number-input/number-input.component';\nimport { NumberFromToComponent } from '../../molecules/number-from-to/number-from-to.component';\nimport { PasswordInputComponent } from '../../molecules/password-input/password-input.component';\nimport { PinInputComponent } from '../../molecules/pin-input/pin-input.component';\nimport { RadioInputComponent } from '../../molecules/radio-input/radio-input.component';\nimport { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';\nimport { SelectSearchComponent } from '../../molecules/select-search/select-search.component';\nimport { MultiSelectSearchComponent } from '../../molecules/multi-select-search/multi-select-search.component';\nimport { MultiSelectSimpleComponent } from '../../molecules/multi-select-simple/multi-select-simple.component';\nimport { TextInputComponent } from '../../molecules/text-input/text-input.component';\nimport { ButtonMetadata, ComponentStates, FormMetadata, FormSubmit, InputMetadata, InputType } from '../../types';\n\n@Component({\n selector: 'val-form',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DisplayComponent,\n TitleComponent,\n TextInputComponent,\n CheckInputComponent,\n ButtonGroupComponent,\n DividerComponent,\n HintComponent,\n CommentInputComponent,\n DateInputComponent,\n FileInputComponent,\n HourInputComponent,\n EmailInputComponent,\n NumberInputComponent,\n NumberFromToComponent,\n RadioInputComponent,\n PasswordInputComponent,\n PinInputComponent,\n SelectSearchComponent,\n MultiSelectSearchComponent,\n MultiSelectSimpleComponent,\n SearchSelectorComponent,\n],\n template: `\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <val-display\n *ngIf=\"props.name\"\n [props]=\"{\n content: props.name,\n color: 'dark',\n size: 'large',\n }\"\n ></val-display>\n <div class=\"section\" *ngFor=\"let s of processedSections\">\n <val-title [props]=\"{ content: s.name, size: 'large', color: '', bold: false }\"></val-title>\n <div class=\"input\" *ngFor=\"let f of s.fields\">\n <val-title [props]=\"{ content: f.label, size: 'small', color: 'dark', bold: false }\"></val-title>\n <ng-container *ngIf=\"f.type === types.TEXT\">\n <val-text-input [props]=\"f\"></val-text-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.CHECK\">\n <val-check-input></val-check-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.COMMENT\">\n <val-comment-input [props]=\"f\"></val-comment-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.DATE\">\n <val-date-input [props]=\"f\"></val-date-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.EMAIL\">\n <val-email-input [props]=\"f\"></val-email-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.FILE\">\n <val-file-input [props]=\"f\"></val-file-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.HOUR\">\n <val-hour-input [props]=\"f\"></val-hour-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER\">\n <val-number-input [props]=\"f\"></val-number-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.NUMBER_FROM_TO\">\n <val-number-from-to [props]=\"f\"></val-number-from-to>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PASSWORD\">\n <val-password-input [props]=\"f\"></val-password-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.PIN_CODE\">\n <val-pin-input [props]=\"f\"></val-pin-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.RADIO\">\n <val-radio-input [props]=\"f\"></val-radio-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SELECT\">\n <val-select-input [props]=\"f\"></val-select-input>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.SEARCH_SELECT\">\n <val-select-search [props]=\"f\"></val-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT\">\n <val-multi-select-search [props]=\"f\"></val-multi-select-search>\n </ng-container>\n <ng-container *ngIf=\"f.type === types.MULTI_SELECT_SIMPLE\">\n <val-multi-select-simple [props]=\"f\"></val-multi-select-simple>\n </ng-container>\n <val-hint [props]=\"f\"></val-hint>\n </div>\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'medium' }\"></val-divider>\n <ng-content></ng-content>\n </div>\n <val-button-group\n [props]=\"{ buttons: actions, position: 'center', columned: false }\"\n (onClick)=\"submitHandler($event)\"\n ></val-button-group>\n </form>\n </div>\n `,\n styleUrls: ['./form.component.scss'],\n})\nexport class FormComponent implements OnInit {\n @Input()\n props: FormMetadata;\n\n @Output()\n onSubmit = new EventEmitter<FormSubmit>();\n\n @Output()\n onInvalid = new EventEmitter();\n\n @Output()\n onSelectChange = new EventEmitter<{ field: string; value: any }>();\n\n form: FormGroup;\n types = InputType;\n private subscriptions: Subscription[] = [];\n \n // Cache processed field properties\n processedSections: { name: string; fields: InputMetadata[] }[] = [];\n private previousValues = new Map<string, any>();\n\n constructor(\n private fb: FormBuilder,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit() {\n this.createForm();\n this.processAllSections();\n this.setupChangeTracking();\n }\n \n private createForm() {\n const formControls = {};\n this.props.sections.forEach(section => {\n section.fields.forEach(field => {\n if (field.type === this.types.NUMBER_FROM_TO) {\n // Crear dos controles para campos NUMBER_FROM_TO\n formControls[`${field.name}_from`] = [undefined, field.validators || []];\n formControls[`${field.name}_to`] = [undefined, field.validators || []];\n } else {\n formControls[field.name] = [undefined, field.validators || []];\n }\n });\n });\n this.form = this.fb.group(formControls);\n }\n \n private processAllSections() {\n console.log('[FormComponent] Processing all sections - ONE TIME ONLY');\n \n this.processedSections = this.props.sections.map(section => ({\n name: section.name,\n fields: section.fields.map(field => this.processField(field))\n }));\n }\n \n private processField(field: InputMetadata): InputMetadata {\n // Generate token if not provided\n if (!field.token) {\n field.token = `input-${field.type}-${field.name}`;\n }\n \n // Debug: verificar opciones para select fields - SOLO UNA VEZ\n if (field.type === this.types.SEARCH_SELECT || field.type === this.types.MULTI_SELECT || field.type === this.types.MULTI_SELECT_SIMPLE) {\n console.log(`[FormComponent] Processing field ${field.name} options:`, {\n type: field.type,\n optionsCount: field.options?.length || 0,\n options: field.options?.slice(0, 2) || []\n });\n }\n \n if (field.type === this.types.NUMBER_FROM_TO) {\n const fromControl = this.getControl(`${field.name}_from`);\n const toControl = this.getControl(`${field.name}_to`);\n \n if (field.state === ComponentStates.DISABLED) {\n fromControl.disable();\n toControl.disable();\n } else {\n fromControl.enable();\n toControl.enable();\n }\n \n // Modify original field object to maintain reactivity\n field.fromControl = fromControl;\n field.toControl = toControl;\n field.control = undefined; // Remove control for NUMBER_FROM_TO fields\n return field;\n } else {\n const control = this.getControl(field.name);\n if (field.state === ComponentStates.DISABLED) {\n control.disable();\n } else {\n control.enable();\n }\n \n // Modify original field object to maintain reactivity\n field.control = control;\n return field;\n }\n }\n \n private setupChangeTracking() {\n this.props.sections.forEach(section => {\n section.fields\n .filter(x => x.type === this.types.SELECT || x.type === this.types.TEXT || x.type === this.types.SEARCH_SELECT || x.type === this.types.MULTI_SELECT || x.type === this.types.MULTI_SELECT_SIMPLE)\n .forEach(field => {\n console.log(`[FormComponent] Tracking changes for field: ${field.name}, type: ${field.type}`);\n this.trackSelectChanges(field.name);\n });\n });\n }\n\n ngOnDestroy() {\n // Cleanup subscriptions to avoid memory leaks\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n trackSelectChanges(fieldName: string) {\n const control = this.getControl(fieldName);\n \n // Initialize previous value\n this.previousValues.set(fieldName, control.value);\n \n const subscription = control.valueChanges\n .pipe(distinctUntilChanged()) // Evitar valores duplicados\n .subscribe(value => {\n console.log(`[FormComponent] valueChanges for ${fieldName}:`, {\n field: fieldName,\n newValue: value,\n previousValue: this.previousValues.get(fieldName),\n willEmit: this.previousValues.get(fieldName) !== value\n });\n \n // Evitar loops - solo emitir si el valor realmente cambió\n const previousValue = this.previousValues.get(fieldName);\n if (previousValue !== value) {\n this.previousValues.set(fieldName, value);\n console.log(`[FormComponent] EMITTING onSelectChange:`, { field: fieldName, value });\n this.onSelectChange.emit({ field: fieldName, value });\n } else {\n console.log(`[FormComponent] SKIPPING emit - same value for ${fieldName}`);\n }\n });\n this.subscriptions.push(subscription);\n }\n\n async submitHandler(token?: string) {\n this.onSubmit.emit({ fields: this.form.getRawValue(), token });\n }\n\n getControl(field: string): FormControl {\n return this.Form.get(field) as FormControl;\n }\n\n /**\n * @deprecated This method is now only used internally. \n * Use processedSections property instead to avoid multiple calls.\n */\n getFieldProp(field: InputMetadata): InputMetadata {\n console.warn('[FormComponent] getFieldProp is deprecated and should not be called directly');\n return this.processField(field);\n }\n\n get isAtEndOfForm(): boolean {\n return isAtEnd(this.elementRef);\n }\n\n get Form(): FormGroup {\n return this.form;\n }\n\n get FormState(): { form: FormGroup; data: FormMetadata } {\n return {\n form: this.Form,\n data: this.props,\n };\n }\n\n // Helper method to reset field value without triggering change event\n resetField(fieldName: string, emitEvent: boolean = false): void {\n const control = this.getControl(fieldName);\n const currentValue = control.value;\n \n console.log(`[FormComponent] Resetting field ${fieldName}:`, { currentValue, emitEvent });\n \n // Update our cache to avoid triggering change event\n if (!emitEvent) {\n this.previousValues.set(fieldName, '');\n }\n \n control.setValue('', { emitEvent });\n control.markAsPristine();\n control.markAsUntouched();\n }\n\n get actions(): ButtonMetadata[] {\n if (!this.form) {\n return [];\n }\n\n if (this.form.valid) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.WORKING) {\n this.props.actions.state = ComponentStates.WORKING;\n }\n\n if (this.props.state === ComponentStates.ENABLED) {\n this.props.actions.state = ComponentStates.ENABLED;\n }\n\n if (this.props.state === ComponentStates.DISABLED) {\n this.props.actions.state = ComponentStates.DISABLED;\n }\n\n return [this.props.actions];\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IonHeader } from '@ionic/angular/standalone';\nimport { ToolbarComponent } from '../toolbar/toolbar.component';\nimport { HeaderMetadata } from './types';\n\n@Component({\n selector: 'val-header',\n standalone: true,\n imports: [IonHeader, ToolbarComponent],\n template: `\n <ion-header [class.ion-no-border]=\"!props.bordered\" [translucent]=\"props.translucent\">\n <val-toolbar [props]=\"props.toolbar\" (onClick)=\"clickHandler($event)\"></val-toolbar>\n </ion-header>\n `,\n styleUrls: ['./header.component.scss'],\n})\n/**\n * HeaderComponent\n *\n * Componente de encabezado reutilizable para aplicaciones Ionic/Angular.\n * Permite mostrar una barra de herramientas (toolbar) configurable.\n *\n * @example\n * <val-header [props]=\"headerProps\" (onClick)=\"handleHeaderAction($event)\"></val-header>\n *\n * @input props {HeaderMetadata} - Metadatos del encabezado y su toolbar.\n * @output onClick - Emite el token de la acción clicada en la toolbar.\n */\nexport class HeaderComponent implements OnInit {\n /**\n * Metadatos del encabezado y su toolbar.\n */\n @Input()\n props: HeaderMetadata;\n\n /**\n * Evento emitido al hacer click en una acción de la toolbar.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor() {}\n\n ngOnInit() {}\n\n /**\n * Emite el token de la acción clicada en la toolbar.\n * @param token Token de la acción\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport {\n IonAvatar,\n IonButton,\n IonIcon,\n IonItem,\n IonLabel,\n IonList,\n IonListHeader,\n IonNote,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport { IconService } from '../../../services/icons.service';\nimport { resolveColor } from '../../../shared/utils/styles';\nimport { ComponentStates } from '../../types';\nimport { ListMetadata } from './types';\n\n@Component({\n selector: 'val-item-list',\n standalone: true,\n imports: [\n RouterLink,\n NgStyle,\n NgClass,\n IonList,\n IonListHeader,\n IonLabel,\n IonNote,\n IonItem,\n IonAvatar,\n IonIcon,\n IonButton,\n IonSpinner,\n ],\n template: `\n <ion-list\n [inset]=\"props.rounded\"\n [class.shadowed]=\"props.shadowed\"\n [class.bordered]=\"props.bordered\"\n [style.borderColor]=\"this.color()\"\n >\n @if (props.title) {\n <ion-list-header>\n <ion-label>{{ props.title }}</ion-label>\n </ion-list-header>\n }\n @for (item of props.items; track item.token) {\n @if (item.mode == 'justext') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n\n @if (item.subtitle) {\n <p>{{ item.subtitle }}</p>\n }\n </ion-label>\n\n @if (item.endNote) {\n <ion-note slot=\"end\">{{ item.endNote }}</ion-note>\n }\n </ion-item>\n }\n\n @if (item.mode == 'actionable') {\n <ion-item [lines]=\"item.lines\" [button]=\"item.clickable\" [disabled]=\"item.disabled\">\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.endNote) {\n <h3>{{ item.endNote }}</h3>\n }\n\n @if (item.subtitle) {\n <ion-note color=\"medium\"> {{ item.subtitle }} </ion-note>\n }\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n\n @if (item.actions) {\n @for (action of item.actions; track action.token) {\n <ion-button\n fill=\"outline\"\n color=\"dark\"\n slot=\"end\"\n [disabled]=\"action.state === states.WORKING\"\n (click)=\"onActionClickHandler(action.token)\"\n >\n @if (action.state !== states.WORKING) {\n @if (action.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"action.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n {{ action.description }}\n }\n\n @if (action.state === states.WORKING) {\n <ion-spinner class=\"action-spinner\" name=\"circular\"></ion-spinner>\n }\n </ion-button>\n }\n }\n </ion-item>\n }\n\n @if (item.mode == 'route') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n [routerLink]=\"item.routerLink\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n @if (item.icon) {\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h2>{{ item.text }}</h2>\n\n @if (item.comments) {\n <ion-note color=\"medium\"> {{ item.comments }} </ion-note>\n }\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'subtitule') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n @if (item.unreadIndicator) {\n <div class=\"unread-indicator-wrapper\" slot=\"start\">\n <div class=\"unread-indicator\"></div>\n </div>\n }\n\n <ion-label [ngClass]=\"{ 'ion-text-nowrap': item.ellipsis }\">\n <h1>{{ item.text }}</h1>\n <p>{{ item.subtitle }}</p>\n </ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'avatar') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-avatar aria-hidden=\"true\" slot=\"start\">\n <img alt=\"\" [src]=\"item.image\" />\n </ion-avatar>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n\n @if (item.mode == 'icon') {\n <ion-item\n [lines]=\"item.lines\"\n [button]=\"item.clickable\"\n [disabled]=\"item.disabled\"\n (click)=\"clickHandler(item.token)\"\n >\n <ion-icon aria-hidden=\"true\" [name]=\"item.icon\" size=\"medium\" slot=\"start\"></ion-icon>\n <ion-label>{{ item.text }}</ion-label>\n </ion-item>\n }\n }\n </ion-list>\n `,\n styleUrls: ['./item-list.component.scss'],\n})\n/**\n * ItemListComponent\n *\n * Componente de lista reutilizable para mostrar una colección de elementos con diferentes modos de visualización (texto, subtítulo, avatar, icono, ruta, acciones).\n * Permite acciones por elemento, indicadores de no leído, y personalización de estilos.\n *\n * @example\n * <val-item-list [props]=\"{ title: 'Usuarios', items: [{ text: 'Juan', mode: 'avatar', image: 'avatar.jpg' }] }\" (onClick)=\"handleClick($event)\"></val-item-list>\n *\n * @input props {ListMetadata} - Metadatos de la lista y sus elementos.\n * @output onClick - Emite el token del elemento clicado.\n * @output onActionClick - Emite el token de la acción clicada en un elemento.\n */\nexport class ItemListComponent implements OnInit {\n states = ComponentStates;\n defaultColor = 'primary';\n\n /**\n * Metadatos de la lista y sus elementos.\n */\n @Input()\n props: ListMetadata;\n\n /**\n * Evento emitido al hacer click en un elemento de la lista.\n */\n @Output()\n onClick = new EventEmitter<string>();\n\n /**\n * Evento emitido al hacer click en una acción de un elemento.\n */\n @Output()\n onActionClick = new EventEmitter<string>();\n\n constructor(icon: IconService) {}\n\n ngOnInit() {}\n\n /**\n * Emite el token del elemento clicado.\n * @param token Token del elemento\n */\n clickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n /**\n * Emite el token de la acción clicada.\n * @param token Token de la acción\n */\n onActionClickHandler(token?: string) {\n this.onActionClick.emit(token);\n }\n\n /**\n * Devuelve el color de borde de la lista.\n */\n color() {\n return resolveColor(this.props.color || this.defaultColor);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ImageComponent } from '../../atoms/image/image.component';\nimport { BannerComponent } from '../banner/banner.component';\nimport { NoContentMetadata } from './types';\n\n@Component({\n selector: 'val-no-content',\n standalone: true,\n imports: [ImageComponent, BannerComponent],\n template: `\n @if (props.topContent) {\n <div>\n <val-banner [props]=\"props.topContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n }\n <val-image class=\"image-container\" [props]=\"props.image\"></val-image>\n <div>\n <val-banner [props]=\"props.bottomContent\" (onClick)=\"onClickHandler($event)\"></val-banner>\n </div>\n `,\n styleUrls: ['./no-content.component.scss'],\n})\n/**\n * NoContentComponent\n *\n * Componente para mostrar una pantalla de \"sin contenido\" con imagen y banners opcionales arriba y abajo.\n * Útil para estados vacíos, errores o mensajes informativos.\n *\n * @example\n * <val-no-content [props]=\"{ image: { src: 'empty.svg' }, bottomContent: { ... } }\"></val-no-content>\n *\n * @input props {NoContentMetadata} - Metadatos de la imagen y banners a mostrar.\n * @output onClick - Emite el token de acción de los banners si corresponde.\n */\nexport class NoContentComponent implements OnInit, OnChanges {\n @Input()\n props: NoContentMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n // Forzar detección de cambios múltiple para asegurar actualización\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n }\n }\n\n onClickHandler(token: string) {\n this.onClick.emit(token);\n }\n}\n","/**\n * Tipos y metadatos para el componente WizardComponent.\n * Permiten definir los pasos, botones, estado y navegación del wizard.\n */\nimport { ButtonMetadata, ComponentState } from '../../types';\nimport { NoContentMetadata } from '../no-content/types';\n\n/**\n * Metadatos del wizard.\n * @property state Estado global del wizard.\n * @property current Paso actual.\n * @property steps Colección de pasos.\n * @property error Paso de error.\n */\nexport type WizardMetadata = {\n state: ComponentState;\n current: number;\n steps: Steps;\n error: Step;\n};\n\n/**\n * Representa un paso del wizard.\n * @property titles Metadatos de \"no contenido\" para el paso.\n * @property buttons Botones disponibles en el paso.\n */\nexport type Step = {\n titles: NoContentMetadata;\n buttons: ButtonMetadata[];\n};\n\n/**\n * Colección de pasos del wizard, indexados por número de paso.\n */\nexport type Steps = {\n [step: number]: Step;\n};\n\n/**\n * Enumera los posibles movimientos de navegación en el wizard.\n */\nexport enum MOTION {\n BACKWARD,\n FORWARD,\n RETRY,\n}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ProgressBarComponent } from '../../../atoms/progress-bar/progress-bar.component';\nimport { ButtonGroupComponent } from '../../../molecules/button-group/button-group.component';\nimport { ButtonMetadata, ComponentStates } from '../../../types';\nimport { FooterComponent } from '../../footer/footer.component';\nimport { MOTION, Step, WizardMetadata } from '../types';\n\n@Component({\n selector: 'val-wizard-footer',\n standalone: true,\n imports: [FooterComponent, ProgressBarComponent, ButtonGroupComponent],\n template: `\n <val-footer\n [props]=\"{\n bordered: false,\n translucent: false,\n toolbar: {\n title: '',\n actions: [],\n color: '',\n withBack: false,\n withActions: false,\n },\n }\"\n >\n <val-progress-bar\n extra\n [props]=\"{ progress: Progress, color: '', type: 'determinate', buffer: 1, size: 'small', rounded: false }\"\n ></val-progress-bar>\n <val-button-group\n extra\n [props]=\"{ buttons: actions, position: 'spaced', columned: false }\"\n (onClick)=\"clickHandler($event)\"\n ></val-button-group>\n </val-footer>\n `,\n styleUrls: ['./wizard-footer.component.scss'],\n})\nexport class WizardFooterComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.cdr.detectChanges();\n }\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('right')) {\n this.tryToStep(MOTION.FORWARD);\n }\n if (token.includes('left')) {\n this.tryToStep(MOTION.BACKWARD);\n }\n }\n\n get Current(): Step {\n return this.props.steps[this.props.current];\n }\n\n get Progress(): number {\n if (this.props.steps && this.props.current) {\n return this.props.current / Object.keys(this.props.steps).length;\n }\n return 0;\n }\n\n get actions(): ButtonMetadata[] {\n if (this.props.state === ComponentStates.ERROR && this.Current.buttons.length > 1) {\n this.Current.buttons[1].state = ComponentStates.DISABLED;\n }\n\n if (this.props.current === 1 && this.Current.buttons.length > 1) {\n return [this.Current.buttons[1]];\n }\n return this.Current.buttons;\n }\n\n tryToStep(motion: MOTION): void {\n this.onClick.emit({ current: this.props.current, motion });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { LangService } from '../../../services/lang-provider/lang-provider.service';\nimport { goToTop } from '../../../shared/utils/dom';\nimport { ContentLoaderComponent } from '../../molecules/content-loader/content-loader.component';\nimport { ComponentStates } from '../../types';\nimport { NoContentComponent } from '../no-content/no-content.component';\nimport { MOTION, Step, WizardMetadata } from './types';\n\n@Component({\n selector: 'val-wizard',\n standalone: true,\n imports: [CommonModule, NoContentComponent, ContentLoaderComponent],\n template: `\n <div [id]=\"wrapperId\" class=\"wrapper\">\n <ng-container *ngIf=\"props.state !== 'ERROR'\">\n <val-no-content [props]=\"currentStepTitles\" [attr.data-step]=\"props.current\"></val-no-content>\n <div class=\"step\">\n <div *ngIf=\"props.state === 'WORKING'\">\n <val-content-loader\n [props]=\"{\n name: 'circular',\n color: 'primary',\n size: 'large',\n text: loadingText,\n }\"\n />\n </div>\n <ng-content select=\"[step]\"></ng-content>\n </div>\n </ng-container>\n <ng-container *ngIf=\"props.state === 'ERROR'\">\n <val-no-content [props]=\"props.error.titles\" (onClick)=\"clickHandler($event)\"></val-no-content>\n </ng-container>\n </div>\n `,\n styleUrls: ['./wizard.component.scss'],\n})\nexport class WizardComponent implements OnInit, OnChanges {\n @Input()\n props: WizardMetadata;\n\n @Output()\n onClick = new EventEmitter<{ current: number; motion: MOTION }>();\n\n wrapperId = 'wizard-wrapper';\n currentStep: Step | null = null;\n currentStepTitles: any = null;\n loadingText: string;\n\n private cdr = inject(ChangeDetectorRef);\n private langService = inject(LangService);\n\n constructor() {\n this.loadingText = this.langService.getText('_global', 'pleaseWait', 'Por favor espere...');\n }\n\n ngOnInit() {\n this.updateCurrentStep();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['props']) {\n this.updateCurrentStep();\n this.cdr.detectChanges();\n }\n }\n\n private updateCurrentStep(): void {\n if (this.props?.steps && this.props?.current) {\n this.currentStep = this.props.steps[this.props.current];\n // Forzar nueva referencia de objeto para asegurar detección de cambios\n // Agregar timestamp para garantizar que es un objeto completamente nuevo\n this.currentStepTitles = this.currentStep?.titles\n ? {\n ...JSON.parse(JSON.stringify(this.currentStep.titles)),\n _timestamp: Date.now(), // Forzar nueva referencia\n _step: this.props.current, // Agregar identificador del paso\n }\n : null;\n\n // Forzar detección de cambios inmediatamente\n this.cdr.detectChanges();\n }\n }\n\n working() {\n this.props.state = ComponentStates.WORKING;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.DISABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n done() {\n if (this.props.state === ComponentStates.ENABLED) {\n return;\n }\n\n this.props.state = ComponentStates.ENABLED;\n if (this.Current?.buttons) {\n this.Current.buttons.forEach(button => {\n button.state = ComponentStates.ENABLED;\n });\n }\n this.cdr.markForCheck();\n }\n\n get Current(): Step {\n if (this.props?.steps && this.props?.current) {\n return this.props.steps[this.props.current];\n }\n return this.currentStep || { titles: null, buttons: [] };\n }\n\n setCurrent(newStep: number) {\n if (newStep === this.props.current) {\n return;\n }\n\n this.props.current = newStep;\n this.updateCurrentStep();\n\n // Forzar múltiples ciclos de detección de cambios\n this.cdr.detectChanges();\n setTimeout(() => {\n this.cdr.detectChanges();\n }, 0);\n\n goToTop(this.wrapperId);\n }\n\n setError(error: string) {\n if (this.props.state === ComponentStates.ERROR) {\n return;\n }\n\n this.props.error.titles.bottomContent.content.bellowTitle.content = error;\n this.props.state = ComponentStates.ERROR;\n this.cdr.markForCheck();\n goToTop(this.wrapperId);\n }\n\n reset() {\n this.props.error.titles.bottomContent.content.bellowTitle.content = '';\n this.done();\n }\n\n clickHandler(token?: string) {\n if (!token) {\n return;\n }\n if (token.includes('retry')) {\n this.reset();\n }\n\n this.onClick.emit({ current: this.props.current, motion: MOTION.RETRY });\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'val-layout',\n standalone: true,\n imports: [],\n template: `\n <div class=\"layout-container\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrl: './layout.component.scss',\n})\nexport class LayoutComponent {}\n","import { NgStyle } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular/standalone';\nimport { ThemeService } from '../../../services/theme.service';\nimport { DividerComponent } from '../../atoms/divider/divider.component';\nimport { ExpandableTextComponent } from '../../molecules/expandable-text/expandable-text.component';\nimport { LinkComponent } from '../../molecules/link/link.component';\nimport { HeaderComponent } from '../../organisms/header/header.component';\nimport { LayoutComponent } from '../layout/layout.component';\nimport { SimpleMetadata } from './types';\n\n@Component({\n selector: 'val-simple',\n standalone: true,\n imports: [\n NgStyle,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonContent,\n HeaderComponent,\n LayoutComponent,\n DividerComponent,\n LinkComponent,\n ExpandableTextComponent,\n ],\n template: `\n <val-header [props]=\"props.header\" />\n\n <ion-content\n [fullscreen]=\"true\"\n [ngStyle]=\"{\n '--background': theme.IsDark ? 'var(--ion-background-color)' : props.background,\n }\"\n [scrollEvents]=\"true\"\n (ionScroll)=\"onScrollHandler($event)\"\n >\n <ion-header collapse=\"condense\">\n <ion-toolbar style=\"--background: transparent;\">\n <ion-title style=\"padding: 0;\" size=\"large\">{{ props.pageTitle }}</ion-title>\n </ion-toolbar>\n </ion-header>\n @if (props.pageDescription) {\n <div class=\"description-container\">\n <val-expandable-text\n [props]=\"{\n limit: 180,\n content: props.pageDescription,\n color: 'primary',\n expandText: 'más',\n }\"\n />\n </div>\n }\n @if (props.link) {\n <val-link [props]=\"props.link\" (onClick)=\"onClickHandler($event)\"></val-link>\n }\n @if (props.withDivider) {\n <val-divider [props]=\"{ fill: 'solid', size: 'medium', color: 'dark' }\" />\n }\n <val-layout>\n <ng-content select=\"[inner-container]\"></ng-content>\n </val-layout>\n </ion-content>\n <ng-content select=\"[outter-container]\"></ng-content>\n `,\n styles: `\n .description-container {\n padding: 0px 16px;\n }\n `,\n})\nexport class SimpleComponent {\n @Input()\n props: SimpleMetadata;\n\n @Output()\n onClick = new EventEmitter<string>();\n\n @Output()\n onScrollEvent = new EventEmitter<boolean>();\n\n theme = inject(ThemeService);\n\n onClickHandler(token?: string) {\n this.onClick.emit(token);\n }\n\n onScrollHandler($event: Event) {\n this.onScrollEvent.emit(true);\n }\n}\n","import { LanguagesContent, TextContent } from '../types';\n\nconst text: LanguagesContent = {\n es: {\n spanish: 'Español',\n english: 'Inglés',\n },\n en: {\n spanish: 'Spanish',\n english: 'English',\n },\n};\n\nexport default new TextContent(text);\n","import LangSettings from './components/lang-settings';\nimport { LanguagesContent, TextContent } from './types';\n\nexport interface Provider {\n [x: string]: TextContent;\n}\n\n/**\n * Global content that can be used across all components.\n * These are common texts like buttons, actions, states, etc.\n * Structure: {es: {key1: 'value1', key2: 'value2'}, en: {key1: 'value1', key2: 'value2'}, fr: {...}}\n *\n * Note: You can add any language code. The system will automatically detect available languages\n * and provide intelligent fallbacks with warnings for missing translations.\n */\nconst globalContentData: LanguagesContent = {\n es: {\n // Common buttons\n ok: 'Aceptar',\n cancel: 'Cancelar',\n save: 'Guardar',\n delete: 'Eliminar',\n edit: 'Editar',\n close: 'Cerrar',\n back: 'Volver',\n next: 'Siguiente',\n previous: 'Anterior',\n finish: 'Finalizar',\n continue: 'Continuar',\n\n // Common actions\n add: 'Agregar',\n remove: 'Quitar',\n search: 'Buscar',\n filter: 'Filtrar',\n sort: 'Ordenar',\n refresh: 'Actualizar',\n\n // Common states and messages\n loading: 'Cargando...',\n pleaseWait: 'Por favor espere...',\n noData: 'No hay datos disponibles',\n error: 'Error',\n success: 'Éxito',\n warning: 'Advertencia',\n info: 'Información',\n language: 'Idioma',\n\n // Common confirmations\n areYouSure: '¿Estás seguro?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Español',\n languageName_en: 'Inglés',\n languageName_fr: 'Francés',\n languageName_de: 'Alemán',\n languageName_pt: 'Portugués',\n languageName_it: 'Italiano',\n languageName_zh: 'Chino',\n languageName_ja: 'Japonés',\n languageName_ko: 'Coreano',\n languageName_ru: 'Ruso',\n languageName_ar: 'Árabe',\n deleteConfirmation: '¿Estás seguro de que deseas eliminar {itemName}?',\n unsavedChanges: 'Tienes cambios sin guardar. ¿Deseas continuar?',\n\n // Common placeholders\n searchPlaceholder: 'Buscar...',\n select: 'Seleccionar...',\n selectOption: 'Seleccione una opción',\n selectLanguage: 'Seleccionar idioma...',\n\n // Status messages\n copied: '¡Copiado al portapapeles!',\n seeMore: 'ver más',\n selected: 'seleccionados',\n\n // Image preview\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n // Common buttons\n ok: 'OK',\n cancel: 'Cancel',\n save: 'Save',\n delete: 'Delete',\n edit: 'Edit',\n close: 'Close',\n back: 'Back',\n next: 'Next',\n previous: 'Previous',\n finish: 'Finish',\n continue: 'Continue',\n\n // Common actions\n add: 'Add',\n remove: 'Remove',\n search: 'Search',\n filter: 'Filter',\n sort: 'Sort',\n refresh: 'Refresh',\n\n // Common states and messages\n loading: 'Loading...',\n pleaseWait: 'Please wait...',\n noData: 'No data available',\n error: 'Error',\n success: 'Success',\n warning: 'Warning',\n info: 'Information',\n language: 'Language',\n\n // Common confirmations\n areYouSure: 'Are you sure?',\n\n // Language names (translated) - flat keys for type compatibility\n languageName_es: 'Spanish',\n languageName_en: 'English',\n languageName_fr: 'French',\n languageName_de: 'German',\n languageName_pt: 'Portuguese',\n languageName_it: 'Italian',\n languageName_zh: 'Chinese',\n languageName_ja: 'Japanese',\n languageName_ko: 'Korean',\n languageName_ru: 'Russian',\n languageName_ar: 'Arabic',\n deleteConfirmation: 'Are you sure you want to delete {itemName}?',\n unsavedChanges: 'You have unsaved changes. Do you want to continue?',\n\n // Common placeholders\n searchPlaceholder: 'Search...',\n select: 'Select...',\n selectOption: 'Select an option',\n selectLanguage: 'Select language...',\n\n // Status messages\n copied: 'Copied to clipboard!',\n seeMore: 'see more',\n selected: 'selected',\n\n // Image preview\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst GlobalContent = new TextContent(globalContentData);\n\n// ImageComponent specific content\nconst imageComponentData: LanguagesContent = {\n es: {\n close: 'Cerrar',\n zoomIn: 'Acercar',\n zoomOut: 'Alejar',\n resetZoom: 'Restablecer zoom',\n },\n en: {\n close: 'Close',\n zoomIn: 'Zoom in',\n zoomOut: 'Zoom out',\n resetZoom: 'Reset zoom',\n },\n};\n\nconst ImageComponentContent = new TextContent(imageComponentData);\n\nconst content: Provider = {\n _global: GlobalContent,\n LangSettings,\n ImageComponent: ImageComponentContent,\n};\n\nexport default content;\n\n// Export named exports for user convenience\nexport { content, GlobalContent, globalContentData };\n","import { Injectable } from '@angular/core';\nimport { ToastController, ToastOptions } from '@ionic/angular';\n\n/**\n * Service for displaying toast notifications using Ionic's ToastController.\n * Provides methods to show and present toasts with custom options.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastService {\n constructor(private toastController: ToastController) {}\n\n /**\n * Presents a toast notification with the given options.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n async presentToast(request: ToastOptions) {\n const toast = await this.toastController.create({\n message: request.message,\n duration: request.duration,\n position: request.position,\n color: request.color,\n });\n\n await toast.present();\n }\n\n /**\n * Shows a toast notification and logs the result.\n * @param request Toast options (message, duration, position, color, etc.)\n */\n show(request: ToastOptions) {\n this.presentToast(request)\n .then(() => {\n console.info('Toast created');\n })\n .catch(error => {\n console.error(JSON.stringify(error));\n });\n }\n}\n","import { Observable, map } from 'rxjs';\nimport { LangService } from '../../services/lang-provider/lang-provider.service';\n\n/**\n * Content utilities for reactive text binding in components.\n *\n * These utilities provide a convenient way to bind component properties\n * to language content that automatically updates when the language changes.\n */\n\n/**\n * Unified configuration for content binding with optional interpolation.\n * Supports both simple content retrieval and content with dynamic values.\n */\nexport interface ContentConfig {\n /**\n * The component class name (used for content lookup).\n * If omitted, searches in global content (_global namespace).\n */\n className?: string;\n /** The content key to retrieve */\n key: string;\n /** Optional fallback text if content is not found */\n fallback?: string;\n /** Optional object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * @deprecated Use ContentConfig with interpolation property instead.\n * This interface is kept for backward compatibility.\n */\nexport interface InterpolatedContentConfig extends ContentConfig {\n /** Object with values to interpolate into the content string */\n interpolation?: Record<string, string | number>;\n}\n\n/**\n * Create a reactive content observable from a content key.\n * This is the primary utility for the `fromContent` pattern with unified support\n * for both simple content and content with interpolation.\n *\n * @param langService - The language service instance\n * @param config - Content configuration with optional interpolation\n * @returns Observable that emits the content string and updates on language change\n *\n * @example Simple content:\n * ```typescript\n * // Component-specific content\n * this.title$ = fromContent(this.langService, {\n * className: 'HeaderComponent',\n * key: 'title',\n * fallback: 'Default Title'\n * });\n *\n * // Global content (no className needed)\n * this.saveButton$ = fromContent(this.langService, {\n * key: 'save'\n * });\n * ```\n *\n * @example Content with interpolation:\n * ```typescript\n * // Content: \"Hello {name}, you have {count} messages\"\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * // Results in: \"Hello John, you have 5 messages\"\n * ```\n */\nexport function fromContent(langService: LangService, config: ContentConfig): Observable<string> {\n // Use _global as default className if not provided\n const finalClassName = config.className || '_global';\n\n const contentObservable = langService.getContent(finalClassName, config.key, config.fallback);\n\n // If interpolation is provided, apply it\n if (config.interpolation) {\n return contentObservable.pipe(\n map(content => interpolateContent(content, config.interpolation))\n );\n }\n\n return contentObservable;\n}\n\n/**\n * Create a reactive content observable with interpolation support.\n *\n * @deprecated Use fromContent() with interpolation property instead.\n * This method is kept for backward compatibility.\n *\n * @param langService - The language service instance\n * @param config - Interpolated content configuration\n * @returns Observable that emits the interpolated content string\n *\n * @example Migration:\n * ```typescript\n * // OLD (deprecated):\n * this.greeting$ = fromContentWithInterpolation(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n *\n * // NEW (recommended):\n * this.greeting$ = fromContent(this.langService, {\n * className: 'WelcomeComponent',\n * key: 'greeting',\n * interpolation: { name: 'John', count: 5 }\n * });\n * ```\n */\nexport function fromContentWithInterpolation(\n langService: LangService,\n config: InterpolatedContentConfig\n): Observable<string> {\n // Delegate to the unified fromContent method\n return fromContent(langService, config);\n}\n\n/**\n * Create multiple reactive content observables at once.\n * Useful when a component needs several content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @param keys - Array of content keys to retrieve\n * @returns Observable that emits an object with all requested content\n *\n * @example\n * ```typescript\n * this.content$ = fromMultipleContent(this.langService, 'FormComponent', [\n * 'title', 'submitButton', 'cancelButton'\n * ]);\n *\n * // In template\n * <ng-container *ngIf=\"content$ | async as content\">\n * <h2>{{ content.title }}</h2>\n * <button>{{ content.submitButton }}</button>\n * <button>{{ content.cancelButton }}</button>\n * </ng-container>\n * ```\n */\nexport function fromMultipleContent(\n langService: LangService,\n className: string,\n keys: string[]\n): Observable<Record<string, string>> {\n return langService.getMultipleContent(className, keys);\n}\n\n/**\n * Helper function to interpolate values into a content string.\n * Replaces placeholders in the format {key} with corresponding values.\n *\n * @param content - The content string with placeholders\n * @param values - Object with values to interpolate\n * @returns The interpolated string\n *\n * @example\n * ```typescript\n * const result = interpolateContent(\"Hello {name}!\", { name: \"World\" });\n * // Returns: \"Hello World!\"\n * ```\n */\nexport function interpolateContent(\n content: string,\n values?: Record<string, string | number>\n): string {\n if (!values) return content;\n\n return Object.entries(values).reduce((result, [key, value]) => {\n return result.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), String(value));\n }, content);\n}\n\n/**\n * Type-safe content key builder for better IDE support.\n * This is a utility type that can be used to ensure content keys exist.\n *\n * @example\n * ```typescript\n * // Define your component's content keys\n * interface MyComponentContent {\n * title: string;\n * description: string;\n * submitButton: string;\n * }\n *\n * // Use with type safety\n * const titleKey: ContentKey<MyComponentContent> = 'title'; // ✓ Valid\n * const invalidKey: ContentKey<MyComponentContent> = 'invalid'; // ✗ Type error\n * ```\n */\nexport type ContentKey<T> = keyof T & string;\n\n/**\n * Factory function to create a content helper bound to a specific component class.\n * This creates a more convenient API for components that need multiple content strings.\n *\n * @param langService - The language service instance\n * @param className - The component class name\n * @returns Object with convenient methods for content retrieval\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private content = createContentHelper(this.langService, 'MyComponent');\n *\n * constructor(private langService: LangService) {}\n *\n * ngOnInit() {\n * this.title$ = this.content.get('title');\n * this.allContent$ = this.content.getMultiple(['title', 'description']);\n * }\n * }\n * ```\n */\nexport function createContentHelper(langService: LangService, className: string) {\n return {\n /**\n * Get a single content string reactively.\n */\n get(key: string, fallback?: string): Observable<string> {\n return fromContent(langService, { className, key, fallback });\n },\n\n /**\n * Get multiple content strings reactively.\n */\n getMultiple(keys: string[]): Observable<Record<string, string>> {\n return fromMultipleContent(langService, className, keys);\n },\n\n /**\n * Get content with interpolation.\n */\n getWithInterpolation(\n key: string,\n interpolation: Record<string, string | number>,\n fallback?: string\n ): Observable<string> {\n return fromContentWithInterpolation(langService, {\n className,\n key,\n interpolation,\n fallback,\n });\n },\n\n /**\n * Get a single content string synchronously (current language only).\n */\n getText(key: string, fallback?: string): string {\n return langService.getText(className, key, fallback);\n },\n\n /**\n * Check if a content key exists.\n */\n hasContent(key: string): boolean {\n return langService.hasContent(className, key);\n },\n };\n}\n","/*\n * Public API Surface of valtech-components\n */\n\nexport * from './lib/components/atoms/avatar/avatar.component';\nexport * from './lib/components/atoms/avatar/types';\nexport * from './lib/components/atoms/box/box.component';\nexport * from './lib/components/atoms/box/types';\nexport * from './lib/components/atoms/button/button.component';\nexport * from './lib/components/atoms/button/factory';\nexport * from './lib/components/atoms/display/display.component';\nexport * from './lib/components/atoms/display/types';\nexport * from './lib/components/atoms/divider/divider.component';\nexport * from './lib/components/atoms/divider/types';\nexport * from './lib/components/atoms/href/href.component';\nexport * from './lib/components/atoms/href/types';\nexport * from './lib/components/atoms/icon/icon.component';\nexport * from './lib/components/atoms/icon/types';\nexport * from './lib/components/atoms/image/image.component';\nexport * from './lib/components/atoms/image/types';\nexport * from './lib/components/atoms/progress-bar/progress-bar.component';\nexport * from './lib/components/atoms/progress-bar/types';\nexport * from './lib/components/atoms/text/text.component';\nexport * from './lib/components/atoms/text/types';\nexport * from './lib/components/atoms/title/title.component';\nexport * from './lib/components/atoms/title/types';\n\nexport * from './lib/components/molecules/action-header/action-header.component';\nexport * from './lib/components/molecules/action-header/types';\nexport * from './lib/components/molecules/alert-box/alert-box.component';\nexport * from './lib/components/molecules/alert-box/types';\nexport * from './lib/components/molecules/button-group/button-group.component';\nexport * from './lib/components/molecules/button-group/types';\nexport * from './lib/components/molecules/card/card.component';\nexport * from './lib/components/molecules/card/types';\nexport * from './lib/components/molecules/check-input/check-input.component';\nexport * from './lib/components/molecules/code-display/code-display.component';\nexport * from './lib/components/molecules/code-display/types';\nexport * from './lib/components/molecules/command-display/command-display.component';\nexport * from './lib/components/molecules/command-display/types';\nexport * from './lib/components/molecules/comment-input/comment-input.component';\nexport * from './lib/components/molecules/content-loader/content-loader.component';\nexport * from './lib/components/molecules/content-loader/types';\nexport * from './lib/components/molecules/date-input/date-input.component';\nexport * from './lib/components/molecules/email-input/email-input.component';\nexport * from './lib/components/molecules/expandable-text/expandable-text.component';\nexport * from './lib/components/molecules/expandable-text/types';\nexport * from './lib/components/molecules/file-input/file-input.component';\nexport * from './lib/components/molecules/hint/hint.component';\nexport * from './lib/components/molecules/hour-input/hour-input.component';\nexport * from './lib/components/molecules/info/info.component';\nexport * from './lib/components/molecules/info/types';\nexport * from './lib/components/molecules/language-selector/language-selector.component';\nexport * from './lib/components/molecules/language-selector/types';\nexport * from './lib/components/molecules/layered-card/layered-card.component';\nexport * from './lib/components/molecules/layered-card/types';\nexport * from './lib/components/molecules/link/link.component';\nexport * from './lib/components/molecules/link/types';\nexport * from './lib/components/molecules/links-cake/links-cake.component';\nexport * from './lib/components/molecules/links-cake/types';\nexport * from './lib/components/molecules/multi-select-search/multi-select-search.component';\nexport * from './lib/components/molecules/multi-select-simple/multi-select-simple.component';\nexport * from './lib/components/molecules/notes-box/notes-box.component';\nexport * from './lib/components/molecules/notes-box/types';\nexport * from './lib/components/molecules/number-from-to/number-from-to.component';\nexport * from './lib/components/molecules/number-input/number-input.component';\nexport * from './lib/components/molecules/password-input/password-input.component';\nexport * from './lib/components/molecules/pill/pill.component';\nexport * from './lib/components/molecules/pill/types';\nexport * from './lib/components/molecules/pin-input/pin-input.component';\nexport * from './lib/components/molecules/plain-code-box/plain-code-box.component';\nexport * from './lib/components/molecules/plain-code-box/types';\nexport * from './lib/components/molecules/popover-selector/popover-selector.component';\nexport * from './lib/components/molecules/popover-selector/types';\nexport * from './lib/components/molecules/progress-status/progress-status.component';\nexport * from './lib/components/molecules/progress-status/types';\nexport * from './lib/components/molecules/prompter/prompter.component';\nexport * from './lib/components/molecules/prompter/types';\nexport * from './lib/components/molecules/radio-input/radio-input.component';\nexport * from './lib/components/molecules/searchbar/searchbar.component';\nexport * from './lib/components/molecules/select-input/select-input.component';\nexport * from './lib/components/molecules/select-search/select-search.component';\nexport * from './lib/components/molecules/text-input/text-input.component';\nexport * from './lib/components/molecules/title-block/title-block.component';\nexport * from './lib/components/molecules/title-block/types';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\nexport * from './lib/components/organisms/banner/banner.component';\nexport * from './lib/components/organisms/banner/types';\nexport * from './lib/components/organisms/footer/footer.component';\nexport * from './lib/components/organisms/form/factory';\nexport * from './lib/components/organisms/form/form-footer/form-footer.component';\nexport * from './lib/components/organisms/form/form.component';\nexport * from './lib/components/organisms/header/header.component';\nexport * from './lib/components/organisms/header/types';\nexport * from './lib/components/organisms/item-list/item-list.component';\nexport * from './lib/components/organisms/item-list/types';\nexport * from './lib/components/organisms/no-content/no-content.component';\nexport * from './lib/components/organisms/no-content/types';\nexport * from './lib/components/organisms/toolbar/toolbar.component';\nexport * from './lib/components/organisms/toolbar/types';\nexport * from './lib/components/organisms/wizard/types';\nexport * from './lib/components/organisms/wizard/wizard-footer/wizard-footer.component';\nexport * from './lib/components/organisms/wizard/wizard.component';\n\nexport * from './lib/components/organisms/article/article.component';\nexport * from './lib/components/organisms/article/types';\n\nexport * from './lib/components/templates/layout/layout.component';\nexport * from './lib/components/templates/simple/simple.component';\nexport * from './lib/components/templates/simple/types';\n\nexport * from './lib/services/download.service';\nexport * from './lib/services/icons.service';\nexport * from './lib/services/in-app-browser.service';\nexport * from './lib/services/lang-provider/content';\nexport * from './lib/services/lang-provider/lang-provider.service';\nexport * from './lib/services/lang-provider/types';\nexport * from './lib/services/link-processor.service';\nexport * from './lib/services/local-storage.service';\nexport * from './lib/services/navigation.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/toast.service';\nexport * from './lib/services/types';\n\nexport * from './lib/components/types';\nexport * from './lib/shared/pipes/process-links.pipe';\nexport * from './lib/shared/utils/content';\nexport * from './lib/shared/utils/dom';\nexport * from './lib/shared/utils/form-defaults';\n// Export specific functions from simple-content to avoid conflicts\nexport {\n createReactiveContentMetadata,\n extractContentConfig,\n extractContentConfigWithInterpolation,\n interpolateStaticContent,\n ReactiveContentMetadata,\n ReactiveContentWithInterpolation,\n ReactiveTextMetadata,\n shouldUseReactiveContent,\n shouldUseReactiveContentWithInterpolation\n} from './lib/shared/utils/simple-content';\nexport * from './lib/shared/utils/styles';\nexport * from './lib/shared/utils/text';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IconService","i2","interpolateContent","fromContentWithInterpolation","i1.DownloadService","i2.IconService","i3.NavigationService","i4.LangService","i1","i1.LangService","i2.LinkProcessorService","map","i3","distinctUntilChanged"],"mappings":"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"}