{"version":3,"file":"zt-ui-components.mjs","sources":["../../../projects/zt-ui-components/src/lib/zt-ui-components.ts","../../../projects/zt-ui-components/src/lib/zt-button/button.component.ts","../../../projects/zt-ui-components/src/lib/zt-button/button.component.html","../../../projects/zt-ui-components/src/lib/zt-card/card.component.ts","../../../projects/zt-ui-components/src/lib/zt-card/card.component.html","../../../projects/zt-ui-components/src/lib/zt-input/input.component.ts","../../../projects/zt-ui-components/src/lib/zt-input/input.component.html","../../../projects/zt-ui-components/src/lib/zt-modal/zt-modal.component.ts","../../../projects/zt-ui-components/src/lib/zt-modal/zt-modal.component.html","../../../projects/zt-ui-components/src/lib/zt-select/select.component.ts","../../../projects/zt-ui-components/src/lib/zt-select/select.component.html","../../../projects/zt-ui-components/src/lib/zt-textarea/textarea.component.ts","../../../projects/zt-ui-components/src/lib/zt-textarea/textarea.component.html","../../../projects/zt-ui-components/src/lib/zt-toast/zt-toast.service.ts","../../../projects/zt-ui-components/src/lib/zt-toast/zt-toast.component.ts","../../../projects/zt-ui-components/src/lib/zt-toast/zt-toast.module.ts","../../../projects/zt-ui-components/src/lib/theme/default-themes.ts","../../../projects/zt-ui-components/src/lib/theme/theme-validation.service.ts","../../../projects/zt-ui-components/src/lib/theme/theme.service.ts","../../../projects/zt-ui-components/src/lib/theme/theme.directive.ts","../../../projects/zt-ui-components/src/lib/theme/index.ts","../../../projects/zt-ui-components/src/public-api.ts","../../../projects/zt-ui-components/src/zt-ui-components.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-zt-ui-components',\r\n  imports: [],\r\n  template: `\r\n    <p>\r\n      zt-ui-components works!\r\n    </p>\r\n  `,\r\n  styles: ``\r\n})\r\nexport class ZtUiComponents {\r\n\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  ElementRef,\r\n} from '@angular/core';\r\nimport { ThemeConfig } from '../theme/theme.types';\r\n\r\n/**\r\n * A customizable button component that supports various styles, sizes, themes, and variants.\r\n * It can be used as a standard button, submit button, or reset button with different visual appearances.\r\n *\r\n * @example\r\n * <zt-button variant=\"primary\" size=\"zt-md\" theme=\"light\">Click me</zt-button>\r\n * <zt-button variant=\"danger\" outline=\"true\" disabled=\"true\">Disabled</zt-button>\r\n */\r\n@Component({\r\n  selector: 'zt-button',\r\n  templateUrl: './button.component.html',\r\n  styleUrls: ['./button.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [],\r\n})\r\nexport class ButtonComponent implements OnInit {\r\n  constructor(private elementRef: ElementRef) {}\r\n  /**\r\n   * The type of the button element.\r\n   * @default 'button'\r\n   */\r\n  @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n\r\n  /**\r\n   * Whether the button is disabled.\r\n   * @default false\r\n   */\r\n  @Input() disabled = false;\r\n\r\n  /**\r\n   * The visual variant of the button.\r\n   * @default 'primary'\r\n   */\r\n  @Input() variant: 'default' | 'primary' | 'success' | 'info' | 'warning' | 'danger' | 'dark' | 'link' | 'round' | 'floating' = 'primary';\r\n\r\n  /**\r\n   * Whether to display the button as an outline style.\r\n   * @default false\r\n   */\r\n  @Input() outline = false;\r\n\r\n  /**\r\n   * The size of the button.\r\n   * @default 'zt-md'\r\n   */\r\n  @Input() size: 'zt-sm' | 'zt-md' | 'zt-lg' = 'zt-md';\r\n\r\n  /**\r\n   * The theme of the button.\r\n   * @default 'light'\r\n   * @deprecated Use global theming or ztTheme directive for local overrides\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'bootstrap' | 'material' = 'light';\r\n\r\n  /**\r\n   * Local theme override for this button component.\r\n   * Takes precedence over global theme.\r\n   */\r\n  @Input() ztTheme?: Partial<ThemeConfig>;\r\n\r\n  /**\r\n   * Dynamically applies CSS classes to the button element based on the component's properties.\r\n   * @returns A string of CSS classes.\r\n   */\r\n  @HostBinding('class') get buttonClass(): string {\r\n    let classes: string[] = [this.size, `theme-${this.theme}`];\r\n    if (this.outline) {\r\n      classes.push(`zt-${this.variant}-o`);\r\n    } else {\r\n      classes.push(`zt-${this.variant}`);\r\n    }\r\n    return classes.join(' ');\r\n  }\r\n\r\n  /**\r\n   * Sets the 'type' attribute on the button element.\r\n   * @returns The button type.\r\n   */\r\n  @HostBinding('attr.type') get buttonType(): string {\r\n    return this.type;\r\n  }\r\n\r\n  /**\r\n   * Sets the 'disabled' attribute on the button element when disabled is true.\r\n   * @returns true if disabled, null otherwise.\r\n   */\r\n  @HostBinding('attr.disabled') get isDisabled(): boolean | null {\r\n    return this.disabled || null;\r\n  }\r\n\r\n  /**\r\n   * Applies theme overrides if specified\r\n   */\r\n  ngOnInit(): void {\r\n    if (this.ztTheme) {\r\n      this.applyLocalTheme();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Applies local theme override to the component\r\n   */\r\n  private applyLocalTheme(): void {\r\n    if (!this.ztTheme) return;\r\n\r\n    const hostElement = this.elementRef.nativeElement;\r\n\r\n    if (this.ztTheme.colors) {\r\n      Object.entries(this.ztTheme.colors).forEach(([key, value]) => {\r\n        const cssVar = `--zt-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\r\n        hostElement.style.setProperty(cssVar, value);\r\n      });\r\n    }\r\n\r\n    if (this.ztTheme.borderRadius !== undefined) {\r\n      hostElement.style.setProperty('--zt-border-radius', `${this.ztTheme.borderRadius}px`);\r\n    }\r\n\r\n    if (this.ztTheme.borderSize !== undefined) {\r\n      hostElement.style.setProperty('--zt-border-size', `${this.ztTheme.borderSize}px`);\r\n    }\r\n\r\n    if (this.ztTheme.fontFamily) {\r\n      hostElement.style.setProperty('--zt-font-family', this.ztTheme.fontFamily);\r\n    }\r\n  }\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  ElementRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ThemeConfig } from '../theme/theme.types';\r\n\r\n/**\r\n * A modern, flexible card component that supports various styles, themes, and sizes.\r\n * It provides content projection for header, body, footer, and media sections.\r\n *\r\n * @example\r\n * <zt-card cardStyle=\"elevated\" theme=\"light\" size=\"md\">\r\n *   <div class=\"card-header\">Card Title</div>\r\n *   <div class=\"card-body\">Card content goes here.</div>\r\n *   <div class=\"card-footer\"><button>Action</button></div>\r\n * </zt-card>\r\n */\r\n@Component({\r\n  selector: 'zt-card',\r\n  templateUrl: './card.component.html',\r\n  styleUrls: ['./card.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class CardComponent implements OnInit {\r\n  constructor(private elementRef: ElementRef) {}\r\n  /**\r\n   * The visual style of the card.\r\n   * @default 'elevated'\r\n   */\r\n  @Input() cardStyle: 'elevated' | 'outlined' | 'flat' = 'elevated';\r\n\r\n  /**\r\n   * The theme of the card component.\r\n   * @default 'light'\r\n   * @deprecated Use global theming or ztTheme directive for local overrides\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'material' | 'bootstrap' = 'light';\r\n\r\n  /**\r\n   * Local theme override for this card component.\r\n   * Takes precedence over global theme.\r\n   */\r\n  @Input() ztTheme?: Partial<ThemeConfig>;\r\n\r\n  /**\r\n   * The size of the card component.\r\n   * @default 'md'\r\n   */\r\n  @Input() size: 'sm' | 'md' | 'lg' = 'md';\r\n\r\n  /**\r\n   * Whether the card has hover effects.\r\n   * @default false\r\n   */\r\n  @Input() hoverable = false;\r\n\r\n  /**\r\n   * The variant of the card that affects its color scheme.\r\n   * @default 'default'\r\n   */\r\n  @Input() variant: 'default' | 'primary' | 'info' | 'danger' | 'warning' | 'dark' = 'default';\r\n\r\n  /**\r\n   * Dynamically applies CSS classes to the card element based on style, size, theme, hoverable, and variant.\r\n   * @returns A string of CSS classes.\r\n   */\r\n  @HostBinding('class') get cardClass(): string {\r\n    return `${this.cardStyle} ${this.size} theme-${this.theme} variant-${this.variant}${this.hoverable ? ' hoverable' : ''}`;\r\n  }\r\n\r\n  /**\r\n   * Applies theme overrides if specified\r\n   */\r\n  ngOnInit(): void {\r\n    if (this.ztTheme) {\r\n      this.applyLocalTheme();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Applies local theme override to the component\r\n   */\r\n  private applyLocalTheme(): void {\r\n    if (!this.ztTheme) return;\r\n\r\n    const hostElement = this.elementRef.nativeElement;\r\n\r\n    if (this.ztTheme.colors) {\r\n      Object.entries(this.ztTheme.colors).forEach(([key, value]) => {\r\n        const cssVar = `--zt-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\r\n        hostElement.style.setProperty(cssVar, value);\r\n      });\r\n    }\r\n\r\n    if (this.ztTheme.borderRadius !== undefined) {\r\n      hostElement.style.setProperty('--zt-border-radius', `${this.ztTheme.borderRadius}px`);\r\n    }\r\n\r\n    if (this.ztTheme.borderSize !== undefined) {\r\n      hostElement.style.setProperty('--zt-border-size', `${this.ztTheme.borderSize}px`);\r\n    }\r\n\r\n    if (this.ztTheme.fontFamily) {\r\n      hostElement.style.setProperty('--zt-font-family', this.ztTheme.fontFamily);\r\n    }\r\n  }\r\n}\r\n","<div class=\"card-container\">\r\n  <ng-content select=\".card-header\"></ng-content>\r\n  <ng-content select=\".card-media\"></ng-content>\r\n  <ng-content select=\".card-body\"></ng-content>\r\n  <ng-content select=\".card-footer\"></ng-content>\r\n</div>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ViewChild,\r\n  Optional,\r\n  OnInit,\r\n  OnDestroy,\r\n  Renderer2,\r\n  forwardRef,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ThemeDirective } from '../theme/theme.directive';\r\nimport { ThemeConfig } from '../theme/theme.types';\r\n\r\n/**\r\n * A feature-rich, accessible input component with advanced validation, multiple visual styles, and comprehensive theming support.\r\n *\r\n * ## Key Features\r\n * - 🎨 **Multiple Visual Styles**: ZT (default), Material Design, and Bootstrap styles\r\n * - 📝 **Advanced Validation**: Character limits with real-time feedback and visual indicators\r\n * - ♿ **Full Accessibility**: WCAG 2.1 AA compliant with proper ARIA attributes and keyboard navigation\r\n * - 🔗 **Two-Way Data Binding**: Seamless integration with `[(ngModel)]` and reactive forms\r\n * - 🎯 **ControlValueAccessor**: Native Angular forms support for reactive and template-driven forms\r\n * - 📊 **Character Counter**: Real-time character counting with warning and error states\r\n * - 🎨 **Theme Integration**: Global and local theme overrides with CSS custom properties\r\n * - ⚡ **Performance Optimized**: OnPush change detection and efficient DOM manipulation\r\n * - 🛡️ **Type Safe**: Full TypeScript support with strict typing and IntelliSense\r\n *\r\n * ## Usage Examples\r\n *\r\n * ### Basic Usage\r\n * ```html\r\n * <zt-input\r\n *   placeholder=\"Enter your name\"\r\n *   size=\"zt-md\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ### Two-Way Data Binding\r\n * ```html\r\n * <zt-input\r\n *   placeholder=\"Enter name\"\r\n *   [(ngModel)]=\"userName\"\r\n *   [textlength]=\"50\"\r\n *   [showCharCounter]=\"true\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ### Reactive Forms Integration\r\n * ```html\r\n * <zt-input\r\n *   formControlName=\"email\"\r\n *   placeholder=\"Email address\"\r\n *   inputType=\"email\"\r\n *   [showCharCounter]=\"true\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ### Event Handling\r\n * ```html\r\n * <zt-input\r\n *   placeholder=\"Interactive input\"\r\n *   (valueChange)=\"onValueChange($event)\"\r\n *   (focus)=\"onFocus($event)\"\r\n *   (blur)=\"onBlur($event)\"\r\n *   [textlength]=\"100\"\r\n *   [showCharCounter]=\"true\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ### Advanced Configuration\r\n * ```html\r\n * <zt-input\r\n *   placeholder=\"Advanced input example\"\r\n *   inputType=\"text\"\r\n *   inputStyle=\"zt\"\r\n *   size=\"zt-md\"\r\n *   [value]=\"initialValue\"\r\n *   [textlength]=\"200\"\r\n *   [showCharCounter]=\"true\"\r\n *   [disabled]=\"isDisabled\"\r\n *   [errorMessage]=\"validationError\"\r\n *   [ztTheme]=\"customTheme\"\r\n *   (valueChange)=\"onValueChange($event)\"\r\n *   (blur)=\"validateInput($event)\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ### Theme Customization\r\n * ```html\r\n * <zt-input\r\n *   [ztTheme]=\"brandInputTheme\"\r\n *   placeholder=\"Brand styled input\"\r\n *   [showCharCounter]=\"true\">\r\n * </zt-input>\r\n * ```\r\n *\r\n * ```typescript\r\n * brandInputTheme: Partial<ThemeConfig> = {\r\n *   colors: {\r\n *     primary: '#FF6B35',        // Brand orange\r\n *     textBlack: '#2D3748',      // Dark gray text\r\n *     default: '#FFFFFF',        // White background\r\n *   },\r\n *   borderRadius: 8,             // Rounded corners\r\n *   borderSize: 2,              // Thicker borders\r\n *   fontFamily: '\"Inter\", sans-serif'\r\n * };\r\n * ```\r\n *\r\n * ## Accessibility Features\r\n * - Unique IDs for proper label association\r\n * - ARIA attributes for screen reader support\r\n * - Keyboard navigation support\r\n * - Focus management with visual indicators\r\n * - Character counter with proper announcements\r\n * - Error states with role=\"alert\"\r\n *\r\n * ## Performance Considerations\r\n * - Uses OnPush change detection strategy\r\n * - Efficient event handling with input events instead of keydown\r\n * - Renderer2 for optimal DOM manipulation\r\n * - CSS custom properties for theme switching without style recalculation\r\n *\r\n * @author ZT-UI-Components Team\r\n * @version 2.0.0\r\n * @since 1.0.0\r\n */\r\n@Component({\r\n  selector: 'zt-input',\r\n  templateUrl: './input.component.html',\r\n  styleUrls: ['./input.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => InputComponent),\r\n      multi: true\r\n    }\r\n  ],\r\n  host: {\r\n    class: 'zt-input'\r\n  }\r\n})\r\nexport class InputComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n  private destroy$ = new Subject<void>();\r\n  private renderer: Renderer2;\r\n\r\n  /**\r\n   * Reference to the native input element for advanced DOM manipulation if needed.\r\n   * Most use cases should use the value property and events instead.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Access native element (advanced usage)\r\n   * if (this.textInput) {\r\n   *   this.textInput.nativeElement.focus();\r\n   * }\r\n   * ```\r\n   */\r\n  @ViewChild('textInput') textInput?: ElementRef<HTMLInputElement>;\r\n\r\n  /**\r\n   * The current value of the input field. Supports two-way data binding with `[(ngModel)]`.\r\n   *\r\n   * When used with reactive forms, this property is automatically synchronized with the FormControl value.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Template-driven form -->\r\n   * <zt-input [(ngModel)]=\"userName\" placeholder=\"Enter name\"></zt-input>\r\n   *\r\n   * <!-- Reactive form -->\r\n   * <zt-input formControlName=\"email\" placeholder=\"Email\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default ''\r\n   */\r\n  @Input() value = '';\r\n\r\n  /**\r\n   * Placeholder text displayed when the input is empty. Provides context about expected input.\r\n   *\r\n   * For accessibility, ensure placeholder text is not the only way to identify the input's purpose.\r\n   * Use proper labeling with `<label>` elements or `aria-labelledby` when possible.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input placeholder=\"Enter your full name\"></zt-input>\r\n   * <zt-input placeholder=\"user@example.com\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 'Enter text'\r\n   */\r\n  @Input() placeholder = 'Enter text';\r\n\r\n  /**\r\n   * Maximum allowed character length for the input. When exceeded, further typing is prevented.\r\n   *\r\n   * Use with `[showCharCounter]=\"true\"` to provide visual feedback to users about character limits.\r\n   * The component automatically handles validation and provides appropriate ARIA attributes.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Short input for names -->\r\n   * <zt-input [textlength]=\"50\" [showCharCounter]=\"true\" placeholder=\"Name\"></zt-input>\r\n   *\r\n   * <!-- Long input for descriptions -->\r\n   * <zt-input [textlength]=\"500\" [showCharCounter]=\"true\" placeholder=\"Description\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 255\r\n   */\r\n  @Input() textlength = 255;\r\n\r\n  /**\r\n   * The type attribute of the HTML input element, determining input behavior and validation.\r\n   *\r\n   * - `text`: Standard text input (default)\r\n   * - `email`: Email input with built-in validation UI on supported browsers\r\n   * - `password`: Password input with text masking\r\n   * - `number`: Numeric input with increment/decrement controls on supported browsers\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input inputType=\"email\" placeholder=\"Email address\"></zt-input>\r\n   * <zt-input inputType=\"password\" placeholder=\"Password\"></zt-input>\r\n   * <zt-input inputType=\"number\" placeholder=\"Age\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 'text'\r\n   */\r\n  @Input() inputType: 'text' | 'number' | 'email' | 'password' = 'text';\r\n\r\n  /**\r\n   * Visual style variant that changes the appearance and behavior of the input.\r\n   *\r\n   * - `zt`: Default ZT-UI style with floating labels and modern aesthetics\r\n   * - `material`: Material Design style with bottom-border focus and label animation\r\n   * - `bs`: Bootstrap-style input with traditional form styling\r\n   *\r\n   * Each style maintains consistent functionality while providing different visual experiences.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Default ZT style -->\r\n   * <zt-input inputStyle=\"zt\" placeholder=\"ZT Style\"></zt-input>\r\n   *\r\n   * <!-- Material Design style -->\r\n   * <zt-input inputStyle=\"material\" placeholder=\"Material Style\"></zt-input>\r\n   *\r\n   * <!-- Bootstrap style -->\r\n   * <zt-input inputStyle=\"bs\" placeholder=\"Bootstrap Style\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 'zt'\r\n   */\r\n  @Input() inputStyle: 'zt' | 'material' | 'bs' = 'zt';\r\n\r\n  /**\r\n   * Legacy theme property for backward compatibility.\r\n   *\r\n   * @deprecated 2.0.0 - Use global theming with `ZTThemeService` or local `ztTheme` overrides instead.\r\n   * This property will be removed in a future major version.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // ❌ Deprecated - avoid using\r\n   * <zt-input theme=\"dark\" placeholder=\"Dark theme\"></zt-input>\r\n   *\r\n   * // ✅ Recommended approach\r\n   * <zt-input [ztTheme]=\"darkTheme\" placeholder=\"Dark theme\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 'light'\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'bootstrap' | 'material' = 'light';\r\n\r\n  /**\r\n   * Local theme override for this input component. Takes precedence over global theme settings.\r\n   *\r\n   * Use this for component-specific styling that differs from your global theme.\r\n   * For consistent theming across your application, prefer global theme configuration.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input\r\n   *   [ztTheme]=\"brandInputTheme\"\r\n   *   placeholder=\"Brand styled input\">\r\n   * </zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * brandInputTheme: Partial<ThemeConfig> = {\r\n   *   colors: {\r\n   *     primary: '#FF6B35',        // Brand orange\r\n   *     textBlack: '#2D3748',      // Dark gray text\r\n   *     default: '#FFFFFF',        // White background\r\n   *   },\r\n   *   borderRadius: 8,             // Rounded corners\r\n   *   borderSize: 2,              // Thicker borders\r\n   *   fontFamily: '\"Inter\", sans-serif'\r\n   * };\r\n   * ```\r\n   */\r\n  @Input() ztTheme?: Partial<ThemeConfig>;\r\n\r\n  /**\r\n   * Size variant that controls the overall scale of the input component.\r\n   *\r\n   * - `zt-sm`: Small size for compact layouts\r\n   * - `zt-md`: Medium size (default) for standard forms\r\n   * - `zt-lg`: Large size for emphasis or touch interfaces\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input size=\"zt-sm\" placeholder=\"Small input\"></zt-input>\r\n   * <zt-input size=\"zt-md\" placeholder=\"Medium input\"></zt-input>\r\n   * <zt-input size=\"zt-lg\" placeholder=\"Large input\"></zt-input>\r\n   * ```\r\n   *\r\n   * @default 'zt-md'\r\n   */\r\n  @Input() size: 'zt-md' | 'zt-sm' | 'zt-lg' = 'zt-md';\r\n\r\n  /**\r\n   * Error message to display when validation fails or character limit is exceeded.\r\n   *\r\n   * The message is displayed below the input with appropriate styling and ARIA attributes.\r\n   * Use clear, actionable error messages to help users correct their input.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input\r\n   *   placeholder=\"Email\"\r\n   *   inputType=\"email\"\r\n   *   [errorMessage]=\"emailError\"\r\n   *   [textlength]=\"100\">\r\n   * </zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * emailError: string;\r\n   *\r\n   * validateEmail() {\r\n   *   if (this.emailFormControl.invalid) {\r\n   *     if (this.emailFormControl.errors?.['required']) {\r\n   *       this.emailError = 'Email is required';\r\n   *     } else if (this.emailFormControl.errors?.['email']) {\r\n   *       this.emailError = 'Please enter a valid email address';\r\n   *     }\r\n   *   } else {\r\n   *     this.emailError = undefined;\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  @Input() errorMessage?: string;\r\n\r\n  /**\r\n   * Whether the input is disabled and prevents user interaction.\r\n   *\r\n   * Disabled inputs cannot be focused, edited, or submitted. They are visually\r\n   * distinguished and include appropriate ARIA attributes for accessibility.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Regular input -->\r\n   * <zt-input placeholder=\"Editable input\"></zt-input>\r\n   *\r\n   * <!-- Disabled input -->\r\n   * <zt-input placeholder=\"Disabled input\" [disabled]=\"true\"></zt-input>\r\n   *\r\n   * <!-- Conditionally disabled -->\r\n   * <zt-input\r\n   *   placeholder=\"Conditional input\"\r\n   *   [disabled]=\"isFormDisabled\">\r\n   * </zt-input>\r\n   * ```\r\n   *\r\n   * @default false\r\n   */\r\n  @Input() disabled = false;\r\n\r\n  /**\r\n   * Whether to show a real-time character counter below the input.\r\n   *\r\n   * The counter displays current character count vs. maximum allowed characters.\r\n   * Visual styling changes based on input state:\r\n   * - Normal: Default text color\r\n   * - Warning: When > 80% of limit (orange/warning color)\r\n   * - Error: When limit exceeded (red/error color)\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Without counter -->\r\n   * <zt-input [textlength]=\"100\" placeholder=\"No counter\"></zt-input>\r\n   *\r\n   * <!-- With counter -->\r\n   * <zt-input [textlength]=\"100\" [showCharCounter]=\"true\" placeholder=\"With counter\"></zt-input>\r\n   * <!-- Displays: \"0/100\" -->\r\n   * ```\r\n   *\r\n   * @default false\r\n   */\r\n  @Input() showCharCounter = false;\r\n\r\n  /**\r\n   * Unique identifier for this input instance, used for accessibility and proper label association.\r\n   *\r\n   * Automatically generated to ensure uniqueness across multiple input instances on the same page.\r\n   * Used internally for `id`, `for`, `aria-labelledby`, and `aria-describedby` attributes.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Input with uniqueId: \"zt-input-a1b2c3d4\" -->\r\n   * <zt-input placeholder=\"Name\"></zt-input>\r\n   * <!-- Renders as: <input id=\"zt-input-a1b2c3d4\" ...> -->\r\n   * <!-- With label: <label for=\"zt-input-a1b2c3d4\" ...> -->\r\n   * ```\r\n   */\r\n  readonly uniqueId = `zt-input-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n  /**\r\n   * Output event emitted whenever the input value changes.\r\n   *\r\n   * Used for two-way data binding with `[(ngModel)]` and reactive forms integration.\r\n   * Emitted after character validation and limit enforcement.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input\r\n   *   placeholder=\"Name\"\r\n   *   (valueChange)=\"onNameChange($event)\"\r\n   *   [(ngModel)]=\"userName\">\r\n   * </zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * onNameChange(newValue: string) {\r\n   *   console.log('Name changed to:', newValue);\r\n   *   this.userName = newValue;\r\n   * }\r\n   * ```\r\n   */\r\n  @Output() valueChange = new EventEmitter<string>();\r\n\r\n  /**\r\n   * Output event emitted when the input loses focus (blur event).\r\n   *\r\n   * Useful for validation triggers, saving data, or updating UI state.\r\n   * Provides the native FocusEvent for advanced use cases.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input\r\n   *   placeholder=\"Email\"\r\n   *   (blur)=\"validateEmail()\"\r\n   *   inputType=\"email\">\r\n   * </zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * validateEmail() {\r\n   *   if (this.emailFormControl.invalid) {\r\n   *     this.showEmailError = true;\r\n   *   }\r\n   * }\r\n   * ```\r\n   */\r\n  @Output() blur = new EventEmitter<FocusEvent>();\r\n\r\n  /**\r\n   * Output event emitted when the input gains focus (focus event).\r\n   *\r\n   * Useful for showing help text, highlighting related fields, or analytics tracking.\r\n   * Provides the native FocusEvent for advanced use cases.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input\r\n   *   placeholder=\"Search\"\r\n   *   (focus)=\"showSearchHelp = true\"\r\n   *   (blur)=\"showSearchHelp = false\">\r\n   * </zt-input>\r\n   * ```\r\n   */\r\n  @Output() focus = new EventEmitter<FocusEvent>();\r\n\r\n  /**\r\n   * Current character count of the input value.\r\n   *\r\n   * Computed property that returns the length of the current value.\r\n   * Used by the character counter display and validation logic.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // In component class\r\n   * get progressPercentage(): number {\r\n   *   return (this.inputComponent.currentLength / this.inputComponent.textlength) * 100;\r\n   * }\r\n   * ```\r\n   *\r\n   * @returns The number of characters in the current value, or 0 if empty\r\n   */\r\n  get currentLength(): number {\r\n    return this.value?.length || 0;\r\n  }\r\n\r\n  /**\r\n   * Whether the input has exceeded the character limit.\r\n   *\r\n   * Computed property used for validation states and visual feedback.\r\n   * Affects CSS classes, ARIA attributes, and error display logic.\r\n   *\r\n   * @example\r\n   * ```scss\r\n   * .my-form {\r\n   *   .zt-input.error input {\r\n   *     border-color: red;\r\n   *   }\r\n   * }\r\n   * ```\r\n   *\r\n   * @returns true if current length exceeds textlength limit\r\n   */\r\n  get hasError(): boolean {\r\n    return this.currentLength > this.textlength;\r\n  }\r\n\r\n  /**\r\n   * CSS class name for the character counter based on current input state.\r\n   *\r\n   * Returns appropriate class for styling the counter:\r\n   * - `''` (empty): Normal state, within limits\r\n   * - `'warning'`: Approaching limit (> 80% of textlength)\r\n   * - `'error'`: Exceeded limit\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <div class=\"char-counter\" [ngClass]=\"counterClass\">\r\n   *   {{ currentLength }}/{{ textlength }}\r\n   * </div>\r\n   * ```\r\n   *\r\n   * @returns CSS class name for current counter state\r\n   */\r\n  get counterClass(): string {\r\n    if (this.hasError) return 'error';\r\n    if (this.currentLength > this.textlength * 0.8) return 'warning';\r\n    return '';\r\n  }\r\n\r\n  /**\r\n   * Space-separated list of element IDs that describe this input for accessibility.\r\n   *\r\n   * Used with `aria-describedby` attribute to associate the input with:\r\n   * - Character counter (when `showCharCounter` is true)\r\n   * - Error message (when `errorMessage` is provided)\r\n   *\r\n   * Enables screen readers to provide additional context about the input.\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Input with counter and error message -->\r\n   * <zt-input\r\n   *   [showCharCounter]=\"true\"\r\n   *   [errorMessage]=\"validationError\"\r\n   *   aria-describedby=\"additional-help\">\r\n   * </zt-input>\r\n   * <!-- aria-describedby value: \"zt-input-a1b2c3d4-counter zt-input-a1b2c3d4-error additional-help\" -->\r\n   * ```\r\n   *\r\n   * @returns Space-separated string of descriptive element IDs\r\n   */\r\n  get ariaDescribedBy(): string {\r\n    const descriptions = [];\r\n    if (this.showCharCounter) descriptions.push(`${this.uniqueId}-counter`);\r\n    if (this.errorMessage) descriptions.push(`${this.uniqueId}-error`);\r\n    return descriptions.join(' ');\r\n  }\r\n\r\n  /**\r\n   * Dynamically applies CSS classes to the host element for styling and state management.\r\n   *\r\n   * Combines multiple class sources:\r\n   * - Input style variant (`zt-${inputStyle}`)\r\n   * - Size variant (`${size}`)\r\n   * - Legacy theme class (`theme-${theme}`)\r\n   * - Disabled state (`disabled` when `disabled` is true)\r\n   * - Error state (`error` when character limit exceeded)\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <!-- Input with multiple classes -->\r\n   * <zt-input inputStyle=\"material\" size=\"zt-lg\" [disabled]=\"true\"></zt-input>\r\n   * <!-- Applied classes: \"zt-material zt-lg theme-light disabled\" -->\r\n   * ```\r\n   *\r\n   * @returns Space-separated string of CSS classes\r\n   */\r\n  @HostBinding('class') get inputClass(): string {\r\n    return `zt-${this.inputStyle} ${this.size} theme-${this.theme} ${this.disabled ? 'disabled' : ''} ${this.hasError ? 'error' : ''}`;\r\n  }\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    renderer: Renderer2\r\n  ) {\r\n    this.renderer = renderer;\r\n  }\r\n\r\n  /**\r\n   * ControlValueAccessor implementation - enables reactive forms support.\r\n   * These callbacks are registered by Angular's forms module.\r\n   */\r\n  private onChange = (value: any) => {};\r\n  private onTouched = () => {};\r\n\r\n  /**\r\n   * ControlValueAccessor: Write a new value to the element.\r\n   *\r\n   * Called by Angular forms when the FormControl value changes.\r\n   * Updates the component's value property and triggers change detection.\r\n   *\r\n   * @param value - The new value to write (null/undefined becomes empty string)\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Angular forms automatically calls this method\r\n   * this.form.patchValue({ email: 'user@example.com' });\r\n   * // Triggers: writeValue('user@example.com')\r\n   * ```\r\n   */\r\n  writeValue(value: any): void {\r\n    this.value = value || '';\r\n  }\r\n\r\n  /**\r\n   * ControlValueAccessor: Register a callback function to call when the value changes.\r\n   *\r\n   * Called by Angular forms to register the FormControl's value change listener.\r\n   * The registered function is called whenever the input value changes.\r\n   *\r\n   * @param fn - Callback function to register for value changes\r\n   */\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  /**\r\n   * ControlValueAccessor: Register a callback function to call when the input is touched.\r\n   *\r\n   * Called by Angular forms to register the FormControl's touch listener.\r\n   * The registered function is called when the input loses focus.\r\n   *\r\n   * @param fn - Callback function to register for touch events\r\n   */\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * ControlValueAccessor: Disable or enable the input element.\r\n   *\r\n   * Called by Angular forms when the FormControl is disabled/enabled.\r\n   * Updates the disabled state and triggers change detection.\r\n   *\r\n   * @param isDisabled - Whether to disable the input\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Angular forms automatically calls this method\r\n   * this.form.get('email').disable();\r\n   * // Triggers: setDisabledState(true)\r\n   * ```\r\n   */\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  /**\r\n   * Angular lifecycle hook called after component initialization.\r\n   *\r\n   * Applies local theme overrides if provided via the `ztTheme` input property.\r\n   * Theme application happens after view initialization to ensure DOM elements exist.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Component with local theme override\r\n   * <zt-input [ztTheme]=\"customTheme\"></zt-input>\r\n   * // Triggers: ngOnInit() -> applyLocalTheme()\r\n   * ```\r\n   */\r\n  ngOnInit(): void {\r\n    if (this.ztTheme) {\r\n      this.applyLocalTheme();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Angular lifecycle hook called before component destruction.\r\n   *\r\n   * Cleans up subscriptions and prevents memory leaks.\r\n   * Completes the destroy subject to signal teardown of any RxJS subscriptions.\r\n   */\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n\r\n  /**\r\n   * Handles native input events for character validation and value synchronization.\r\n   *\r\n   * This method is called on every input event and performs several critical functions:\r\n   * - Enforces character limits by truncating input if necessary\r\n   * - Updates the component's value property\r\n   * - Notifies Angular forms of value changes (ControlValueAccessor)\r\n   * - Emits valueChange event for two-way binding\r\n   *\r\n   * Uses `@HostListener('input')` for better performance than keydown events.\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // User types \"Hello World\" in input\r\n   * // 1. Input event fires\r\n   * // 2. onInput() called\r\n   * // 3. Value updated to \"Hello World\"\r\n   * // 4. onChange() callback invoked\r\n   * // 5. valueChange.emit('Hello World') fired\r\n   * ```\r\n   */\r\n  @HostListener('input') onInput() {\r\n    const input = this.textInput?.nativeElement;\r\n    if (!input) return;\r\n\r\n    // Enforce character limit by truncating if exceeded\r\n    if (input.value.length > this.textlength) {\r\n      input.value = input.value.slice(0, this.textlength);\r\n    }\r\n\r\n    // Update component value and notify listeners\r\n    this.value = input.value;\r\n    this.onChange(this.value);\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  /**\r\n   * Handles keydown events to prevent input when character limit is reached.\r\n   *\r\n   * Provides real-time input prevention for better user experience.\r\n   * Allows navigation and editing keys (Backspace, Delete, arrows) even at limit.\r\n   * Prevents input of regular characters when limit is reached.\r\n   *\r\n   * @param event - The keyboard event containing information about the pressed key\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // User types at character limit (textlength = 10)\r\n   * // Current value: \"Hello Worl\" (10 chars)\r\n   * // User presses 'd' -> onKeydown() prevents input\r\n   * // User presses Backspace -> onKeydown() allows deletion\r\n   * ```\r\n   */\r\n  @HostListener('keydown', ['$event'])\r\n  onKeydown(event: KeyboardEvent) {\r\n    const input = this.textInput?.nativeElement;\r\n    if (!input) return;\r\n\r\n    // Allow navigation and editing keys even at character limit\r\n    const allowedKeys = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Enter'];\r\n    if (input.value.length >= this.textlength && !allowedKeys.includes(event.key)) {\r\n      event.preventDefault();\r\n      return;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles focus events for accessibility and user interaction tracking.\r\n   *\r\n   * Emits the focus event for parent components and marks the control as touched\r\n   * for Angular forms validation (triggers validation on blur).\r\n   *\r\n   * @param event - The native focus event\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input (focus)=\"onInputFocus($event)\"></zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * onInputFocus(event: FocusEvent) {\r\n   *   console.log('Input focused at:', event.timeStamp);\r\n   *   // Show help text, highlight field, etc.\r\n   * }\r\n   * ```\r\n   */\r\n  @HostListener('focus', ['$event'])\r\n  onFocus(event: FocusEvent) {\r\n    this.focus.emit(event);\r\n    this.onTouched();\r\n  }\r\n\r\n  /**\r\n   * Handles blur events for validation triggers and user interaction tracking.\r\n   *\r\n   * Emits the blur event for parent components. Commonly used to trigger validation,\r\n   * save data, or update UI state when user finishes editing.\r\n   *\r\n   * @param event - The native blur event\r\n   *\r\n   * @example\r\n   * ```html\r\n   * <zt-input (blur)=\"onInputBlur($event)\"></zt-input>\r\n   * ```\r\n   *\r\n   * ```typescript\r\n   * onInputBlur(event: FocusEvent) {\r\n   *   console.log('Input blurred at:', event.timeStamp);\r\n   *   // Validate field, save data, hide help text, etc.\r\n   * }\r\n   * ```\r\n   */\r\n  @HostListener('blur', ['$event'])\r\n  onBlur(event: FocusEvent) {\r\n    this.blur.emit(event);\r\n  }\r\n\r\n  /**\r\n   * Applies local theme overrides to the component using Renderer2 for optimal performance.\r\n   *\r\n   * This method transforms theme configuration into CSS custom properties and applies them\r\n   * to the host element. The theme properties cascade down to all child elements,\r\n   * enabling efficient theme switching without component recreation.\r\n   *\r\n   * Features:\r\n   * - Batch style application to minimize layout thrashing\r\n   * - Automatic CSS custom property name conversion (camelCase to kebab-case)\r\n   * - Proper unit handling for dimensional properties\r\n   * - Renderer2 for security and Angular Universal compatibility\r\n   *\r\n   * @example\r\n   * ```typescript\r\n   * // Define custom theme with all properties\r\n   * customTheme: Partial<ThemeConfig> = {\r\n   *   colors: {\r\n   *     primary: '#FF6B35',\r\n   *     textBlack: '#2D3748',\r\n   *     default: '#FFFFFF'\r\n   *   },\r\n   *   borderRadius: 8,\r\n   *   borderSize: 2,\r\n   *   fontFamily: 'Inter, sans-serif'\r\n   * };\r\n   *\r\n   * // Apply via input property\r\n   * <zt-input [ztTheme]=\"customTheme\"></zt-input>\r\n   *\r\n   * // Results in these CSS custom properties on the host element:\r\n   * // --zt-primary: #FF6B35\r\n   * // --zt-text-black: #2D3748\r\n   * // --zt-default: #FFFFFF\r\n   * // --zt-border-radius: 8px\r\n   * // --zt-border-size: 2px\r\n   * // --zt-font-family: Inter, sans-serif\r\n   * ```\r\n   *\r\n   * @performance Uses batch style application to minimize layout thrashing\r\n   * @security Renderer2 automatically sanitizes CSS values\r\n   * @compatibility Works with Angular Universal and server-side rendering\r\n   */\r\n  private applyLocalTheme(): void {\r\n    if (!this.ztTheme) return;\r\n\r\n    const hostElement = this.elementRef.nativeElement;\r\n\r\n    // Clear any existing theme styles first for clean application\r\n    this.clearExistingThemeStyles();\r\n\r\n    // Apply new theme styles in batch\r\n    this.applyThemeStyles(hostElement);\r\n  }\r\n\r\n  /**\r\n   * Clears existing theme-related styles from the host element.\r\n   * This ensures clean theme application and prevents style conflicts.\r\n   */\r\n  private clearExistingThemeStyles(): void {\r\n    if (!this.ztTheme) return;\r\n\r\n    const hostElement = this.elementRef.nativeElement;\r\n\r\n    // Remove existing theme-related CSS custom properties\r\n    const themeProperties = [\r\n      '--zt-primary', '--zt-text-black', '--zt-text-gray', '--zt-default',\r\n      '--zt-default-hover-border', '--zt-border-radius', '--zt-border-size',\r\n      '--zt-font-family', '--zt-input-bg', '--zt-input-color', '--zt-input-border',\r\n      '--zt-input-border-focus', '--zt-input-placeholder', '--zt-label-spacing',\r\n      '--zt-label-transform', '--zt-counter-spacing'\r\n    ];\r\n\r\n    themeProperties.forEach(property => {\r\n      this.renderer.removeStyle(hostElement, property);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Applies theme styles to the host element using CSS custom properties.\r\n   *\r\n   * @param hostElement - The host element to apply styles to\r\n   */\r\n  private applyThemeStyles(hostElement: HTMLElement): void {\r\n    if (!this.ztTheme) return;\r\n\r\n    const styles: { [key: string]: string } = {};\r\n\r\n    // Transform and apply color properties\r\n    if (this.ztTheme.colors) {\r\n      Object.entries(this.ztTheme.colors).forEach(([key, value]) => {\r\n        const cssVar = `--zt-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\r\n        styles[cssVar] = value;\r\n      });\r\n    }\r\n\r\n    // Apply dimensional properties with proper units\r\n    if (this.ztTheme.borderRadius !== undefined) {\r\n      styles['--zt-border-radius'] = `${this.ztTheme.borderRadius}px`;\r\n    }\r\n\r\n    if (this.ztTheme.borderSize !== undefined) {\r\n      styles['--zt-border-size'] = `${this.ztTheme.borderSize}px`;\r\n    }\r\n\r\n    // Apply typography properties\r\n    if (this.ztTheme.fontFamily) {\r\n      styles['--zt-font-family'] = this.ztTheme.fontFamily;\r\n    }\r\n\r\n    // Apply font size properties if specified\r\n    if (this.ztTheme.fontSize) {\r\n      if (this.ztTheme.fontSize.small) {\r\n        styles['--zt-font-size-small'] = this.ztTheme.fontSize.small;\r\n      }\r\n      if (this.ztTheme.fontSize.medium) {\r\n        styles['--zt-font-size-medium'] = this.ztTheme.fontSize.medium;\r\n      }\r\n      if (this.ztTheme.fontSize.large) {\r\n        styles['--zt-font-size-large'] = this.ztTheme.fontSize.large;\r\n      }\r\n    }\r\n\r\n    // Apply spacing properties if specified\r\n    if (this.ztTheme.spacing) {\r\n      if (this.ztTheme.spacing.small) {\r\n        styles['--zt-spacing-small'] = this.ztTheme.spacing.small;\r\n      }\r\n      if (this.ztTheme.spacing.medium) {\r\n        styles['--zt-spacing-medium'] = this.ztTheme.spacing.medium;\r\n      }\r\n      if (this.ztTheme.spacing.large) {\r\n        styles['--zt-spacing-large'] = this.ztTheme.spacing.large;\r\n      }\r\n    }\r\n\r\n    // Apply label and counter spacing using existing spacing properties\r\n    if (this.ztTheme.spacing) {\r\n      if (this.ztTheme.spacing.small) {\r\n        styles['--zt-counter-spacing'] = this.ztTheme.spacing.small;\r\n      }\r\n      if (this.ztTheme.spacing.medium) {\r\n        styles['--zt-input-padding'] = this.ztTheme.spacing.medium;\r\n      }\r\n      if (this.ztTheme.spacing.large) {\r\n        styles['--zt-label-spacing'] = this.ztTheme.spacing.large;\r\n      }\r\n    }\r\n\r\n    // Batch apply all styles using Renderer2 for optimal performance\r\n    // This approach minimizes layout thrashing compared to individual setProperty calls\r\n    Object.entries(styles).forEach(([property, value]) => {\r\n      this.renderer.setStyle(hostElement, property, value);\r\n    });\r\n  }\r\n}\r\n","@if (inputStyle === 'zt') {\n  <div class=\"zt-input-container\">\n    <div class=\"box_input\">\n      <div class=\"form__group\">\n        <input\n          [type]=\"inputType\"\n          [id]=\"uniqueId\"\n          [attr.aria-describedby]=\"ariaDescribedBy\"\n          [attr.aria-labelledby]=\"uniqueId + '-label'\"\n          [maxLength]=\"textlength\"\n          [disabled]=\"disabled\"\n          [value]=\"value\"\n          #textInput\n          [class.error]=\"hasError\"\n        />\n        <label class=\"label\" [for]=\"uniqueId\" [id]=\"uniqueId + '-label'\">\n          <div class=\"text\">{{ placeholder }}</div>\n        </label>\n      </div>\n      @if (showCharCounter) {\n        <div class=\"char-counter\" [ngClass]=\"counterClass\" [id]=\"uniqueId + '-counter'\">\n          {{ currentLength }}/{{ textlength }}\n        </div>\n      }\n      @if (errorMessage) {\n        <div class=\"error-message\" [id]=\"uniqueId + '-error'\" role=\"alert\">\n          {{ errorMessage }}\n        </div>\n      }\n    </div>\n  </div>\n}\n\n@if (inputStyle === 'material') {\n  <div class=\"zt-input-container\">\n    <div class=\"material_input\">\n      <div class=\"form__group\">\n        <input\n          [type]=\"inputType\"\n          [id]=\"uniqueId\"\n          [attr.aria-describedby]=\"ariaDescribedBy\"\n          [attr.aria-labelledby]=\"uniqueId + '-label'\"\n          class=\"form__field\"\n          [placeholder]=\"placeholder\"\n          [disabled]=\"disabled\"\n          [value]=\"value\"\n          #textInput\n          [class.error]=\"hasError\"\n        />\n        <label [for]=\"uniqueId\" [id]=\"uniqueId + '-label'\" class=\"form__label\">\n          {{ placeholder }}\n        </label>\n      </div>\n      @if (showCharCounter) {\n        <div class=\"char-counter\" [ngClass]=\"counterClass\" [id]=\"uniqueId + '-counter'\">\n          {{ currentLength }}/{{ textlength }}\n        </div>\n      }\n      @if (errorMessage) {\n        <div class=\"error-message\" [id]=\"uniqueId + '-error'\" role=\"alert\">\n          {{ errorMessage }}\n        </div>\n      }\n    </div>\n  </div>\n}\n\n@if (inputStyle === 'bs') {\n  <div class=\"zt-input-container\">\n    <div class=\"input_bs\">\n      <input\n        [type]=\"inputType\"\n        [id]=\"uniqueId\"\n        [attr.aria-describedby]=\"ariaDescribedBy\"\n        [attr.aria-labelledby]=\"uniqueId + '-label'\"\n        class=\"form__field form-control\"\n        [placeholder]=\"placeholder\"\n        [disabled]=\"disabled\"\n        [value]=\"value\"\n        #textInput\n        [class.error]=\"hasError\"\n      />\n      @if (showCharCounter) {\n        <div class=\"char-counter\" [ngClass]=\"counterClass\" [id]=\"uniqueId + '-counter'\">\n          {{ currentLength }}/{{ textlength }}\n        </div>\n      }\n      @if (errorMessage) {\n        <div class=\"error-message\" [id]=\"uniqueId + '-error'\" role=\"alert\">\n          {{ errorMessage }}\n        </div>\n      }\n    </div>\n  </div>\n}\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ElementRef,\r\n  HostListener,\r\n  OnInit,\r\n  OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * Modal sizes enumeration\r\n */\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'fullscreen';\r\n\r\n/**\r\n * Modal component for displaying content in an overlay dialog.\r\n *\r\n * @example\r\n * ```typescript\r\n * <zt-modal\r\n *   [isOpen]=\"showModal\"\r\n *   [size]=\"'md'\"\r\n *   [title]=\"'Confirmation'\"\r\n *   [closable]=\"true\"\r\n *   [backdropClosable]=\"true\"\r\n *   (onClose)=\"handleClose()\"\r\n *   (onOpen)=\"handleOpen()\">\r\n *\r\n *   <div modal-header>\r\n *     <h3>Modal Title</h3>\r\n *   </div>\r\n *\r\n *   <div modal-body>\r\n *     <p>Modal content goes here...</p>\r\n *   </div>\r\n *\r\n *   <div modal-footer>\r\n *     <button (click)=\"closeModal()\">Close</button>\r\n *     <button (click)=\"confirmAction()\">Confirm</button>\r\n *   </div>\r\n *\r\n * </zt-modal>\r\n * ```\r\n */\r\n@Component({\r\n  selector: 'zt-modal',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './zt-modal.component.html',\r\n  styleUrls: ['./zt-modal.component.scss'],\r\n})\r\nexport class ZtModalComponent implements OnInit, OnDestroy {\r\n  /**\r\n   * Controls modal visibility\r\n   */\r\n  @Input() isOpen: boolean = false;\r\n\r\n  /**\r\n   * Modal title\r\n   */\r\n  @Input() title: string = '';\r\n\r\n  /**\r\n   * Modal size\r\n   */\r\n  @Input() size: ModalSize = 'md';\r\n\r\n  /**\r\n   * Modal theme\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'bootstrap' | 'material' = 'light';\r\n\r\n  /**\r\n   * Allow modal to be closed via close button or escape key\r\n   */\r\n  @Input() closable: boolean = true;\r\n\r\n  /**\r\n   * Allow modal to be closed by clicking backdrop\r\n   */\r\n  @Input() backdropClosable: boolean = true;\r\n\r\n  /**\r\n   * Custom CSS classes for the modal\r\n   */\r\n  @Input() customClass: string = '';\r\n\r\n  /**\r\n   * Z-index for the modal overlay\r\n   */\r\n  @Input() zIndex: number = 1050;\r\n\r\n  /**\r\n   * Event emitted when modal is closed\r\n   */\r\n  @Output() onClose = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Event emitted when modal is opened\r\n   */\r\n  @Output() onOpen = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Event emitted before modal is closed\r\n   */\r\n  @Output() onBeforeClose = new EventEmitter<void>();\r\n\r\n  private previousActiveElement: Element | null = null;\r\n\r\n  ngOnInit(): void {\r\n    if (this.isOpen) {\r\n      this.open();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.isOpen) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Opens the modal\r\n   */\r\n  open(): void {\r\n    if (this.isOpen) return;\r\n\r\n    this.previousActiveElement = document.activeElement as Element;\r\n    this.isOpen = true;\r\n    document.body.style.overflow = 'hidden';\r\n\r\n    // Focus management for accessibility\r\n    setTimeout(() => {\r\n      const modalElement = this.elementRef.nativeElement.querySelector('.modal');\r\n      if (modalElement) {\r\n        const focusableElement = modalElement.querySelector(\r\n          'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n        ) as HTMLElement;\r\n        if (focusableElement) {\r\n          focusableElement.focus();\r\n        }\r\n      }\r\n    }, 100);\r\n\r\n    this.onOpen.emit();\r\n  }\r\n\r\n  /**\r\n   * Closes the modal\r\n   */\r\n  close(): void {\r\n    if (!this.isOpen) return;\r\n\r\n    this.onBeforeClose.emit();\r\n\r\n    this.isOpen = false;\r\n    document.body.style.overflow = '';\r\n\r\n    // Restore focus to the previously active element\r\n    if (this.previousActiveElement) {\r\n      (this.previousActiveElement as HTMLElement).focus();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles backdrop click\r\n   */\r\n  onBackdropClick(event: Event): void {\r\n    if (event.target === event.currentTarget && this.backdropClosable) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles close button click\r\n   */\r\n  onCloseClick(): void {\r\n    if (this.closable) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle escape key press\r\n   */\r\n  @HostListener('document:keydown.escape', ['$event'])\r\n  onEscapeKey(event: Event): void {\r\n    if (this.isOpen && this.closable) {\r\n      const keyboardEvent = event as KeyboardEvent;\r\n      keyboardEvent.preventDefault();\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handle tab key for focus trap\r\n   */\r\n  @HostListener('document:keydown.tab', ['$event'])\r\n  onTabKey(event: Event): void {\r\n    if (!this.isOpen) return;\r\n\r\n    const keyboardEvent = event as KeyboardEvent;\r\n    const modalElement = this.elementRef.nativeElement.querySelector('.modal');\r\n    if (!modalElement) return;\r\n\r\n    const focusableElements = modalElement.querySelectorAll(\r\n      'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n    );\r\n\r\n    const firstElement = focusableElements[0] as HTMLElement;\r\n    const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\r\n\r\n    if (keyboardEvent.shiftKey) {\r\n      // Shift + Tab\r\n      if (document.activeElement === firstElement) {\r\n        keyboardEvent.preventDefault();\r\n        lastElement.focus();\r\n      }\r\n    } else {\r\n      // Tab\r\n      if (document.activeElement === lastElement) {\r\n        keyboardEvent.preventDefault();\r\n        firstElement.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets the CSS class for modal size\r\n   */\r\n  getModalSizeClass(): string {\r\n    const baseClass = 'modal-dialog';\r\n    const sizeClass = this.size === 'md' ? '' : `modal-${this.size}`;\r\n    const themeClass = `theme-${this.theme}`;\r\n    const customClass = this.customClass ? ` ${this.customClass}` : '';\r\n    return `${baseClass} ${sizeClass} ${themeClass}${customClass}`.trim();\r\n  }\r\n\r\n  /**\r\n   * Checks if modal has body content\r\n   */\r\n  hasBodyContent(): boolean {\r\n    // This would need ViewChild or ContentChildren to properly detect\r\n    // For now, return true to always show body\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Checks if modal has footer content\r\n   */\r\n  hasFooterContent(): boolean {\r\n    // This would need ViewChild or ContentChildren to properly detect\r\n    // For now, return true to always show footer if it has content\r\n    return true;\r\n  }\r\n\r\n  constructor(private elementRef: ElementRef) {}\r\n}\r\n","<!-- Modal Backdrop -->\r\n<div\r\n  class=\"zt-modal-backdrop\"\r\n  [class.show]=\"isOpen\"\r\n  [style.z-index]=\"zIndex\"\r\n  (click)=\"onBackdropClick($event)\"\r\n  role=\"dialog\"\r\n  aria-modal=\"true\"\r\n  [attr.aria-labelledby]=\"title ? 'modal-title' : null\"\r\n  [attr.aria-describedby]=\"'modal-body'\"\r\n>\r\n\r\n  <!-- Modal Dialog -->\r\n  <div\r\n    class=\"zt-modal-dialog\"\r\n    [class.show]=\"isOpen\"\r\n    [class]=\"getModalSizeClass()\"\r\n    [class]=\"'theme-' + theme\"\r\n    role=\"document\"\r\n  >\r\n    <div class=\"modal-content\">\r\n\r\n      <!-- Modal Header -->\r\n      <div class=\"modal-header\" *ngIf=\"title || closable\">\r\n        <h5 class=\"modal-title\" id=\"modal-title\" *ngIf=\"title\">{{ title }}</h5>\r\n        <button\r\n          type=\"button\"\r\n          class=\"btn-close\"\r\n          *ngIf=\"closable\"\r\n          (click)=\"onCloseClick()\"\r\n          aria-label=\"Close modal\"\r\n        ></button>\r\n      </div>\r\n\r\n      <!-- Modal Body -->\r\n      <div class=\"modal-body\" id=\"modal-body\">\r\n        <ng-content select=\"[modal-body]\"></ng-content>\r\n        <ng-content *ngIf=\"!hasBodyContent()\"></ng-content>\r\n      </div>\r\n\r\n      <!-- Modal Footer -->\r\n      <div class=\"modal-footer\" *ngIf=\"hasFooterContent()\">\r\n        <ng-content select=\"[modal-footer]\"></ng-content>\r\n      </div>\r\n\r\n    </div>\r\n  </div>\r\n</div>\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * A customizable select dropdown component that supports various styles, themes, and data binding.\r\n * It allows users to select from a list of options with configurable display and value properties.\r\n *\r\n * ## Style-Specific Behaviors:\r\n *\r\n * - **ZT Style** (`inputStyle=\"zt\"`): Traditional select with `value=\"\"` placeholder option\r\n * - **Material Style** (`inputStyle=\"material\"`): Material Design select with `value=\"\"` placeholder option\r\n * - **Bootstrap Style** (`inputStyle=\"bs\"`): Bootstrap-styled select with `[ngValue]=\"null\"` placeholder option\r\n *\r\n * ## Placeholder Handling:\r\n *\r\n * - ZT & Material styles: Use `value=\"\"` for placeholder, clear to `-1`\r\n * - Bootstrap style: Uses `[ngValue]=\"null\"` for placeholder, clears to `null`\r\n *\r\n * @example\r\n * <!-- ZT Style (default) -->\r\n * <zt-select\r\n *   [dataSource]=\"options\"\r\n *   [key]=\"'id'\"\r\n *   [displayValue]=\"'name'\"\r\n *   [value]=\"selectedValue\"\r\n *   inputStyle=\"zt\"\r\n *   placeholder=\"Choose an option\">\r\n * </zt-select>\r\n *\r\n * @example\r\n * <!-- Material Style -->\r\n * <zt-select\r\n *   [dataSource]=\"options\"\r\n *   [key]=\"'id'\"\r\n *   [displayValue]=\"'name'\"\r\n *   [value]=\"selectedValue\"\r\n *   inputStyle=\"material\"\r\n *   placeholder=\"Choose an option\">\r\n * </zt-select>\r\n *\r\n * @example\r\n * <!-- Bootstrap Style (with proper placeholder support) -->\r\n * <zt-select\r\n *   [dataSource]=\"options\"\r\n *   [key]=\"'id'\"\r\n *   [displayValue]=\"'name'\"\r\n *   [value]=\"selectedValue\"\r\n *   inputStyle=\"bs\"\r\n *   placeholder=\"Choose an option\">\r\n * </zt-select>\r\n */\r\n@Component({\r\n  selector: 'zt-select',\r\n  templateUrl: './select.component.html',\r\n  styleUrls: ['./select.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n})\r\nexport class SelectComponent implements OnInit {\r\n  /**\r\n   * Default message displayed in the component.\r\n   */\r\n  message = 'Choose an option';\r\n\r\n  /**\r\n   * Placeholder text displayed when no option is selected.\r\n   *\r\n   * **Note**: Only effective with `inputStyle=\"bs\"`. ZT and Material styles\r\n   * use the `message` property for their placeholder text display.\r\n   *\r\n   * @default 'Choose an option'\r\n   */\r\n  @Input() placeholder? = 'Choose an option';\r\n\r\n  /**\r\n   * The visual style of the select component.\r\n   *\r\n   * - `'zt'`: Traditional ZT styling with `value=\"\"` placeholder option\r\n   * - `'material'`: Material Design styling with `value=\"\"` placeholder option\r\n   * - `'bs'`: Bootstrap styling with `[ngValue]=\"null\"` placeholder option (recommended for placeholder functionality)\r\n   *\r\n   * @default 'zt'\r\n   */\r\n  @Input() inputStyle?: 'zt' | 'material' | 'bs' = 'zt';\r\n\r\n  /**\r\n   * The theme of the select component.\r\n   * @default 'light'\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'bootstrap' | 'material' = 'light';\r\n\r\n  /**\r\n   * The size of the select component.\r\n   * @default 'zt-md'\r\n   */\r\n  @Input() size: 'zt-md' | 'zt-sm' | 'zt-lg' = 'zt-md';\r\n\r\n  /**\r\n   * Array of data objects to populate the select options.\r\n   * @default []\r\n   */\r\n  @Input() dataSource: any[] = [];\r\n\r\n  /**\r\n   * The property name in the data objects to use as the unique key/identifier.\r\n   * Used for binding the selected value.\r\n   */\r\n  @Input() key?: any;\r\n\r\n  /**\r\n   * The property name in the data objects to display as the option text.\r\n   * @default ''\r\n   */\r\n  @Input() displayValue: any = '';\r\n\r\n  /**\r\n   * The currently selected value. Should match the key property of the selected item.\r\n   */\r\n  @Input() value: any;\r\n\r\n  /**\r\n   * Whether to show a clear button to reset the selection.\r\n   * @default true\r\n   */\r\n  @Input() showClearButton = true;\r\n\r\n  /**\r\n   * Event emitted when the selected value changes.\r\n   */\r\n  @Output() valueChange = new EventEmitter<any>();\r\n\r\n  /**\r\n   * Dynamically applies CSS classes to the select element based on size and theme.\r\n   * @returns A string of CSS classes.\r\n   */\r\n  @HostBinding('class') get selectClass(): string {\r\n    return `${this.size} theme-${this.theme}`;\r\n  }\r\n\r\n  /**\r\n   * Handles the change event when a user selects an option.\r\n   * Updates the value property with the selected option's value.\r\n   * @param event The change event from the select element.\r\n   */\r\n  @HostListener('change', ['$event'])\r\n  onChange(event: any) {\r\n    this.value = event.target.value;\r\n    this.valueChange.emit(this.value);\r\n    console.log(this.key, this.value);\r\n  }\r\n\r\n  /**\r\n   * Clears the current selection by setting the value to null for bs style, -1 for others.\r\n   */\r\n  onClear() {\r\n    console.log(this.value);\r\n    // Use null for bs style (which has [ngValue]=\"null\" placeholder), -1 for others\r\n    this.value = this.inputStyle === 'bs' ? null : -1;\r\n    this.valueChange.emit(this.value);\r\n  }\r\n\r\n  /**\r\n   * Initializes the component and ensures placeholder is shown when no value is set.\r\n   */\r\n  ngOnInit() {\r\n    // If no value is provided, set appropriate default based on input style\r\n    // bs style uses null for placeholder, others use -1\r\n    if (this.value === undefined) {\r\n      this.value = this.inputStyle === 'bs' ? null : -1;\r\n    }\r\n  }\r\n}\r\n","@if (inputStyle === 'zt') {\r\n  <div>\r\n    <div class=\"box_select\">\r\n      <div class=\"form__group\">\r\n        <select\r\n          id=\"box_select\"\r\n          aria-labelledby=\"label-fname\"\r\n          class=\"\"\r\n          #select\r\n          [(ngModel)]=\"value\"\r\n          >\r\n          <option value=\"\" class=\"select-message\" selected disabled>\r\n            {{ message }}\r\n          </option>\r\n          @for (obj of dataSource; track obj; let i = $index) {\r\n            <option\r\n              [id]=\"key ? key : i\"\r\n              class=\"select-option\"\r\n              >\r\n              {{ displayValue ? obj[displayValue] : obj }}\r\n            </option>\r\n          }\r\n        </select>\r\n        @if (showClearButton) {\r\n          <button class=\"close-icon\" type=\"reset\"></button>\r\n        }\r\n        <label class=\"label\" for=\"fname\" id=\"label-fname\">\r\n          <div class=\"text\">{{ placeholder }}</div>\r\n        </label>\r\n      </div>\r\n    </div>\r\n  </div>\r\n}\r\n\r\n@if (inputStyle === 'material') {\r\n  <div>\r\n    <div class=\"material_select\">\r\n      <div class=\"select select-items\">\r\n        <select class=\"select-text\" required #select [(ngModel)]=\"value\">\r\n          <option value=\"\" class=\"select-message\" selected disabled></option>\r\n          @for (obj of dataSource; track obj; let i = $index) {\r\n            <option\r\n              [id]=\"key ? key : i\"\r\n              class=\"select-option\"\r\n              >\r\n              {{ displayValue ? obj[displayValue] : obj }}\r\n            </option>\r\n          }\r\n        </select>\r\n        @if (showClearButton) {\r\n          <button class=\"close-icon\" type=\"reset\"></button>\r\n        }\r\n        <span class=\"select-highlight\"></span>\r\n        <span class=\"select-bar\"></span>\r\n        <label class=\"select-label\">{{ placeholder }}</label>\r\n      </div>\r\n    </div>\r\n  </div>\r\n}\r\n@if (inputStyle === 'bs') {\r\n  <div>\r\n    <div class=\"bs_select\">\r\n      <select\r\n        type=\"text\"\r\n        class=\"form__field\"\r\n        id=\"bs_select\"\r\n        #select\r\n        [(ngModel)]=\"value\"\r\n        >\r\n        <option [ngValue]=\"null\" class=\"select-message\" selected disabled>\r\n          {{ placeholder }}\r\n        </option>\r\n        @for (obj of dataSource; track obj; let i = $index) {\r\n          <option\r\n            [id]=\"key ? key : i\"\r\n            class=\"select-option\"\r\n            >\r\n            {{ displayValue ? obj[displayValue] : obj }}\r\n          </option>\r\n        }\r\n      </select>\r\n      @if (showClearButton) {\r\n        <button\r\n          class=\"close-icon\"\r\n          type=\"button\"\r\n          (click)=\"onClear()\"\r\n        ></button>\r\n      }\r\n    </div>\r\n  </div>\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  Component,\r\n  ElementRef,\r\n  HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnInit,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * A customizable textarea component with character counting, length validation, and various styling options.\r\n * Supports different themes, sizes, and input styles with optional character count display.\r\n *\r\n * @example\r\n * <zt-textarea\r\n *   placeholder=\"Enter your message\"\r\n *   [textlength]=\"500\"\r\n *   [rows]=\"4\"\r\n *   [showCharCount]=\"true\"\r\n *   size=\"zt-md\"\r\n *   theme=\"light\">\r\n * </zt-textarea>\r\n */\r\n@Component({\r\n  selector: 'zt-textarea',\r\n  templateUrl: './textarea.component.html',\r\n  styleUrls: ['./textarea.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n})\r\nexport class TextareaComponent {\r\n  /**\r\n   * Reference to the textarea element for direct DOM manipulation.\r\n   */\r\n  @ViewChild('textareaInput') textareaInput?: ElementRef;\r\n\r\n  /**\r\n   * The current value of the textarea.\r\n   * @default ''\r\n   */\r\n  @Input() value? = '';\r\n\r\n  /**\r\n   * Placeholder text displayed when the textarea is empty.\r\n   * @default 'label'\r\n   */\r\n  @Input() placeholder? = 'label';\r\n\r\n  /**\r\n   * Maximum allowed character length for the textarea.\r\n   * @default 255\r\n   */\r\n  @Input() textlength = 255;\r\n\r\n  /**\r\n   * The type attribute for the textarea (typically 'text').\r\n   * @default 'text'\r\n   */\r\n  @Input() type? = 'text';\r\n\r\n  /**\r\n   * Current length of the text in the textarea.\r\n   */\r\n  currentTextLength = 0;\r\n\r\n  /**\r\n   * The visible width of the textarea in average character widths.\r\n   * Must be a positive integer.\r\n   * @default 20\r\n   */\r\n  @Input() cols? = 20;\r\n\r\n  /**\r\n   * The number of visible text lines for the textarea.\r\n   * Must be a positive integer.\r\n   * @default 2\r\n   */\r\n  @Input() rows? = 2;\r\n\r\n  /**\r\n   * The visual style of the textarea.\r\n   * @default 'zt'\r\n   */\r\n  @Input() inputStyle: 'zt' | 'material' | 'bs' = 'zt';\r\n\r\n  /**\r\n   * The theme of the textarea component.\r\n   * @default 'light'\r\n   */\r\n  @Input() theme: 'light' | 'dark' | 'bootstrap' | 'material' = 'light';\r\n\r\n  /**\r\n   * The size of the textarea component.\r\n   * @default 'zt-md'\r\n   */\r\n  @Input() size: 'zt-md' | 'zt-sm' | 'zt-lg' = 'zt-md';\r\n\r\n  /**\r\n   * Whether to show the character count below the textarea.\r\n   * @default true\r\n   */\r\n  @Input() showCharCount? = true;\r\n\r\n  /**\r\n   * Dynamically applies CSS classes to the textarea element based on size and theme.\r\n   * @returns A string of CSS classes.\r\n   */\r\n  @HostBinding('class') get textareaClass(): string {\r\n    return `${this.size} theme-${this.theme}`;\r\n  }\r\n\r\n  /**\r\n   * Handles keydown events to enforce character length limits and update current text length.\r\n   * Updates the value if within the allowed length.\r\n   */\r\n  @HostListener('keydown') onKeydown() {\r\n    if (\r\n      Number(this.textlength) > this.textareaInput?.nativeElement.value.length\r\n    )\r\n      this.value = this.textareaInput?.nativeElement.value;\r\n    this.currentTextLength = this.textareaInput?.nativeElement.value.length;\r\n  }\r\n\r\n  /**\r\n   * Listens to global keyup events to update the current text length, particularly for delete operations.\r\n   * @param event The keyboard event.\r\n   */\r\n  @HostListener('window:keyup', ['$event'])\r\n  keyEvent(event: KeyboardEvent) {\r\n    if (event.key === KEY_CODE.DELETE) {\r\n      this.currentTextLength = this.textareaInput?.nativeElement.value.length;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Enumeration of key codes used in the textarea component.\r\n */\r\nexport enum KEY_CODE {\r\n  DELETE = 'Delete',\r\n}\r\n","@if (inputStyle === 'zt') {\n  <div>\n    <div class=\"box_textarea\">\n      <div class=\"form__group\">\n        <textarea\n          [cols]=\"cols\"\n          [rows]=\"rows\"\n          [maxLength]=\"textlength\"\n          id=\"box-textarea\"\n          #textareaInput\n        ></textarea>\n        <label class=\"label\" for=\"fname\" id=\"label-fname\">\n          <div class=\"text\">{{ placeholder }} &nbsp;</div>\n        </label>\n        @if (showCharCount) {\n          <small\n            [ngClass]=\"currentTextLength >= textlength ? 'limit-max' : ''\"\n            >{{ currentTextLength }}/{{ textlength }}</small\n            >\n          }\n        </div>\n      </div>\n    </div>\n  }\n\n  @if (inputStyle === 'material') {\n    <div>\n      <div class=\"material_input\">\n        <div class=\"textarea-group\">\n          <textarea\n            [cols]=\"cols\"\n            [rows]=\"rows\"\n            id=\"material-textarea\"\n            #textareaInput\n          ></textarea>\n          <div class=\"bar\"></div>\n          <label>{{ placeholder }}</label>\n          @if (showCharCount) {\n            <small\n              [ngClass]=\"currentTextLength >= textlength ? 'limit-max' : ''\"\n              >{{ currentTextLength }}/{{ textlength }}</small\n              >\n            }\n          </div>\n        </div>\n      </div>\n    }\n    @if (inputStyle === 'bs') {\n      <div>\n        <div class=\"bs_textarea\">\n          <textarea\n            [cols]=\"cols\"\n            [rows]=\"rows\"\n            class=\"form__field\"\n            [placeholder]=\"placeholder\"\n            id=\"bs_textarea\"\n            #textareaInput\n          ></textarea>\n          @if (showCharCount) {\n            <small\n              [ngClass]=\"currentTextLength >= textlength ? 'limit-max' : ''\"\n              >{{ currentTextLength }}/{{ textlength }}</small\n              >\n            }\n          </div>\n        </div>\n      }\n","/**\r\n * ZT-UI Components Toast Service\r\n *\r\n * A comprehensive service for managing toast notifications in Angular applications.\r\n * Provides methods for displaying different types of toasts with customizable options.\r\n *\r\n * Features:\r\n * - Multiple toast types (success, error, info, warning)\r\n * - Configurable duration and auto-dismiss\r\n * - Multiple positioning options\r\n * - Progress indicators\r\n * - Manual dismissal controls\r\n * - Reactive state management with RxJS\r\n *\r\n * @example\r\n * ```typescript\r\n * constructor(private toastService: ZtToastService) {}\r\n *\r\n * showSuccess() {\r\n *   this.toastService.success('Operation completed!', 'Success');\r\n * }\r\n * ```\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Toast notification configuration interface\r\n *\r\n * Defines the structure and options for individual toast notifications.\r\n * All properties are optional except for the message and type.\r\n */\r\nexport interface ZtToast {\r\n  /** Unique identifier for the toast */\r\n  id: string;\r\n  /** Type of toast that determines styling and icon */\r\n  type: 'success' | 'error' | 'info' | 'warning';\r\n  /** Optional title for the toast */\r\n  title?: string;\r\n  /** Main message content */\r\n  message: string;\r\n  /** Auto-dismiss duration in milliseconds (0 = never auto-dismiss) */\r\n  duration?: number;\r\n  /** Position on screen where toast appears */\r\n  position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\r\n  /** Whether the toast can be manually dismissed by clicking */\r\n  dismissible?: boolean;\r\n  /** Whether to show a progress bar indicating time remaining */\r\n  showProgress?: boolean;\r\n}\r\n\r\n/**\r\n * Toast service providing centralized management of notifications\r\n *\r\n * This service maintains the global state of all active toasts and provides\r\n * convenient methods for displaying different types of notifications.\r\n *\r\n * The service uses BehaviorSubject for reactive state management, allowing\r\n * components to subscribe to toast changes and update their UI accordingly.\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ZtToastService {\r\n  /** Internal subject managing the current list of active toasts */\r\n  private toasts$ = new BehaviorSubject<ZtToast[]>([]);\r\n\r\n  /**\r\n   * Observable stream of current toasts\r\n   * Components can subscribe to this to reactively display toasts\r\n   */\r\n  get toasts(): Observable<ZtToast[]> {\r\n    return this.toasts$.asObservable();\r\n  }\r\n\r\n  /**\r\n   * Display a new toast notification\r\n   *\r\n   * Creates a unique toast with the provided configuration and adds it to the active toasts.\r\n   * Automatically schedules removal based on the duration setting.\r\n   *\r\n   * @param toast - Toast configuration (id will be auto-generated)\r\n   */\r\n  show(toast: Omit<ZtToast, 'id'>): void {\r\n    const id = Math.random().toString(36).substr(2, 9);\r\n    const newToast: ZtToast = {\r\n      id,\r\n      type: toast.type,\r\n      title: toast.title,\r\n      message: toast.message,\r\n      duration: toast.duration ?? 5000,\r\n      position: toast.position || 'top-right',\r\n      dismissible: toast.dismissible !== false,\r\n      showProgress: toast.showProgress !== false,\r\n    };\r\n\r\n    const currentToasts = this.toasts$.value;\r\n    this.toasts$.next([...currentToasts, newToast]);\r\n\r\n    // Schedule auto-removal if duration is set\r\n    if (newToast.duration && newToast.duration > 0) {\r\n      setTimeout(() => {\r\n        this.remove(id);\r\n      }, newToast.duration);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove a specific toast by ID\r\n   *\r\n   * @param id - Unique identifier of the toast to remove\r\n   */\r\n  remove(id: string): void {\r\n    const currentToasts = this.toasts$.value;\r\n    this.toasts$.next(currentToasts.filter(toast => toast.id !== id));\r\n  }\r\n\r\n  /**\r\n   * Remove all active toasts\r\n   *\r\n   * Useful for clearing all notifications at once, such as when navigating away from a page.\r\n   */\r\n  clear(): void {\r\n    this.toasts$.next([]);\r\n  }\r\n\r\n  /**\r\n   * Show a success toast notification\r\n   *\r\n   * @param message - Main message content\r\n   * @param title - Optional title (defaults to 'Success')\r\n   * @param options - Additional toast configuration options\r\n   */\r\n  success(message: string, title?: string, options?: Partial<ZtToast>): void {\r\n    this.show({ ...options, type: 'success', message, title });\r\n  }\r\n\r\n  /**\r\n   * Show an error toast notification\r\n   *\r\n   * @param message - Main message content\r\n   * @param title - Optional title (defaults to 'Error')\r\n   * @param options - Additional toast configuration options\r\n   */\r\n  error(message: string, title?: string, options?: Partial<ZtToast>): void {\r\n    this.show({ ...options, type: 'error', message, title });\r\n  }\r\n\r\n  /**\r\n   * Show an info toast notification\r\n   *\r\n   * @param message - Main message content\r\n   * @param title - Optional title (defaults to 'Info')\r\n   * @param options - Additional toast configuration options\r\n   */\r\n  info(message: string, title?: string, options?: Partial<ZtToast>): void {\r\n    this.show({ ...options, type: 'info', message, title });\r\n  }\r\n\r\n  /**\r\n   * Show a warning toast notification\r\n   *\r\n   * @param message - Main message content\r\n   * @param title - Optional title (defaults to 'Warning')\r\n   * @param options - Additional toast configuration options\r\n   */\r\n  warning(message: string, title?: string, options?: Partial<ZtToast>): void {\r\n    this.show({ ...options, type: 'warning', message, title });\r\n  }\r\n}\r\n","/**\r\n * ZT-UI Components Toast Component\r\n *\r\n * A comprehensive toast notification component that displays non-intrusive messages\r\n * to users. Built from scratch without external dependencies, this component provides\r\n * a complete toast notification system with multiple types, positions, and customization options.\r\n *\r\n * Features:\r\n * - Multiple toast types with distinct styling (success, error, info, warning)\r\n * - Six positioning options (top-right, top-left, bottom-right, bottom-left, top-center, bottom-center)\r\n * - Configurable duration with auto-dismiss functionality\r\n * - Manual dismissal with close buttons\r\n * - Progress indicators showing time remaining\r\n * - Responsive design for mobile devices\r\n * - Smooth CSS animations for appearance and dismissal\r\n * - Demo buttons for testing in development\r\n * - Accessibility features with ARIA labels\r\n *\r\n * @example\r\n * ```html\r\n * <zt-toast position=\"top-right\" showDemoButtons=\"true\"></zt-toast>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * constructor(private toastService: ZtToastService) {}\r\n *\r\n * showNotification() {\r\n *   this.toastService.success('Operation completed!', 'Success', {\r\n *     duration: 3000,\r\n *     dismissible: true,\r\n *     showProgress: true\r\n *   });\r\n * }\r\n * ```\r\n */\r\n\r\nimport { Component, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ZtToastService, ZtToast } from './zt-toast.service';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * Toast notification component that displays messages in various positions on the screen\r\n *\r\n * This component subscribes to the ZtToastService to receive toast notifications and\r\n * displays them with appropriate styling, animations, and interactive elements.\r\n * It handles the complete lifecycle of toasts including display, progress tracking,\r\n * and cleanup.\r\n */\r\n@Component({\r\n  selector: 'zt-toast',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  template: `\r\n    <div class=\"toast-container\" [ngClass]=\"'toast-' + position\">\r\n      <div\r\n        *ngFor=\"let toast of toasts\"\r\n        class=\"toast\"\r\n        [ngClass]=\"'toast-' + toast.type\"\r\n      >\r\n        <div class=\"toast-icon\" [ngClass]=\"'icon-' + toast.type\"></div>\r\n        <div class=\"toast-content\">\r\n          <div class=\"toast-title\" *ngIf=\"toast.title\">{{ toast.title }}</div>\r\n          <div class=\"toast-message\">{{ toast.message }}</div>\r\n        </div>\r\n        <button\r\n          *ngIf=\"toast.dismissible\"\r\n          class=\"toast-close\"\r\n          (click)=\"removeToast(toast.id)\"\r\n          aria-label=\"Close toast\"\r\n        >\r\n          ×\r\n        </button>\r\n        <div\r\n          *ngIf=\"toast.showProgress\"\r\n          class=\"toast-progress\"\r\n          [style.width.%]=\"getProgress(toast)\"\r\n        ></div>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- Demo buttons for Storybook -->\r\n    <div class=\"demo-buttons\" *ngIf=\"showDemoButtons\">\r\n      <button (click)=\"showSuccess()\">Success</button>\r\n      <button (click)=\"showError()\">Error</button>\r\n      <button (click)=\"showInfo()\">Info</button>\r\n      <button (click)=\"showWarning()\">Warning</button>\r\n    </div>\r\n  `,\r\n  styles: [`\r\n    .toast-container {\r\n      position: fixed;\r\n      z-index: 9999;\r\n      pointer-events: none;\r\n      max-width: 400px;\r\n    }\r\n\r\n    .toast-container.toast-top-right {\r\n      top: 20px;\r\n      right: 20px;\r\n    }\r\n\r\n    .toast-container.toast-top-left {\r\n      top: 20px;\r\n      left: 20px;\r\n    }\r\n\r\n    .toast-container.toast-bottom-right {\r\n      bottom: 20px;\r\n      right: 20px;\r\n    }\r\n\r\n    .toast-container.toast-bottom-left {\r\n      bottom: 20px;\r\n      left: 20px;\r\n    }\r\n\r\n    .toast-container.toast-top-center {\r\n      top: 20px;\r\n      left: 50%;\r\n      transform: translateX(-50%);\r\n    }\r\n\r\n    .toast-container.toast-bottom-center {\r\n      bottom: 20px;\r\n      left: 50%;\r\n      transform: translateX(-50%);\r\n    }\r\n\r\n    .toast {\r\n      display: flex;\r\n      align-items: flex-start;\r\n      margin-bottom: 10px;\r\n      padding: 16px;\r\n      border-radius: 8px;\r\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n      color: white;\r\n      pointer-events: auto;\r\n      position: relative;\r\n      overflow: hidden;\r\n      animation: slideIn 0.3s ease-out;\r\n    }\r\n\r\n    .toast-success {\r\n      background-color: #28a745;\r\n    }\r\n\r\n    .toast-error {\r\n      background-color: #dc3545;\r\n    }\r\n\r\n    .toast-info {\r\n      background-color: #17a2b8;\r\n    }\r\n\r\n    .toast-warning {\r\n      background-color: #ffc107;\r\n      color: #212529;\r\n    }\r\n\r\n    .toast-icon {\r\n      margin-right: 12px;\r\n      font-size: 20px;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    .icon-success::before {\r\n      content: '✓';\r\n    }\r\n\r\n    .icon-error::before {\r\n      content: '✕';\r\n    }\r\n\r\n    .icon-info::before {\r\n      content: 'ℹ';\r\n    }\r\n\r\n    .icon-warning::before {\r\n      content: '⚠';\r\n    }\r\n\r\n    .toast-content {\r\n      flex: 1;\r\n    }\r\n\r\n    .toast-title {\r\n      font-weight: 600;\r\n      margin-bottom: 4px;\r\n    }\r\n\r\n    .toast-message {\r\n      font-size: 14px;\r\n      line-height: 1.4;\r\n    }\r\n\r\n    .toast-close {\r\n      background: none;\r\n      border: none;\r\n      color: inherit;\r\n      font-size: 20px;\r\n      cursor: pointer;\r\n      padding: 0;\r\n      margin-left: 12px;\r\n      opacity: 0.7;\r\n      transition: opacity 0.2s;\r\n    }\r\n\r\n    .toast-close:hover {\r\n      opacity: 1;\r\n    }\r\n\r\n    .toast-progress {\r\n      position: absolute;\r\n      bottom: 0;\r\n      left: 0;\r\n      height: 4px;\r\n      background-color: rgba(255, 255, 255, 0.3);\r\n      transition: width 0.1s linear;\r\n    }\r\n\r\n    .demo-buttons {\r\n      display: flex;\r\n      gap: 10px;\r\n      margin-top: 20px;\r\n    }\r\n\r\n    .demo-buttons button {\r\n      padding: 8px 16px;\r\n      border: none;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n    }\r\n\r\n    .demo-buttons button:nth-child(1) {\r\n      background-color: #28a745;\r\n      color: white;\r\n    }\r\n\r\n    .demo-buttons button:nth-child(2) {\r\n      background-color: #dc3545;\r\n      color: white;\r\n    }\r\n\r\n    .demo-buttons button:nth-child(3) {\r\n      background-color: #17a2b8;\r\n      color: white;\r\n    }\r\n\r\n    .demo-buttons button:nth-child(4) {\r\n      background-color: #ffc107;\r\n      color: #212529;\r\n    }\r\n\r\n    @keyframes slideIn {\r\n      from {\r\n        transform: translateX(100%);\r\n        opacity: 0;\r\n      }\r\n      to {\r\n        transform: translateX(0);\r\n        opacity: 1;\r\n      }\r\n    }\r\n\r\n    /* Responsive */\r\n    @media (max-width: 480px) {\r\n      .toast-container {\r\n        left: 10px;\r\n        right: 10px;\r\n        max-width: none;\r\n        transform: none !important;\r\n      }\r\n\r\n      .toast {\r\n        margin-bottom: 8px;\r\n      }\r\n    }\r\n  `]\r\n})\r\n/**\r\n * Toast component implementation class\r\n *\r\n * Manages the display and lifecycle of toast notifications. This component:\r\n * - Subscribes to toast service updates\r\n * - Tracks progress for each toast\r\n * - Handles manual dismissal\r\n * - Provides demo functionality for development\r\n * - Manages cleanup on component destruction\r\n */\r\nexport class ZtToastComponent implements OnInit, OnDestroy {\r\n  /** Array of currently active toasts to display */\r\n  toasts: ZtToast[] = [];\r\n\r\n  /** Subject for managing subscription cleanup */\r\n  private destroy$ = new Subject<void>();\r\n\r\n  /** Map tracking timing information for progress calculation */\r\n  private toastTimers: Map<string, { startTime: number; duration: number }> = new Map();\r\n\r\n  /**\r\n   * Show demo buttons for testing toast functionality\r\n   * Useful in development and Storybook environments\r\n   */\r\n  @Input() showDemoButtons = false;\r\n\r\n  /**\r\n   * Position where toasts should appear on the screen\r\n   * Affects the CSS classes applied to the toast container\r\n   */\r\n  @Input() position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center' = 'top-right';\r\n\r\n  /**\r\n   * Constructor - injects the toast service for managing notifications\r\n   */\r\n  constructor(private toastService: ZtToastService) {}\r\n\r\n  /**\r\n   * Component initialization lifecycle hook\r\n   *\r\n   * Sets up subscription to the toast service and initializes progress tracking\r\n   * for any existing toasts. Uses takeUntil pattern for proper cleanup.\r\n   */\r\n  ngOnInit(): void {\r\n    this.toastService.toasts\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(toasts => {\r\n        // Track new toasts for progress calculation\r\n        toasts.forEach(toast => {\r\n          if (!this.toastTimers.has(toast.id) && toast.duration && toast.duration > 0) {\r\n            this.toastTimers.set(toast.id, {\r\n              startTime: Date.now(),\r\n              duration: toast.duration\r\n            });\r\n          }\r\n        });\r\n\r\n        // Remove timers for toasts that are no longer present\r\n        this.toastTimers.forEach((_, id) => {\r\n          if (!toasts.find(t => t.id === id)) {\r\n            this.toastTimers.delete(id);\r\n          }\r\n        });\r\n\r\n        this.toasts = toasts;\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Component destruction lifecycle hook\r\n   *\r\n   * Cleans up all subscriptions and timers to prevent memory leaks.\r\n   * This is crucial for proper component lifecycle management.\r\n   */\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n    this.toastTimers.clear();\r\n  }\r\n\r\n  /**\r\n   * Manually remove a toast notification\r\n   *\r\n   * Called when user clicks the close button on a dismissible toast.\r\n   * Also cleans up the associated timer.\r\n   *\r\n   * @param id - Unique identifier of the toast to remove\r\n   */\r\n  removeToast(id: string): void {\r\n    this.toastService.remove(id);\r\n    this.toastTimers.delete(id);\r\n  }\r\n\r\n  /**\r\n   * Calculate progress percentage for a toast\r\n   *\r\n   * Used to display a progress bar showing how much time is remaining\r\n   * before the toast auto-dismisses. Returns 0-100 percentage value.\r\n   *\r\n   * @param toast - Toast object to calculate progress for\r\n   * @returns Progress percentage (0-100)\r\n   */\r\n  getProgress(toast: ZtToast): number {\r\n    if (!toast.duration || toast.duration <= 0) {\r\n      return 0;\r\n    }\r\n\r\n    const timer = this.toastTimers.get(toast.id);\r\n    if (!timer) {\r\n      return 100;\r\n    }\r\n\r\n    const elapsed = Date.now() - timer.startTime;\r\n    const progress = Math.max(0, 100 - (elapsed / timer.duration) * 100);\r\n    return Math.round(progress);\r\n  }\r\n\r\n  // Demo methods for Storybook and development testing\r\n\r\n  /**\r\n   * Demo method to show a success toast\r\n   * Used in Storybook and development environments for testing\r\n   */\r\n  showSuccess(): void {\r\n    this.toastService.success('Operation completed successfully!', 'Operation Complete');\r\n  }\r\n\r\n  /**\r\n   * Demo method to show an error toast\r\n   * Used in Storybook and development environments for testing\r\n   */\r\n  showError(): void {\r\n    this.toastService.error('An error occurred while processing your request.', 'Error Occurred');\r\n  }\r\n\r\n  /**\r\n   * Demo method to show an info toast\r\n   * Used in Storybook and development environments for testing\r\n   */\r\n  showInfo(): void {\r\n    this.toastService.info('Here is some information for you.', 'Information');\r\n  }\r\n\r\n  /**\r\n   * Demo method to show a warning toast\r\n   * Used in Storybook and development environments for testing\r\n   */\r\n  showWarning(): void {\r\n    this.toastService.warning('Please be cautious with this action.', 'Caution');\r\n  }\r\n}\r\n","/**\r\n * ZT-UI Components Toast Module\r\n *\r\n * Module that provides the toast notification functionality for Angular applications.\r\n * This module exports the standalone ZtToastComponent and makes it available\r\n * for import in other modules or standalone components.\r\n *\r\n * The module includes:\r\n * - ZtToastComponent: The main toast display component\r\n * - CommonModule: Required Angular directives (ngIf, ngFor, etc.)\r\n *\r\n * Usage in module-based applications:\r\n * ```typescript\r\n * import { ZtToastModule } from 'zt-ui-components';\r\n *\r\n * @NgModule({\r\n *   imports: [ZtToastModule],\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n *\r\n * Usage in standalone components:\r\n * ```typescript\r\n * import { ZtToastComponent } from 'zt-ui-components';\r\n *\r\n * @Component({\r\n *   imports: [ZtToastComponent],\r\n * })\r\n * export class MyComponent {}\r\n * ```\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ZtToastComponent } from './zt-toast.component';\r\n\r\n/**\r\n * Toast module providing toast notification functionality\r\n *\r\n * This module serves as a convenient way to import the toast component\r\n * in traditional NgModule-based Angular applications. For standalone\r\n * components, you can import ZtToastComponent directly.\r\n */\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    ZtToastComponent,\r\n  ],\r\n  exports: [ZtToastComponent]\r\n})\r\nexport class ZtToastModule { }\r\n","import { ThemeConfig, ThemeName } from './theme.types';\r\n\r\n/**\r\n * Default light theme configuration\r\n */\r\nexport const LIGHT_THEME: ThemeConfig = {\r\n  name: 'light',\r\n  colors: {\r\n    textBlack: '#000000',\r\n    textWhite: '#ffffff',\r\n    textPrimary: '#007bff',\r\n    default: '#f8f9fa',\r\n    defaultHoverBg: '#e9ecef',\r\n    defaultHoverBorder: '#adb5bd',\r\n    defaultPressed: '#dee2e6',\r\n    primary: '#007bff',\r\n    primaryHoverBg: '#0056b3',\r\n    primaryHoverBorder: '#004085',\r\n    primaryPressed: '#004085',\r\n    success: '#28a745',\r\n    successHoverBg: '#1e7e34',\r\n    successHoverBorder: '#155724',\r\n    successPressed: '#155724',\r\n    info: '#17a2b8',\r\n    infoHoverBg: '#117a8b',\r\n    infoHoverBorder: '#0c5460',\r\n    infoPressed: '#0c5460',\r\n    warning: '#ffc107',\r\n    warningHoverBg: '#e0a800',\r\n    warningHoverBorder: '#d39e00',\r\n    warningPressed: '#d39e00',\r\n    danger: '#dc3545',\r\n    dangerHoverBg: '#c82333',\r\n    dangerHoverBorder: '#bd2130',\r\n    dangerPressed: '#bd2130',\r\n    dark: '#343a40',\r\n    darkHoverBg: '#23272b',\r\n    darkHoverBorder: '#1d2124',\r\n    darkPressed: '#1d2124',\r\n    link: 'transparent',\r\n    linkHoverBg: 'rgba(0, 123, 255, 0.1)',\r\n    linkHoverBorder: '#007bff',\r\n    linkPressed: 'rgba(0, 123, 255, 0.2)',\r\n  },\r\n  borderRadius: 4,\r\n  borderSize: 1,\r\n  fontFamily: 'Segoe UI, sans-serif',\r\n  fontSize: {\r\n    small: '12px',\r\n    medium: '14px',\r\n    large: '16px',\r\n  },\r\n  spacing: {\r\n    small: '8px',\r\n    medium: '16px',\r\n    large: '24px',\r\n  },\r\n};\r\n\r\n/**\r\n * Default dark theme configuration\r\n */\r\nexport const DARK_THEME: ThemeConfig = {\r\n  name: 'dark',\r\n  colors: {\r\n    textBlack: '#000000',\r\n    textWhite: '#ffffff',\r\n    textPrimary: '#4dabf7',\r\n    default: '#2d3748',\r\n    defaultHoverBg: '#4a5568',\r\n    defaultHoverBorder: '#718096',\r\n    defaultPressed: '#1a202c',\r\n    primary: '#4dabf7',\r\n    primaryHoverBg: '#3182ce',\r\n    primaryHoverBorder: '#2c5282',\r\n    primaryPressed: '#2a69ac',\r\n    success: '#48bb78',\r\n    successHoverBg: '#38a169',\r\n    successHoverBorder: '#2f855a',\r\n    successPressed: '#276749',\r\n    info: '#4fd1c9',\r\n    infoHoverBg: '#38b2ac',\r\n    infoHoverBorder: '#319795',\r\n    infoPressed: '#2c7a7b',\r\n    warning: '#ed8936',\r\n    warningHoverBg: '#dd6b20',\r\n    warningHoverBorder: '#c05621',\r\n    warningPressed: '#9c4221',\r\n    danger: '#f56565',\r\n    dangerHoverBg: '#e53e3e',\r\n    dangerHoverBorder: '#c53030',\r\n    dangerPressed: '#9b2c2c',\r\n    dark: '#1a202c',\r\n    darkHoverBg: '#2d3748',\r\n    darkHoverBorder: '#4a5568',\r\n    darkPressed: '#718096',\r\n    link: 'transparent',\r\n    linkHoverBg: 'rgba(77, 171, 247, 0.1)',\r\n    linkHoverBorder: '#4dabf7',\r\n    linkPressed: 'rgba(77, 171, 247, 0.2)',\r\n  },\r\n  borderRadius: 4,\r\n  borderSize: 1,\r\n  fontFamily: 'Segoe UI, sans-serif',\r\n  fontSize: {\r\n    small: '12px',\r\n    medium: '14px',\r\n    large: '16px',\r\n  },\r\n  spacing: {\r\n    small: '8px',\r\n    medium: '16px',\r\n    large: '24px',\r\n  },\r\n};\r\n\r\n/**\r\n * Bootstrap theme configuration\r\n */\r\nexport const BOOTSTRAP_THEME: ThemeConfig = {\r\n  name: 'bootstrap',\r\n  colors: {\r\n    textBlack: '#000000',\r\n    textWhite: '#ffffff',\r\n    textPrimary: '#007bff',\r\n    default: '#f8f9fa',\r\n    defaultHoverBg: '#e9ecef',\r\n    defaultHoverBorder: '#adb5bd',\r\n    defaultPressed: '#dee2e6',\r\n    primary: '#007bff',\r\n    primaryHoverBg: '#0056b3',\r\n    primaryHoverBorder: '#004085',\r\n    primaryPressed: '#004085',\r\n    success: '#28a745',\r\n    successHoverBg: '#1e7e34',\r\n    successHoverBorder: '#155724',\r\n    successPressed: '#155724',\r\n    info: '#17a2b8',\r\n    infoHoverBg: '#117a8b',\r\n    infoHoverBorder: '#0c5460',\r\n    infoPressed: '#0c5460',\r\n    warning: '#ffc107',\r\n    warningHoverBg: '#e0a800',\r\n    warningHoverBorder: '#d39e00',\r\n    warningPressed: '#d39e00',\r\n    danger: '#dc3545',\r\n    dangerHoverBg: '#c82333',\r\n    dangerHoverBorder: '#bd2130',\r\n    dangerPressed: '#bd2130',\r\n    dark: '#343a40',\r\n    darkHoverBg: '#23272b',\r\n    darkHoverBorder: '#1d2124',\r\n    darkPressed: '#1d2124',\r\n    link: 'transparent',\r\n    linkHoverBg: 'rgba(0, 123, 255, 0.1)',\r\n    linkHoverBorder: '#007bff',\r\n    linkPressed: 'rgba(0, 123, 255, 0.2)',\r\n  },\r\n  borderRadius: 4,\r\n  borderSize: 1,\r\n  fontFamily: 'Segoe UI, sans-serif',\r\n  fontSize: {\r\n    small: '12px',\r\n    medium: '14px',\r\n    large: '16px',\r\n  },\r\n  spacing: {\r\n    small: '8px',\r\n    medium: '16px',\r\n    large: '24px',\r\n  },\r\n};\r\n\r\n/**\r\n * Material Design theme configuration\r\n */\r\nexport const MATERIAL_THEME: ThemeConfig = {\r\n  name: 'material',\r\n  colors: {\r\n    textBlack: '#000000',\r\n    textWhite: '#ffffff',\r\n    textPrimary: '#6200ee',\r\n    default: '#ffffff',\r\n    defaultHoverBg: '#f5f5f5',\r\n    defaultHoverBorder: '#e0e0e0',\r\n    defaultPressed: '#eeeeee',\r\n    primary: '#6200ee',\r\n    primaryHoverBg: '#4c00d4',\r\n    primaryHoverBorder: '#3b00a1',\r\n    primaryPressed: '#3b00a1',\r\n    success: '#4caf50',\r\n    successHoverBg: '#388e3c',\r\n    successHoverBorder: '#2e7d32',\r\n    successPressed: '#2e7d32',\r\n    info: '#2196f3',\r\n    infoHoverBg: '#1976d2',\r\n    infoHoverBorder: '#1565c0',\r\n    infoPressed: '#1565c0',\r\n    warning: '#ff9800',\r\n    warningHoverBg: '#f57c00',\r\n    warningHoverBorder: '#ef6c00',\r\n    warningPressed: '#ef6c00',\r\n    danger: '#f44336',\r\n    dangerHoverBg: '#d32f2f',\r\n    dangerHoverBorder: '#b71c1c',\r\n    dangerPressed: '#b71c1c',\r\n    dark: '#212121',\r\n    darkHoverBg: '#424242',\r\n    darkHoverBorder: '#616161',\r\n    darkPressed: '#616161',\r\n    link: 'transparent',\r\n    linkHoverBg: 'rgba(98, 0, 238, 0.1)',\r\n    linkHoverBorder: '#6200ee',\r\n    linkPressed: 'rgba(98, 0, 238, 0.2)',\r\n  },\r\n  borderRadius: 4,\r\n  borderSize: 1,\r\n  fontFamily: 'Roboto, sans-serif',\r\n  fontSize: {\r\n    small: '12px',\r\n    medium: '14px',\r\n    large: '16px',\r\n  },\r\n  spacing: {\r\n    small: '8px',\r\n    medium: '16px',\r\n    large: '24px',\r\n  },\r\n};\r\n\r\n/**\r\n * Registry of all predefined themes\r\n */\r\nexport const THEME_REGISTRY: Record<ThemeName, ThemeConfig> = {\r\n  light: LIGHT_THEME,\r\n  dark: DARK_THEME,\r\n  bootstrap: BOOTSTRAP_THEME,\r\n  material: MATERIAL_THEME,\r\n};\r\n\r\n/**\r\n * Get a theme by name with fallback to light theme\r\n */\r\nexport function getThemeByName(name: ThemeName): ThemeConfig {\r\n  return THEME_REGISTRY[name] || LIGHT_THEME;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ThemeConfig, ThemeValidationResult } from './theme.types';\r\n\r\n/**\r\n * Service for validating theme configurations\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ThemeValidationService {\r\n  /**\r\n   * Validates a theme configuration\r\n   * @param theme The theme configuration to validate\r\n   * @returns Validation result with errors and warnings\r\n   */\r\n  validateTheme(theme: ThemeConfig): ThemeValidationResult {\r\n    const errors: string[] = [];\r\n    const warnings: string[] = [];\r\n\r\n    // Check required properties\r\n    if (!theme.name || typeof theme.name !== 'string') {\r\n      errors.push('Theme name is required and must be a string');\r\n    }\r\n\r\n    if (!theme.colors || typeof theme.colors !== 'object') {\r\n      errors.push('Theme colors are required and must be an object');\r\n    } else {\r\n      // Validate color properties\r\n      const requiredColors = [\r\n        'textBlack', 'textWhite', 'textPrimary', 'default', 'primary',\r\n        'success', 'info', 'warning', 'danger', 'dark', 'link'\r\n      ];\r\n\r\n      requiredColors.forEach(color => {\r\n        if (!theme.colors[color as keyof typeof theme.colors]) {\r\n          errors.push(`Required color '${color}' is missing`);\r\n        } else if (!this.isValidColor(theme.colors[color as keyof typeof theme.colors] as string)) {\r\n          errors.push(`Color '${color}' must be a valid CSS color value`);\r\n        }\r\n      });\r\n    }\r\n\r\n    // Validate border radius\r\n    if (typeof theme.borderRadius !== 'number' || theme.borderRadius < 0) {\r\n      errors.push('Border radius must be a non-negative number');\r\n    }\r\n\r\n    // Validate border size\r\n    if (typeof theme.borderSize !== 'number' || theme.borderSize < 0) {\r\n      errors.push('Border size must be a non-negative number');\r\n    }\r\n\r\n    // Validate font size if provided\r\n    if (theme.fontSize) {\r\n      const fontSizes = ['small', 'medium', 'large'];\r\n      fontSizes.forEach(size => {\r\n        const value = theme.fontSize?.[size as keyof typeof theme.fontSize];\r\n        if (value && !this.isValidCssSize(value)) {\r\n          warnings.push(`Font size '${size}' should be a valid CSS size value`);\r\n        }\r\n      });\r\n    }\r\n\r\n    // Validate spacing if provided\r\n    if (theme.spacing) {\r\n      const spacings = ['small', 'medium', 'large'];\r\n      spacings.forEach(size => {\r\n        const value = theme.spacing?.[size as keyof typeof theme.spacing];\r\n        if (value && !this.isValidCssSize(value)) {\r\n          warnings.push(`Spacing '${size}' should be a valid CSS size value`);\r\n        }\r\n      });\r\n    }\r\n\r\n    // Check for accessibility issues\r\n    if (theme.colors) {\r\n      // Check contrast ratios for critical color combinations\r\n      const contrastIssues = this.checkContrastRatios(theme.colors);\r\n      warnings.push(...contrastIssues);\r\n    }\r\n\r\n    return {\r\n      isValid: errors.length === 0,\r\n      errors,\r\n      warnings,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Checks if a value is a valid CSS color\r\n   * @param color The color value to check\r\n   * @returns True if valid, false otherwise\r\n   */\r\n  private isValidColor(color: string): boolean {\r\n    // Basic validation for hex, rgb, rgba, hsl, hsla, and named colors\r\n    const hexRegex = /^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/;\r\n    const rgbRegex = /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/;\r\n    const rgbaRegex = /^rgba\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3}),\\s*(0|1|0?\\.\\d+)\\)$/;\r\n    const hslRegex = /^hsl\\((\\d{1,3}),\\s*(\\d{1,3})%,\\s*(\\d{1,3})%\\)$/;\r\n    const hslaRegex = /^hsla\\((\\d{1,3}),\\s*(\\d{1,3})%,\\s*(\\d{1,3})%,\\s*(0|1|0?\\.\\d+)\\)$/;\r\n    const namedColors = [\r\n      'black', 'white', 'red', 'green', 'blue', 'yellow', 'purple', 'orange',\r\n      'pink', 'gray', 'grey', 'transparent'\r\n    ];\r\n\r\n    return hexRegex.test(color) ||\r\n           rgbRegex.test(color) ||\r\n           rgbaRegex.test(color) ||\r\n           hslRegex.test(color) ||\r\n           hslaRegex.test(color) ||\r\n           namedColors.includes(color.toLowerCase()) ||\r\n           color === 'transparent';\r\n  }\r\n\r\n  /**\r\n   * Checks if a value is a valid CSS size\r\n   * @param size The size value to check\r\n   * @returns True if valid, false otherwise\r\n   */\r\n  private isValidCssSize(size: string): boolean {\r\n    const sizeRegex = /^(\\d+(\\.\\d+)?)(px|em|rem|vh|vw|vmin|vmax|%)$/;\r\n    return sizeRegex.test(size);\r\n  }\r\n\r\n  /**\r\n   * Checks contrast ratios for accessibility\r\n   * @param colors The theme colors\r\n   * @returns Array of contrast warnings\r\n   */\r\n  private checkContrastRatios(colors: any): string[] {\r\n    const warnings: string[] = [];\r\n\r\n    // This is a simplified check - in a real implementation,\r\n    // you would use a proper color contrast calculation library\r\n    // For now, we'll just check for obviously problematic combinations\r\n\r\n    const lightBgColors = ['#ffffff', '#f8f9fa', '#ffffff'];\r\n    const darkTextColors = ['#000000', '#212121'];\r\n\r\n    // Check if light backgrounds have dark text\r\n    if (lightBgColors.includes(colors.default) && !darkTextColors.includes(colors.textBlack)) {\r\n      warnings.push('Light background colors should use dark text for better contrast');\r\n    }\r\n\r\n    return warnings;\r\n  }\r\n\r\n  /**\r\n   * Merges two theme configurations with validation\r\n   * @param baseTheme The base theme\r\n   * @param overrideTheme The theme to override with\r\n   * @returns Merged theme or null if invalid\r\n   */\r\n  mergeThemes(baseTheme: ThemeConfig, overrideTheme: Partial<ThemeConfig>): ThemeConfig | null {\r\n    const merged = { ...baseTheme };\r\n\r\n    if (overrideTheme.colors) {\r\n      merged.colors = { ...merged.colors, ...overrideTheme.colors };\r\n    }\r\n\r\n    if (overrideTheme.borderRadius !== undefined) {\r\n      merged.borderRadius = overrideTheme.borderRadius;\r\n    }\r\n\r\n    if (overrideTheme.borderSize !== undefined) {\r\n      merged.borderSize = overrideTheme.borderSize;\r\n    }\r\n\r\n    if (overrideTheme.fontFamily) {\r\n      merged.fontFamily = overrideTheme.fontFamily;\r\n    }\r\n\r\n    if (overrideTheme.fontSize) {\r\n      merged.fontSize = { ...merged.fontSize, ...overrideTheme.fontSize };\r\n    }\r\n\r\n    if (overrideTheme.spacing) {\r\n      merged.spacing = { ...merged.spacing, ...overrideTheme.spacing };\r\n    }\r\n\r\n    const validation = this.validateTheme(merged);\r\n    return validation.isValid ? merged : null;\r\n  }\r\n}\r\n","import { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { ThemeConfig, ThemeName, ThemeContext } from './theme.types';\r\nimport { LIGHT_THEME, getThemeByName } from './default-themes';\r\nimport { ThemeValidationService } from './theme-validation.service';\r\n\r\n/**\r\n * Injection token for theme configuration\r\n */\r\nexport const THEME_CONFIG = new InjectionToken<Partial<ThemeConfig>>('THEME_CONFIG');\r\n\r\n/**\r\n * Service for managing global theme state and switching\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ZTThemeService {\r\n  private currentThemeSubject = new BehaviorSubject<ThemeConfig>(LIGHT_THEME);\r\n  private themeOverridesSubject = new BehaviorSubject<Partial<ThemeConfig> | null>(null);\r\n\r\n  /**\r\n   * Observable for the current global theme\r\n   */\r\n  public currentTheme$: Observable<ThemeConfig> = this.currentThemeSubject.asObservable();\r\n\r\n  /**\r\n   * Observable for theme overrides\r\n   */\r\n  public themeOverrides$: Observable<Partial<ThemeConfig> | null> = this.themeOverridesSubject.asObservable();\r\n\r\n  constructor(\r\n    private validationService: ThemeValidationService,\r\n    @Optional() @Inject(THEME_CONFIG) private config?: Partial<ThemeConfig>\r\n  ) {\r\n    this.initializeTheme();\r\n  }\r\n\r\n  /**\r\n   * Gets the current global theme\r\n   */\r\n  get currentTheme(): ThemeConfig {\r\n    return this.currentThemeSubject.value;\r\n  }\r\n\r\n  /**\r\n   * Gets the current theme overrides\r\n   */\r\n  get themeOverrides(): Partial<ThemeConfig> | null {\r\n    return this.themeOverridesSubject.value;\r\n  }\r\n\r\n  /**\r\n   * Initializes the theme from configuration or defaults\r\n   */\r\n  private initializeTheme(): void {\r\n    if (this.config) {\r\n      const mergedTheme = this.validationService.mergeThemes(LIGHT_THEME, this.config);\r\n      if (mergedTheme) {\r\n        this.setTheme(mergedTheme);\r\n      } else {\r\n        console.warn('Invalid theme configuration provided, falling back to default theme');\r\n        this.setTheme(LIGHT_THEME);\r\n      }\r\n    } else {\r\n      this.setTheme(LIGHT_THEME);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets the global theme\r\n   * @param theme The theme configuration to set\r\n   */\r\n  setTheme(theme: ThemeConfig): void {\r\n    const validation = this.validationService.validateTheme(theme);\r\n\r\n    if (!validation.isValid) {\r\n      console.error('Invalid theme configuration:', validation.errors);\r\n      throw new Error(`Theme validation failed: ${validation.errors.join(', ')}`);\r\n    }\r\n\r\n    if (validation.warnings.length > 0) {\r\n      console.warn('Theme validation warnings:', validation.warnings);\r\n    }\r\n\r\n    this.currentThemeSubject.next(theme);\r\n    this.applyThemeToDocument(theme);\r\n  }\r\n\r\n  /**\r\n   * Sets the theme by name\r\n   * @param themeName The predefined theme name\r\n   */\r\n  setThemeByName(themeName: ThemeName): void {\r\n    const theme = getThemeByName(themeName);\r\n    this.setTheme(theme);\r\n  }\r\n\r\n  /**\r\n   * Updates the current theme with partial overrides\r\n   * @param overrides Partial theme configuration\r\n   */\r\n  updateTheme(overrides: Partial<ThemeConfig>): void {\r\n    const mergedTheme = this.validationService.mergeThemes(this.currentTheme, overrides);\r\n    if (mergedTheme) {\r\n      this.setTheme(mergedTheme);\r\n    } else {\r\n      console.error('Failed to merge theme overrides');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets temporary theme overrides for a component\r\n   * @param overrides Theme overrides\r\n   * @returns Function to clear overrides\r\n   */\r\n  setThemeOverrides(overrides: Partial<ThemeConfig>): () => void {\r\n    this.themeOverridesSubject.next(overrides);\r\n    return () => this.clearThemeOverrides();\r\n  }\r\n\r\n  /**\r\n   * Clears theme overrides\r\n   */\r\n  clearThemeOverrides(): void {\r\n    this.themeOverridesSubject.next(null);\r\n  }\r\n\r\n  /**\r\n   * Gets the effective theme context for a component\r\n   * @param componentOverrides Optional component-specific overrides\r\n   * @returns Theme context with global theme and overrides\r\n   */\r\n  getThemeContext(componentOverrides?: Partial<ThemeConfig>): ThemeContext {\r\n    return {\r\n      globalTheme: this.currentTheme,\r\n      componentOverrides: componentOverrides || this.themeOverrides || undefined,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Applies theme CSS custom properties to the document root\r\n   * @param theme The theme to apply\r\n   */\r\n  private applyThemeToDocument(theme: ThemeConfig): void {\r\n    if (typeof document === 'undefined') return;\r\n\r\n    const root = document.documentElement;\r\n    const colors = theme.colors;\r\n\r\n    // Apply color variables\r\n    Object.entries(colors).forEach(([key, value]) => {\r\n      const cssVar = `--zt-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\r\n      root.style.setProperty(cssVar, value);\r\n    });\r\n\r\n    // Apply other theme properties\r\n    root.style.setProperty('--zt-border-radius', `${theme.borderRadius}px`);\r\n    root.style.setProperty('--zt-border-size', `${theme.borderSize}px`);\r\n\r\n    if (theme.fontFamily) {\r\n      root.style.setProperty('--zt-font-family', theme.fontFamily);\r\n    }\r\n\r\n    if (theme.fontSize) {\r\n      root.style.setProperty('--zt-font-size-small', theme.fontSize.small);\r\n      root.style.setProperty('--zt-font-size-medium', theme.fontSize.medium);\r\n      root.style.setProperty('--zt-font-size-large', theme.fontSize.large);\r\n    }\r\n\r\n    if (theme.spacing) {\r\n      root.style.setProperty('--zt-spacing-small', theme.spacing.small);\r\n      root.style.setProperty('--zt-spacing-medium', theme.spacing.medium);\r\n      root.style.setProperty('--zt-spacing-large', theme.spacing.large);\r\n    }\r\n\r\n    // Set theme class on body for CSS selectors\r\n    document.body.className = document.body.className.replace(/theme-\\w+/g, '');\r\n    document.body.classList.add(`theme-${theme.name}`);\r\n  }\r\n\r\n  /**\r\n   * Resets theme to default\r\n   */\r\n  resetToDefault(): void {\r\n    this.setTheme(LIGHT_THEME);\r\n  }\r\n\r\n  /**\r\n   * Toggles between light and dark themes\r\n   */\r\n  toggleDarkMode(): void {\r\n    const currentName = this.currentTheme.name;\r\n    if (currentName === 'light') {\r\n      this.setThemeByName('dark');\r\n    } else if (currentName === 'dark') {\r\n      this.setThemeByName('light');\r\n    } else {\r\n      // For other themes, toggle to dark if current is light-like, or light if dark-like\r\n      this.setThemeByName('dark');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets available theme names\r\n   */\r\n  getAvailableThemes(): ThemeName[] {\r\n    return ['light', 'dark', 'bootstrap', 'material'];\r\n  }\r\n\r\n  /**\r\n   * Exports current theme configuration\r\n   */\r\n  exportTheme(): ThemeConfig {\r\n    return { ...this.currentTheme };\r\n  }\r\n\r\n  /**\r\n   * Imports a theme configuration\r\n   * @param themeConfig The theme configuration to import\r\n   */\r\n  importTheme(themeConfig: ThemeConfig): void {\r\n    this.setTheme(themeConfig);\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  Input,\r\n  OnInit,\r\n  OnDestroy,\r\n  HostBinding,\r\n  Renderer2,\r\n  Optional,\r\n} from '@angular/core';\r\nimport { ZTThemeService } from './theme.service';\r\nimport { ThemeConfig } from './theme.types';\r\nimport { Subscription } from 'rxjs';\r\n\r\n/**\r\n * Directive to apply theme overrides to individual components\r\n * Usage: <zt-card [ztTheme]=\"customThemeConfig\">...</zt-card>\r\n */\r\n@Directive({\r\n  selector: '[ztTheme]',\r\n  standalone: true,\r\n})\r\nexport class ThemeDirective implements OnInit, OnDestroy {\r\n  private subscription?: Subscription;\r\n  private clearOverrides?: () => void;\r\n\r\n  /**\r\n   * Theme configuration override for this component\r\n   */\r\n  @Input('ztTheme') themeOverride?: Partial<ThemeConfig>;\r\n\r\n  /**\r\n   * Whether to inherit from parent theme context\r\n   */\r\n  @Input() inheritTheme = true;\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    private renderer: Renderer2,\r\n    private themeService: ZTThemeService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.themeOverride) {\r\n      this.applyThemeOverride();\r\n    } else if (this.inheritTheme) {\r\n      this.subscribeToGlobalTheme();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.clearOverrides?.();\r\n    this.subscription?.unsubscribe();\r\n  }\r\n\r\n  /**\r\n   * Applies theme override to the component\r\n   */\r\n  private applyThemeOverride(): void {\r\n    if (!this.themeOverride) return;\r\n\r\n    this.clearOverrides = this.themeService.setThemeOverrides(this.themeOverride);\r\n    this.applyThemeToElement(this.themeService.getThemeContext(this.themeOverride));\r\n  }\r\n\r\n  /**\r\n   * Subscribes to global theme changes\r\n   */\r\n  private subscribeToGlobalTheme(): void {\r\n    this.subscription = this.themeService.currentTheme$.subscribe(theme => {\r\n      const context = this.themeService.getThemeContext();\r\n      this.applyThemeToElement(context);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Applies theme styles to the element\r\n   * @param context Theme context\r\n   */\r\n  private applyThemeToElement(context: { globalTheme: ThemeConfig; componentOverrides?: Partial<ThemeConfig> }): void {\r\n    const element = this.elementRef.nativeElement;\r\n    const theme = context.componentOverrides\r\n      ? { ...context.globalTheme, ...context.componentOverrides }\r\n      : context.globalTheme;\r\n\r\n    // Apply CSS custom properties to the element\r\n    this.applyCssVariables(element, theme);\r\n\r\n    // Update element classes\r\n    this.updateThemeClasses(element, theme);\r\n  }\r\n\r\n  /**\r\n   * Applies CSS custom properties to an element\r\n   * @param element The element to apply variables to\r\n   * @param theme The theme configuration\r\n   */\r\n  private applyCssVariables(element: HTMLElement, theme: ThemeConfig): void {\r\n    const colors = theme.colors;\r\n\r\n    // Apply color variables with component scope\r\n    Object.entries(colors).forEach(([key, value]) => {\r\n      const cssVar = `--zt-${key.replace(/([A-Z])/g, '-$1').toLowerCase()}`;\r\n      this.renderer.setStyle(element, cssVar, value);\r\n    });\r\n\r\n    // Apply other theme properties\r\n    this.renderer.setStyle(element, '--zt-border-radius', `${theme.borderRadius}px`);\r\n    this.renderer.setStyle(element, '--zt-border-size', `${theme.borderSize}px`);\r\n\r\n    if (theme.fontFamily) {\r\n      this.renderer.setStyle(element, '--zt-font-family', theme.fontFamily);\r\n    }\r\n\r\n    if (theme.fontSize) {\r\n      this.renderer.setStyle(element, '--zt-font-size-small', theme.fontSize.small);\r\n      this.renderer.setStyle(element, '--zt-font-size-medium', theme.fontSize.medium);\r\n      this.renderer.setStyle(element, '--zt-font-size-large', theme.fontSize.large);\r\n    }\r\n\r\n    if (theme.spacing) {\r\n      this.renderer.setStyle(element, '--zt-spacing-small', theme.spacing.small);\r\n      this.renderer.setStyle(element, '--zt-spacing-medium', theme.spacing.medium);\r\n      this.renderer.setStyle(element, '--zt-spacing-large', theme.spacing.large);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Updates theme-related CSS classes on the element\r\n   * @param element The element to update\r\n   * @param theme The theme configuration\r\n   */\r\n  private updateThemeClasses(element: HTMLElement, theme: ThemeConfig): void {\r\n    // Remove existing theme classes\r\n    const existingClasses = Array.from(element.classList).filter(cls => cls.startsWith('theme-'));\r\n    existingClasses.forEach(cls => this.renderer.removeClass(element, cls));\r\n\r\n    // Add new theme class\r\n    this.renderer.addClass(element, `theme-${theme.name}`);\r\n  }\r\n}\r\n","/**\r\n * Theme module exports\r\n */\r\n\r\n// Types and interfaces\r\nexport * from './theme.types';\r\n\r\n// Services\r\nexport * from './theme.service';\r\nexport * from './theme-validation.service';\r\n\r\n// Re-export with ZT prefix for convenience\r\nexport { ZTThemeService as ThemeService } from './theme.service';\r\n\r\n// Default themes\r\nexport * from './default-themes';\r\n\r\n// Directives\r\nexport * from './theme.directive';\r\n\r\n// Injection tokens\r\nexport * from './theme.service';\r\n","/*\r\n * Public API Surface of zt-ui-components\r\n */\r\n\r\nexport * from './lib/zt-ui-components';\r\nexport * from './lib/zt-button/button.component';\r\nexport * from './lib/zt-card/card.component';\r\nexport * from './lib/zt-input/input.component';\r\nexport * from './lib/zt-modal/zt-modal.component';\r\nexport * from './lib/zt-select/select.component';\r\nexport * from './lib/zt-textarea/textarea.component';\r\nexport * from './lib/zt-toast/zt-toast.component';\r\nexport * from './lib/zt-toast/zt-toast.module';\r\nexport * from './lib/zt-toast/zt-toast.service';\r\n\r\n// Theme system exports\r\nexport * from './lib/theme/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.ZtToastService","i2","i1.ZTThemeService"],"mappings":"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"}